Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitlab-ci.yml2
-rw-r--r--.gitlab/ci/memory.gitlab-ci.yml19
-rw-r--r--.gitlab/ci/rails.gitlab-ci.yml69
-rw-r--r--app/assets/javascripts/api.js16
-rw-r--r--app/assets/javascripts/issuable_suggestions/components/app.vue2
-rw-r--r--app/assets/javascripts/issuable_suggestions/queries/issues.query.graphql (renamed from app/assets/javascripts/issuable_suggestions/queries/issues.graphql)0
-rw-r--r--app/assets/javascripts/mr_popover/components/mr_popover.vue2
-rw-r--r--app/assets/javascripts/mr_popover/queries/merge_request.query.graphql (renamed from app/assets/javascripts/mr_popover/queries/merge_request.graphql)0
-rw-r--r--app/assets/javascripts/notes/components/diff_with_note.vue7
-rw-r--r--app/assets/javascripts/pages/projects/pages_domains/form.js16
-rw-r--r--app/assets/javascripts/pages/sessions/new/index.js2
-rw-r--r--app/assets/javascripts/pages/sessions/new/username_validator.js148
-rw-r--r--app/assets/javascripts/repository/components/breadcrumbs.vue2
-rw-r--r--app/assets/javascripts/repository/components/last_commit.vue145
-rw-r--r--app/assets/javascripts/repository/components/table/index.vue4
-rw-r--r--app/assets/javascripts/repository/index.js19
-rw-r--r--app/assets/javascripts/repository/mixins/get_ref.js2
-rw-r--r--app/assets/javascripts/repository/queries/getFiles.query.graphql (renamed from app/assets/javascripts/repository/queries/getFiles.graphql)0
-rw-r--r--app/assets/javascripts/repository/queries/getProjectPath.query.graphql (renamed from app/assets/javascripts/repository/queries/getProjectPath.graphql)0
-rw-r--r--app/assets/javascripts/repository/queries/getProjectShortPath.query.graphql (renamed from app/assets/javascripts/repository/queries/getProjectShortPath.graphql)0
-rw-r--r--app/assets/javascripts/repository/queries/getRef.query.graphql (renamed from app/assets/javascripts/repository/queries/getRef.graphql)0
-rw-r--r--app/assets/javascripts/repository/queries/pathLastCommit.query.graphql29
-rw-r--r--app/assets/javascripts/vue_shared/components/paginated_list.vue35
-rw-r--r--app/assets/stylesheets/framework/blocks.scss1
-rw-r--r--app/assets/stylesheets/framework/typography.scss5
-rw-r--r--app/controllers/admin/application_settings_controller.rb83
-rw-r--r--app/controllers/projects/environments_controller.rb14
-rw-r--r--app/controllers/projects/issues_controller.rb16
-rw-r--r--app/controllers/projects/jobs_controller.rb6
-rw-r--r--app/controllers/projects/pages_domains_controller.rb8
-rw-r--r--app/finders/notes_finder.rb16
-rw-r--r--app/graphql/types/base_object.rb1
-rw-r--r--app/graphql/types/issue_type.rb2
-rw-r--r--app/graphql/types/label_type.rb1
-rw-r--r--app/graphql/types/merge_request_type.rb2
-rw-r--r--app/graphql/types/namespace_type.rb1
-rw-r--r--app/graphql/types/notes/note_type.rb2
-rw-r--r--app/graphql/types/project_type.rb1
-rw-r--r--app/helpers/issuables_helper.rb4
-rw-r--r--app/helpers/markup_helper.rb2
-rw-r--r--app/models/clusters/platforms/kubernetes.rb13
-rw-r--r--app/models/concerns/deployment_platform.rb39
-rw-r--r--app/models/note.rb2
-rw-r--r--app/models/pages_domain.rb30
-rw-r--r--app/models/project.rb2
-rw-r--r--app/models/project_services/kubernetes_service.rb9
-rw-r--r--app/serializers/merge_request_widget_entity.rb5
-rw-r--r--app/services/boards/issues/move_service.rb6
-rw-r--r--app/services/clusters/gcp/kubernetes/fetch_kubernetes_token_service.rb19
-rw-r--r--app/services/issues/reorder_service.rb48
-rw-r--r--app/services/issues/update_service.rb1
-rw-r--r--app/services/lfs/file_transformer.rb10
-rw-r--r--app/services/pages_domains/obtain_lets_encrypt_certificate_service.rb2
-rw-r--r--app/services/users/build_service.rb10
-rw-r--r--app/services/users/update_service.rb17
-rw-r--r--app/views/admin/application_settings/_abuse.html.haml2
-rw-r--r--app/views/admin/application_settings/_ci_cd.html.haml2
-rw-r--r--app/views/admin/application_settings/_email.html.haml2
-rw-r--r--app/views/admin/application_settings/_gitaly.html.haml2
-rw-r--r--app/views/admin/application_settings/_help_page.html.haml2
-rw-r--r--app/views/admin/application_settings/_influx.html.haml2
-rw-r--r--app/views/admin/application_settings/_ip_limits.html.haml2
-rw-r--r--app/views/admin/application_settings/_localization.html.haml2
-rw-r--r--app/views/admin/application_settings/_logging.html.haml2
-rw-r--r--app/views/admin/application_settings/_outbound.html.haml2
-rw-r--r--app/views/admin/application_settings/_pages.html.haml2
-rw-r--r--app/views/admin/application_settings/_performance.html.haml2
-rw-r--r--app/views/admin/application_settings/_performance_bar.html.haml2
-rw-r--r--app/views/admin/application_settings/_plantuml.html.haml2
-rw-r--r--app/views/admin/application_settings/_prometheus.html.haml2
-rw-r--r--app/views/admin/application_settings/_realtime.html.haml2
-rw-r--r--app/views/admin/application_settings/_registry.html.haml2
-rw-r--r--app/views/admin/application_settings/_repository_check.html.haml2
-rw-r--r--app/views/admin/application_settings/_repository_mirrors_form.html.haml2
-rw-r--r--app/views/admin/application_settings/_repository_storage.html.haml2
-rw-r--r--app/views/admin/application_settings/_spam.html.haml2
-rw-r--r--app/views/admin/application_settings/_third_party_offers.html.haml2
-rw-r--r--app/views/admin/application_settings/_usage.html.haml2
-rw-r--r--app/views/devise/shared/_signup_box.html.haml8
-rw-r--r--app/views/layouts/nav/sidebar/_group.html.haml3
-rw-r--r--app/views/projects/merge_requests/show.html.haml2
-rw-r--r--app/views/projects/pages_domains/_form.html.haml26
-rw-r--r--app/views/users/show.html.haml2
-rw-r--r--changelogs/unreleased/29775-fix-nested-lists-unnecessary-margin.yml5
-rw-r--r--changelogs/unreleased/52442-minimal-remove-mysql-support.yml5
-rw-r--r--changelogs/unreleased/57973-errors-in-application-settings-panel-shows-wrong-panel.yml5
-rw-r--r--changelogs/unreleased/59028-fix-extra-plus-in-diffs.yml5
-rw-r--r--changelogs/unreleased/62772-disable-kubernetes-credential-passthrough.yml5
-rw-r--r--changelogs/unreleased/62772-migrate-managed-clusters-to-unmanaged.yml6
-rw-r--r--changelogs/unreleased/62980-username-availability-checker-breaks-inline-validation.yml5
-rw-r--r--changelogs/unreleased/63079-migrate-clusters-with-no-token-to-unmanaged.yml6
-rw-r--r--changelogs/unreleased/63227-fix-double-border.yml5
-rw-r--r--changelogs/unreleased/63507-fix-race-condition-fetching-token.yml5
-rw-r--r--changelogs/unreleased/bug-63162-duplicate_path_in_links.yml5
-rw-r--r--changelogs/unreleased/bvl-markdown-graphql.yml5
-rw-r--r--changelogs/unreleased/db-update-geo-nodes-primary.yml5
-rw-r--r--changelogs/unreleased/expose-saml-provider-id-to-users-api.yml5
-rw-r--r--changelogs/unreleased/fix-facivon-url-if-uploads-object-store-enabled.yml5
-rw-r--r--changelogs/unreleased/paginate-license-management.yml5
-rw-r--r--changelogs/unreleased/remove-kubernetes-service-deployment-platform.yml5
-rw-r--r--changelogs/unreleased/sanitize_rake_ldap_check_output.yml5
-rw-r--r--changelogs/unreleased/sh-omit-issues-links-on-poll.yml5
-rw-r--r--changelogs/unreleased/sh-remove-import-columns-from-projects.yml5
-rw-r--r--changelogs/unreleased/zj-gitaly-usage-data.yml5
-rw-r--r--config/database.yml.postgresql9
-rw-r--r--config/dependency_decisions.yml7
-rw-r--r--config/gitlab.yml.example198
-rw-r--r--config/initializers/1_postgresql_only.rb4
-rw-r--r--config/initializers/1_settings.rb14
-rw-r--r--config/prometheus/common_metrics.yml4
-rw-r--r--config/routes/admin.rb2
-rw-r--r--config/routes/project.rb1
-rw-r--r--config/settings.rb6
-rw-r--r--config/sidekiq_queues.yml17
-rw-r--r--danger/commit_messages/Dangerfile12
-rw-r--r--db/migrate/20190607085356_add_source_to_pages_domains.rb21
-rw-r--r--db/post_migrate/20190606163724_migrate_legacy_managed_clusters_to_unmanaged.rb48
-rw-r--r--db/post_migrate/20190613231640_migrate_managed_clusters_with_no_token_to_unmanaged.rb48
-rw-r--r--db/post_migrate/20190618171120_update_geo_nodes_primary.rb20
-rw-r--r--db/post_migrate/20190619175843_remove_import_columns_from_projects.rb14
-rw-r--r--db/schema.rb8
-rw-r--r--doc/administration/environment_variables.md2
-rw-r--r--doc/administration/geo/replication/database.md4
-rw-r--r--doc/administration/geo/replication/troubleshooting.md108
-rw-r--r--doc/administration/gitaly/index.md18
-rw-r--r--doc/administration/index.md1
-rw-r--r--doc/api/README.md3
-rw-r--r--doc/api/container_registry.md5
-rw-r--r--doc/api/users.md15
-rw-r--r--doc/ci/docker/using_docker_images.md2
-rw-r--r--doc/development/architecture.md8
-rw-r--r--doc/development/contributing/issue_workflow.md52
-rw-r--r--doc/development/rake_tasks.md24
-rw-r--r--doc/development/swapping_tables.md8
-rw-r--r--doc/development/testing_guide/end_to_end/index.md12
-rw-r--r--doc/development/testing_guide/end_to_end/quick_start_guide.md4
-rw-r--r--doc/install/database_mysql.md319
-rw-r--r--doc/install/installation.md17
-rw-r--r--doc/install/requirements.md30
-rw-r--r--doc/integration/omniauth.md6
-rw-r--r--doc/raketasks/backup_restore.md31
-rw-r--r--doc/university/README.md1
-rw-r--r--doc/update/README.md5
-rw-r--r--doc/update/mysql_to_postgresql.md6
-rw-r--r--doc/update/patch_versions.md6
-rw-r--r--doc/update/upgrading_from_source.md38
-rw-r--r--doc/user/application_security/license_management/img/license_management_add_license.pngbin0 -> 87049 bytes
-rw-r--r--doc/user/application_security/license_management/img/license_management_search.pngbin0 -> 104278 bytes
-rw-r--r--doc/user/application_security/license_management/img/license_management_settings.pngbin13300 -> 171592 bytes
-rw-r--r--doc/user/application_security/license_management/index.md16
-rw-r--r--doc/user/group/subgroups/index.md13
-rw-r--r--doc/user/project/clusters/index.md8
-rw-r--r--doc/user/project/clusters/serverless/index.md18
-rw-r--r--doc/user/project/deploy_boards.md2
-rw-r--r--doc/user/project/description_templates.md3
-rw-r--r--doc/user/project/issues/issue_data_and_actions.md11
-rw-r--r--doc/user/project/pipelines/settings.md3
-rw-r--r--doc/user/project/quick_actions.md12
-rw-r--r--lib/api/discussions.rb18
-rw-r--r--lib/api/helpers.rb5
-rw-r--r--lib/api/helpers/notes_helpers.rb21
-rw-r--r--lib/api/notes.rb12
-rw-r--r--lib/api/pages_domains.rb15
-rw-r--r--lib/api/resource_label_events.rb4
-rw-r--r--lib/api/users.rb15
-rw-r--r--lib/banzai/filter/relative_link_filter.rb2
-rw-r--r--lib/gitaly/server.rb18
-rw-r--r--lib/gitlab.rb16
-rw-r--r--lib/gitlab/ci/pipeline/expression/lexeme/pattern.rb2
-rw-r--r--lib/gitlab/ci/pipeline/expression/lexer.rb2
-rw-r--r--lib/gitlab/ci/pipeline/expression/parser.rb2
-rw-r--r--lib/gitlab/database/migration_helpers.rb5
-rw-r--r--lib/gitlab/favicon.rb8
-rw-r--r--lib/gitlab/git/repository.rb9
-rw-r--r--lib/gitlab/graphql/markdown_field.rb26
-rw-r--r--lib/gitlab/graphql/markdown_field/resolver.rb22
-rw-r--r--lib/gitlab/json_cache.rb2
-rw-r--r--lib/gitlab/metrics/dashboard/base_service.rb11
-rw-r--r--lib/gitlab/metrics/dashboard/dynamic_dashboard_service.rb65
-rw-r--r--lib/gitlab/metrics/dashboard/finder.rb32
-rw-r--r--lib/gitlab/usage_data.rb3
-rw-r--r--lib/system_check/ldap_check.rb9
-rw-r--r--locale/ar_SA/gitlab.po74
-rw-r--r--locale/bg/gitlab.po74
-rw-r--r--locale/bn_BD/gitlab.po74
-rw-r--r--locale/bn_IN/gitlab.po74
-rw-r--r--locale/ca_ES/gitlab.po74
-rw-r--r--locale/cs_CZ/gitlab.po74
-rw-r--r--locale/cy_GB/gitlab.po74
-rw-r--r--locale/da_DK/gitlab.po74
-rw-r--r--locale/de/gitlab.po74
-rw-r--r--locale/el_GR/gitlab.po74
-rw-r--r--locale/eo/gitlab.po74
-rw-r--r--locale/es/gitlab.po116
-rw-r--r--locale/et_EE/gitlab.po74
-rw-r--r--locale/fil_PH/gitlab.po74
-rw-r--r--locale/fr/gitlab.po74
-rw-r--r--locale/gitlab.pot16
-rw-r--r--locale/gl_ES/gitlab.po74
-rw-r--r--locale/he_IL/gitlab.po74
-rw-r--r--locale/hi_IN/gitlab.po74
-rw-r--r--locale/hr_HR/gitlab.po74
-rw-r--r--locale/hu_HU/gitlab.po74
-rw-r--r--locale/id_ID/gitlab.po74
-rw-r--r--locale/it/gitlab.po74
-rw-r--r--locale/ja/gitlab.po108
-rw-r--r--locale/ka_GE/gitlab.po74
-rw-r--r--locale/ko/gitlab.po90
-rw-r--r--locale/mn_MN/gitlab.po74
-rw-r--r--locale/nb_NO/gitlab.po74
-rw-r--r--locale/nl_NL/gitlab.po74
-rw-r--r--locale/pa_IN/gitlab.po74
-rw-r--r--locale/pl_PL/gitlab.po74
-rw-r--r--locale/pt_BR/gitlab.po112
-rw-r--r--locale/pt_PT/gitlab.po614
-rw-r--r--locale/ro_RO/gitlab.po74
-rw-r--r--locale/ru/gitlab.po74
-rw-r--r--locale/sk_SK/gitlab.po74
-rw-r--r--locale/sq_AL/gitlab.po74
-rw-r--r--locale/sr_CS/gitlab.po74
-rw-r--r--locale/sr_SP/gitlab.po74
-rw-r--r--locale/sv_SE/gitlab.po74
-rw-r--r--locale/sw_KE/gitlab.po74
-rw-r--r--locale/tr_TR/gitlab.po74
-rw-r--r--locale/uk/gitlab.po112
-rw-r--r--locale/zh_CN/gitlab.po74
-rw-r--r--locale/zh_HK/gitlab.po74
-rw-r--r--locale/zh_TW/gitlab.po74
-rw-r--r--qa/README.md19
-rwxr-xr-xscripts/frontend/test.js23
-rwxr-xr-xscripts/memory-static20
-rwxr-xr-xscripts/memory-static-objects27
-rw-r--r--spec/controllers/admin/application_settings_controller_spec.rb33
-rw-r--r--spec/controllers/projects/environments_controller_spec.rb13
-rw-r--r--spec/controllers/projects/issues_controller_spec.rb84
-rw-r--r--spec/controllers/projects/jobs_controller_spec.rb14
-rw-r--r--spec/controllers/projects/pages_domains_controller_spec.rb64
-rw-r--r--spec/factories/pages_domains.rb4
-rw-r--r--spec/fast_spec_helper.rb1
-rw-r--r--spec/features/admin/admin_settings_spec.rb21
-rw-r--r--spec/features/projects/pages_lets_encrypt_spec.rb153
-rw-r--r--spec/features/projects/pages_spec.rb16
-rw-r--r--spec/features/users/signup_spec.rb44
-rw-r--r--spec/finders/notes_finder_spec.rb26
-rw-r--r--spec/fixtures/lib/gitlab/metrics/dashboard/schemas/embedded_dashboard.json13
-rw-r--r--spec/fixtures/lib/gitlab/metrics/dashboard/schemas/embedded_panel_groups.json11
-rw-r--r--spec/frontend/api_spec.js23
-rw-r--r--spec/frontend/repository/components/__snapshots__/last_commit_spec.js.snap98
-rw-r--r--spec/frontend/repository/components/last_commit_spec.js103
-rw-r--r--spec/frontend/vue_shared/components/paginated_list_spec.js56
-rw-r--r--spec/graphql/types/issue_type_spec.rb5
-rw-r--r--spec/graphql/types/label_type_spec.rb10
-rw-r--r--spec/graphql/types/merge_request_type_spec.rb17
-rw-r--r--spec/graphql/types/namespace_type_spec.rb9
-rw-r--r--spec/graphql/types/notes/note_type_spec.rb2
-rw-r--r--spec/graphql/types/project_type_spec.rb30
-rw-r--r--spec/javascripts/notes/components/diff_with_note_spec.js13
-rw-r--r--spec/javascripts/vue_shared/components/tooltip_on_truncate_spec.js180
-rw-r--r--spec/lib/banzai/filter/relative_link_filter_spec.rb7
-rw-r--r--spec/lib/gitaly/server_spec.rb6
-rw-r--r--spec/lib/gitlab/database/migration_helpers_spec.rb4
-rw-r--r--spec/lib/gitlab/graphql/markdown_field/resolver_spec.rb33
-rw-r--r--spec/lib/gitlab/graphql/markdown_field_spec.rb55
-rw-r--r--spec/lib/gitlab/json_cache_spec.rb10
-rw-r--r--spec/lib/gitlab/metrics/dashboard/dynamic_dashboard_service_spec.rb30
-rw-r--r--spec/lib/gitlab/metrics/dashboard/finder_spec.rb8
-rw-r--r--spec/lib/gitlab/usage_data_spec.rb5
-rw-r--r--spec/lib/gitlab_spec.rb32
-rw-r--r--spec/migrations/migrate_legacy_managed_clusters_to_unmanaged_spec.rb55
-rw-r--r--spec/migrations/migrate_managed_clusters_with_no_token_to_unmanaged_spec.rb59
-rw-r--r--spec/models/clusters/platforms/kubernetes_spec.rb32
-rw-r--r--spec/models/concerns/deployment_platform_spec.rb53
-rw-r--r--spec/models/pages_domain_spec.rb96
-rw-r--r--spec/models/project_services/kubernetes_service_spec.rb8
-rw-r--r--spec/models/project_spec.rb4
-rw-r--r--spec/requests/api/pages_domains_spec.rb8
-rw-r--r--spec/serializers/merge_request_widget_entity_spec.rb13
-rw-r--r--spec/services/clusters/gcp/kubernetes/fetch_kubernetes_token_service_spec.rb56
-rw-r--r--spec/services/issues/reorder_service_spec.rb88
-rw-r--r--spec/services/issues/update_service_spec.rb16
-rw-r--r--spec/services/pages_domains/obtain_lets_encrypt_certificate_service_spec.rb6
-rw-r--r--spec/support/helpers/kubernetes_helpers.rb24
-rw-r--r--spec/support/helpers/metrics_dashboard_helpers.rb16
-rw-r--r--spec/support/helpers/query_recorder.rb4
-rw-r--r--spec/support/matchers/be_n_plus_1_query.rb62
-rw-r--r--spec/support/shared_examples/controllers/repository_lfs_file_load_examples.rb12
-rw-r--r--spec/tasks/gitlab/check_rake_spec.rb9
287 files changed, 6084 insertions, 2572 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 059b181bb1c..5b39304444c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,7 +1,6 @@
image: "dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.6.3-golang-1.11-git-2.21-chrome-73.0-node-12.x-yarn-1.16-postgresql-9.6-graphicsmagick-1.3.29"
variables:
- MYSQL_ALLOW_EMPTY_PASSWORD: "1"
RAILS_ENV: "test"
NODE_ENV: "test"
SIMPLECOV: "true"
@@ -37,6 +36,7 @@ include:
- local: .gitlab/ci/cng.gitlab-ci.yml
- local: .gitlab/ci/docs.gitlab-ci.yml
- local: .gitlab/ci/frontend.gitlab-ci.yml
+ - local: .gitlab/ci/memory.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/ci/memory.gitlab-ci.yml b/.gitlab/ci/memory.gitlab-ci.yml
new file mode 100644
index 00000000000..50b843df585
--- /dev/null
+++ b/.gitlab/ci/memory.gitlab-ci.yml
@@ -0,0 +1,19 @@
+memory-static:
+ extends: .dedicated-no-docs-no-db-pull-cache-job
+ script:
+ # Uses two different reports from the 'derailed_benchmars' gem.
+
+ # Loads each of gems in the Gemfile and checks how much memory they consume when they are required.
+ # 'derailed_benchmarks' internally uses 'get_process_mem'
+ - scripts/memory-static 'tmp/memory_static_full_report.txt' 'tmp/memory_static_metrics.txt'
+
+ # Outputs detailed information about objects created while gems are loaded.
+ # 'derailed_benchmarks' internally uses 'memory_profiler'
+ - scripts/memory-static-objects 'tmp/memory_static_objects_full_report.txt' 'tmp/memory_static_metrics.txt'
+ artifacts:
+ paths:
+ - tmp/memory_static_full_report.txt
+ - tmp/memory_static_objects_full_report.txt
+ - tmp/memory_static_metrics.txt
+ reports:
+ metrics: tmp/memory_static_metrics.txt
diff --git a/.gitlab/ci/rails.gitlab-ci.yml b/.gitlab/ci/rails.gitlab-ci.yml
index 8534b15e16b..529a0de696b 100644
--- a/.gitlab/ci/rails.gitlab-ci.yml
+++ b/.gitlab/ci/rails.gitlab-ci.yml
@@ -10,11 +10,6 @@
command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
- name: redis:alpine
-.use-mysql: &use-mysql
- services:
- - mysql:5.7
- - redis:alpine
-
.only-schedules-master: &only-schedules-master
only:
- schedules@gitlab-org/gitlab-ce
@@ -94,10 +89,6 @@
<<: *use-pg-10
image: "dev.gitlab.org:5005/gitlab/gitlab-build-images:ruby-2.6.3-golang-1.11-git-2.21-chrome-73.0-node-12.x-yarn-1.16-postgresql-10-graphicsmagick-1.3.29"
-.rspec-metadata-mysql: &rspec-metadata-mysql
- <<: *rspec-metadata
- <<: *use-mysql
-
# DB migration, rollback, and seed jobs
.db-migrate-reset: &db-migrate-reset
extends: .dedicated-no-docs-and-no-qa-pull-cache-job
@@ -173,42 +164,6 @@ rspec system pg-10:
<<: *only-schedules-master
parallel: 24
-rspec unit mysql:
- <<: *rspec-metadata-mysql
- <<: *only-schedules-master
- parallel: 20
-
-rspec integration mysql:
- <<: *rspec-metadata-mysql
- <<: *only-schedules-master
- parallel: 6
-
-rspec system mysql:
- <<: *rspec-metadata-mysql
- <<: *only-schedules-master
- parallel: 24
-
-.rspec-mysql-on-demand: &rspec-mysql-on-demand
- only:
- variables:
- - $CI_COMMIT_MESSAGE =~ /\[run mysql\]/i
- - $CI_COMMIT_REF_NAME =~ /mysql/
-
-rspec unit mysql on-demand:
- <<: *rspec-metadata-mysql
- <<: *rspec-mysql-on-demand
- parallel: 20
-
-rspec integration mysql on-demand:
- <<: *rspec-metadata-mysql
- <<: *rspec-mysql-on-demand
- parallel: 6
-
-rspec system mysql on-demand:
- <<: *rspec-metadata-mysql
- <<: *rspec-mysql-on-demand
- parallel: 24
-
rspec-fast-spec-helper:
<<: *rspec-metadata-pg
script:
@@ -226,12 +181,6 @@ rspec quarantine pg:
<<: *rspec-quarantine
allow_failure: true
-rspec quarantine mysql:
- <<: *rspec-metadata-mysql
- <<: *rspec-quarantine
- <<: *only-schedules-master
- allow_failure: true
-
static-analysis:
extends: .dedicated-no-docs-no-db-pull-cache-job
dependencies:
@@ -281,10 +230,6 @@ db:migrate:reset-pg:
<<: *db-migrate-reset
<<: *use-pg
-db:migrate:reset-mysql:
- <<: *db-migrate-reset
- <<: *use-mysql
-
db:check-schema-pg:
<<: *db-migrate-reset
<<: *use-pg
@@ -295,10 +240,6 @@ migration:path-pg:
<<: *migration-paths
<<: *use-pg
-migration:path-mysql:
- <<: *migration-paths
- <<: *use-mysql
-
.db-rollback: &db-rollback
extends: .dedicated-no-docs-and-no-qa-pull-cache-job
script:
@@ -311,22 +252,12 @@ db:rollback-pg:
<<: *db-rollback
<<: *use-pg
-db:rollback-mysql:
- <<: *db-rollback
- <<: *use-mysql
-
gitlab:setup-pg:
<<: *gitlab-setup
<<: *use-pg
dependencies:
- setup-test-env
-gitlab:setup-mysql:
- <<: *gitlab-setup
- <<: *use-mysql
- dependencies:
- - setup-test-env
-
coverage:
# Don't include dedicated-no-docs-no-db-pull-cache-job here since we need to
# download artifacts from all the rspec jobs instead of from setup-test-env only
diff --git a/app/assets/javascripts/api.js b/app/assets/javascripts/api.js
index 7cebb88f3a4..4f66a5d080c 100644
--- a/app/assets/javascripts/api.js
+++ b/app/assets/javascripts/api.js
@@ -12,6 +12,7 @@ const Api = {
groupProjectsPath: '/api/:version/groups/:id/projects.json',
projectsPath: '/api/:version/projects.json',
projectPath: '/api/:version/projects/:id',
+ forkedProjectsPath: '/api/:version/projects/:id/forks',
projectLabelsPath: '/:namespace_path/:project_path/-/labels',
projectMergeRequestsPath: '/api/:version/projects/:id/merge_requests',
projectMergeRequestPath: '/api/:version/projects/:id/merge_requests/:mrid',
@@ -114,6 +115,21 @@ const Api = {
},
/**
+ * Get all projects for a forked relationship to a specified project
+ * @param {string} projectPath - Path or ID of a project
+ * @param {Object} params - Get request parameters
+ * @returns {Promise} - Request promise
+ */
+ projectForks(projectPath, params) {
+ const url = Api.buildUrl(Api.forkedProjectsPath).replace(
+ ':id',
+ encodeURIComponent(projectPath),
+ );
+
+ return axios.get(url, { params });
+ },
+
+ /**
* Get all Merge Requests for a project, eventually filtering based on
* supplied parameters
* @param projectPath
diff --git a/app/assets/javascripts/issuable_suggestions/components/app.vue b/app/assets/javascripts/issuable_suggestions/components/app.vue
index 575c860851c..d435460e38f 100644
--- a/app/assets/javascripts/issuable_suggestions/components/app.vue
+++ b/app/assets/javascripts/issuable_suggestions/components/app.vue
@@ -4,7 +4,7 @@ import { GlTooltipDirective } from '@gitlab/ui';
import { __ } from '~/locale';
import Icon from '~/vue_shared/components/icon.vue';
import Suggestion from './item.vue';
-import query from '../queries/issues.graphql';
+import query from '../queries/issues.query.graphql';
export default {
components: {
diff --git a/app/assets/javascripts/issuable_suggestions/queries/issues.graphql b/app/assets/javascripts/issuable_suggestions/queries/issues.query.graphql
index 2384b381344..2384b381344 100644
--- a/app/assets/javascripts/issuable_suggestions/queries/issues.graphql
+++ b/app/assets/javascripts/issuable_suggestions/queries/issues.query.graphql
diff --git a/app/assets/javascripts/mr_popover/components/mr_popover.vue b/app/assets/javascripts/mr_popover/components/mr_popover.vue
index 8e2d8fa816a..c203cb0667c 100644
--- a/app/assets/javascripts/mr_popover/components/mr_popover.vue
+++ b/app/assets/javascripts/mr_popover/components/mr_popover.vue
@@ -3,7 +3,7 @@ import { GlPopover, GlSkeletonLoading } from '@gitlab/ui';
import Icon from '../../vue_shared/components/icon.vue';
import CiIcon from '../../vue_shared/components/ci_icon.vue';
import timeagoMixin from '../../vue_shared/mixins/timeago';
-import query from '../queries/merge_request.graphql';
+import query from '../queries/merge_request.query.graphql';
import { mrStates, humanMRStates } from '../constants';
export default {
diff --git a/app/assets/javascripts/mr_popover/queries/merge_request.graphql b/app/assets/javascripts/mr_popover/queries/merge_request.query.graphql
index 37d4bc88a69..37d4bc88a69 100644
--- a/app/assets/javascripts/mr_popover/queries/merge_request.graphql
+++ b/app/assets/javascripts/mr_popover/queries/merge_request.query.graphql
diff --git a/app/assets/javascripts/notes/components/diff_with_note.vue b/app/assets/javascripts/notes/components/diff_with_note.vue
index b95835ed10a..54c242b2fda 100644
--- a/app/assets/javascripts/notes/components/diff_with_note.vue
+++ b/app/assets/javascripts/notes/components/diff_with_note.vue
@@ -7,6 +7,8 @@ import { GlSkeletonLoading } from '@gitlab/ui';
import { getDiffMode } from '~/diffs/store/utils';
import { diffViewerModes } from '~/ide/constants';
+const FIRST_CHAR_REGEX = /^(\+|-| )/;
+
export default {
components: {
DiffFileHeader,
@@ -59,6 +61,9 @@ export default {
this.error = true;
});
},
+ trimChar(line) {
+ return line.replace(FIRST_CHAR_REGEX, '');
+ },
},
userColorSchemeClass: window.gon.user_color_scheme,
};
@@ -83,7 +88,7 @@ export default {
>
<td :class="line.type" class="diff-line-num old_line">{{ line.old_line }}</td>
<td :class="line.type" class="diff-line-num new_line">{{ line.new_line }}</td>
- <td :class="line.type" class="line_content" v-html="line.rich_text"></td>
+ <td :class="line.type" class="line_content" v-html="trimChar(line.rich_text)"></td>
</tr>
</template>
<tr v-if="!hasTruncatedDiffLines" class="line_holder line-holder-placeholder">
diff --git a/app/assets/javascripts/pages/projects/pages_domains/form.js b/app/assets/javascripts/pages/projects/pages_domains/form.js
index 1d0dbfe0406..cef8e92610c 100644
--- a/app/assets/javascripts/pages/projects/pages_domains/form.js
+++ b/app/assets/javascripts/pages/projects/pages_domains/form.js
@@ -5,14 +5,6 @@ export default () => {
if (toggleContainer) {
const onToggleButtonClicked = isAutoSslEnabled => {
- Array.from(document.querySelectorAll('.js-shown-if-auto-ssl')).forEach(el => {
- if (isAutoSslEnabled) {
- el.classList.remove('d-none');
- } else {
- el.classList.add('d-none');
- }
- });
-
Array.from(document.querySelectorAll('.js-shown-unless-auto-ssl')).forEach(el => {
if (isAutoSslEnabled) {
el.classList.add('d-none');
@@ -21,14 +13,6 @@ export default () => {
}
});
- Array.from(document.querySelectorAll('.js-enabled-if-auto-ssl')).forEach(el => {
- if (isAutoSslEnabled) {
- el.removeAttribute('disabled');
- } else {
- el.setAttribute('disabled', 'disabled');
- }
- });
-
Array.from(document.querySelectorAll('.js-enabled-unless-auto-ssl')).forEach(el => {
if (isAutoSslEnabled) {
el.setAttribute('disabled', 'disabled');
diff --git a/app/assets/javascripts/pages/sessions/new/index.js b/app/assets/javascripts/pages/sessions/new/index.js
index 3f5a3e15c2c..55bc93a2b13 100644
--- a/app/assets/javascripts/pages/sessions/new/index.js
+++ b/app/assets/javascripts/pages/sessions/new/index.js
@@ -7,8 +7,8 @@ import OAuthRememberMe from './oauth_remember_me';
import preserveUrlFragment from './preserve_url_fragment';
document.addEventListener('DOMContentLoaded', () => {
- new LengthValidator(); // eslint-disable-line no-new
new UsernameValidator(); // eslint-disable-line no-new
+ new LengthValidator(); // eslint-disable-line no-new
new SigninTabsMemoizer(); // eslint-disable-line no-new
new NoEmojiValidator(); // eslint-disable-line no-new
diff --git a/app/assets/javascripts/pages/sessions/new/username_validator.js b/app/assets/javascripts/pages/sessions/new/username_validator.js
index 7a41805bada..36d1e773134 100644
--- a/app/assets/javascripts/pages/sessions/new/username_validator.js
+++ b/app/assets/javascripts/pages/sessions/new/username_validator.js
@@ -1,133 +1,79 @@
-/* eslint-disable consistent-return, class-methods-use-this */
+import InputValidator from '~/validators/input_validator';
-import $ from 'jquery';
import _ from 'underscore';
import axios from '~/lib/utils/axios_utils';
import flash from '~/flash';
import { __ } from '~/locale';
const debounceTimeoutDuration = 1000;
+const rootUrl = gon.relative_url_root;
const invalidInputClass = 'gl-field-error-outline';
const successInputClass = 'gl-field-success-outline';
-const unavailableMessageSelector = '.username .validation-error';
-const successMessageSelector = '.username .validation-success';
-const pendingMessageSelector = '.username .validation-pending';
-const invalidMessageSelector = '.username .gl-field-error';
+const successMessageSelector = '.validation-success';
+const pendingMessageSelector = '.validation-pending';
+const unavailableMessageSelector = '.validation-error';
-export default class UsernameValidator {
- constructor() {
- this.inputElement = $('#new_user_username');
- this.inputDomElement = this.inputElement.get(0);
- this.state = {
- available: false,
- valid: false,
- pending: false,
- empty: true,
- };
+export default class UsernameValidator extends InputValidator {
+ constructor(opts = {}) {
+ super();
- const debounceTimeout = _.debounce(username => {
- this.validateUsername(username);
- }, debounceTimeoutDuration);
-
- this.inputElement.on('keyup.username_check', () => {
- const username = this.inputElement.val();
-
- this.state.valid = this.inputDomElement.validity.valid;
- this.state.empty = !username.length;
+ const container = opts.container || '';
+ const validateLengthElements = document.querySelectorAll(`${container} .js-validate-username`);
- if (this.state.valid) {
- return debounceTimeout(username);
- }
-
- this.renderState();
- });
+ this.debounceValidateInput = _.debounce(inputDomElement => {
+ UsernameValidator.validateUsernameInput(inputDomElement);
+ }, debounceTimeoutDuration);
- // Override generic field validation
- this.inputElement.on('invalid', this.interceptInvalid.bind(this));
+ validateLengthElements.forEach(element =>
+ element.addEventListener('input', this.eventHandler.bind(this)),
+ );
}
- renderState() {
- // Clear all state
- this.clearFieldValidationState();
-
- if (this.state.valid && this.state.available) {
- return this.setSuccessState();
- }
-
- if (this.state.empty) {
- return this.clearFieldValidationState();
- }
-
- if (this.state.pending) {
- return this.setPendingState();
- }
+ eventHandler(event) {
+ const inputDomElement = event.target;
- if (!this.state.valid) {
- return this.setInvalidState();
- }
-
- if (!this.state.available) {
- return this.setUnavailableState();
- }
- }
-
- interceptInvalid(event) {
- event.preventDefault();
- event.stopPropagation();
+ UsernameValidator.resetInputState(inputDomElement);
+ this.debounceValidateInput(inputDomElement);
}
- validateUsername(username) {
- if (this.state.valid) {
- this.state.pending = true;
- this.state.available = false;
- this.renderState();
- axios
- .get(`${gon.relative_url_root}/users/${username}/exists`)
- .then(({ data }) => this.setAvailabilityState(data.exists))
+ static validateUsernameInput(inputDomElement) {
+ const username = inputDomElement.value;
+
+ if (inputDomElement.checkValidity() && username.length > 0) {
+ UsernameValidator.setMessageVisibility(inputDomElement, pendingMessageSelector);
+ UsernameValidator.fetchUsernameAvailability(username)
+ .then(usernameTaken => {
+ UsernameValidator.setInputState(inputDomElement, !usernameTaken);
+ UsernameValidator.setMessageVisibility(inputDomElement, pendingMessageSelector, false);
+ UsernameValidator.setMessageVisibility(
+ inputDomElement,
+ usernameTaken ? unavailableMessageSelector : successMessageSelector,
+ );
+ })
.catch(() => flash(__('An error occurred while validating username')));
}
}
- setAvailabilityState(usernameTaken) {
- if (usernameTaken) {
- this.state.available = false;
- } else {
- this.state.available = true;
- }
- this.state.pending = false;
- this.renderState();
+ static fetchUsernameAvailability(username) {
+ return axios.get(`${rootUrl}/users/${username}/exists`).then(({ data }) => data.exists);
}
- clearFieldValidationState() {
- this.inputElement.siblings('p').hide();
-
- this.inputElement.removeClass(invalidInputClass).removeClass(successInputClass);
+ static setMessageVisibility(inputDomElement, messageSelector, isVisible = true) {
+ const messageElement = inputDomElement.parentElement.querySelector(messageSelector);
+ messageElement.classList.toggle('hide', !isVisible);
}
- setUnavailableState() {
- const $usernameUnavailableMessage = this.inputElement.siblings(unavailableMessageSelector);
- this.inputElement.addClass(invalidInputClass).removeClass(successInputClass);
- $usernameUnavailableMessage.show();
+ static setInputState(inputDomElement, success = true) {
+ inputDomElement.classList.toggle(successInputClass, success);
+ inputDomElement.classList.toggle(invalidInputClass, !success);
}
- setSuccessState() {
- const $usernameSuccessMessage = this.inputElement.siblings(successMessageSelector);
- this.inputElement.addClass(successInputClass).removeClass(invalidInputClass);
- $usernameSuccessMessage.show();
- }
+ static resetInputState(inputDomElement) {
+ UsernameValidator.setMessageVisibility(inputDomElement, successMessageSelector, false);
+ UsernameValidator.setMessageVisibility(inputDomElement, unavailableMessageSelector, false);
- setPendingState() {
- const $usernamePendingMessage = $(pendingMessageSelector);
- if (this.state.pending) {
- $usernamePendingMessage.show();
- } else {
- $usernamePendingMessage.hide();
+ if (inputDomElement.checkValidity()) {
+ inputDomElement.classList.remove(successInputClass, invalidInputClass);
}
}
-
- setInvalidState() {
- const $inputErrorMessage = $(invalidMessageSelector);
- this.inputElement.addClass(invalidInputClass).removeClass(successInputClass);
- $inputErrorMessage.show();
- }
}
diff --git a/app/assets/javascripts/repository/components/breadcrumbs.vue b/app/assets/javascripts/repository/components/breadcrumbs.vue
index 6eca015036f..0d4d431855c 100644
--- a/app/assets/javascripts/repository/components/breadcrumbs.vue
+++ b/app/assets/javascripts/repository/components/breadcrumbs.vue
@@ -1,6 +1,6 @@
<script>
import getRefMixin from '../mixins/get_ref';
-import getProjectShortPath from '../queries/getProjectShortPath.graphql';
+import getProjectShortPath from '../queries/getProjectShortPath.query.graphql';
export default {
apollo: {
diff --git a/app/assets/javascripts/repository/components/last_commit.vue b/app/assets/javascripts/repository/components/last_commit.vue
new file mode 100644
index 00000000000..f25cee9bb57
--- /dev/null
+++ b/app/assets/javascripts/repository/components/last_commit.vue
@@ -0,0 +1,145 @@
+<script>
+import { GlTooltipDirective, GlLink, GlButton } from '@gitlab/ui';
+import { sprintf, s__ } from '~/locale';
+import Icon from '../../vue_shared/components/icon.vue';
+import UserAvatarLink from '../../vue_shared/components/user_avatar/user_avatar_link.vue';
+import TimeagoTooltip from '../../vue_shared/components/time_ago_tooltip.vue';
+import CommitPipelineStatus from '../../projects/tree/components/commit_pipeline_status_component.vue';
+import CiIcon from '../../vue_shared/components/ci_icon.vue';
+import ClipboardButton from '../../vue_shared/components/clipboard_button.vue';
+import getRefMixin from '../mixins/get_ref';
+import getProjectPath from '../queries/getProjectPath.query.graphql';
+import pathLastCommit from '../queries/pathLastCommit.query.graphql';
+
+export default {
+ components: {
+ Icon,
+ UserAvatarLink,
+ TimeagoTooltip,
+ CommitPipelineStatus,
+ ClipboardButton,
+ CiIcon,
+ GlLink,
+ GlButton,
+ },
+ directives: {
+ GlTooltip: GlTooltipDirective,
+ },
+ mixins: [getRefMixin],
+ apollo: {
+ projectPath: {
+ query: getProjectPath,
+ },
+ commit: {
+ query: pathLastCommit,
+ variables() {
+ return {
+ projectPath: this.projectPath,
+ ref: this.ref,
+ path: this.currentPath.replace(/^\//, ''),
+ };
+ },
+ update: data => data.project.repository.tree.commit,
+ },
+ },
+ props: {
+ currentPath: {
+ type: String,
+ required: false,
+ default: '',
+ },
+ },
+ data() {
+ return {
+ projectPath: '',
+ commit: {},
+ showDescription: false,
+ };
+ },
+ computed: {
+ statusTitle() {
+ return sprintf(s__('Commits|Commit: %{commitText}'), {
+ commitText: this.commit.pipeline.detailedStatus.text,
+ });
+ },
+ isLoading() {
+ return this.$apollo.queries.commit.loading;
+ },
+ showCommitId() {
+ return this.commit.id.substr(0, 8);
+ },
+ },
+ methods: {
+ toggleShowDescription() {
+ this.showDescription = !this.showDescription;
+ },
+ },
+};
+</script>
+
+<template>
+ <div v-if="!isLoading" class="info-well d-none d-sm-flex project-last-commit commit p-3">
+ <user-avatar-link
+ v-if="commit.author"
+ :link-href="commit.author.webUrl"
+ :img-src="commit.author.avatarUrl"
+ :img-size="40"
+ class="avatar-cell"
+ />
+ <div class="commit-detail flex-list">
+ <div class="commit-content qa-commit-content">
+ <gl-link :href="commit.webUrl" class="commit-row-message item-title">
+ {{ commit.title }}
+ </gl-link>
+ <gl-button
+ v-if="commit.description"
+ :class="{ open: showDescription }"
+ :aria-label="__('Show commit description')"
+ class="text-expander"
+ @click="toggleShowDescription"
+ >
+ <icon name="ellipsis_h" />
+ </gl-button>
+ <div class="committer">
+ <gl-link
+ v-if="commit.author"
+ :href="commit.author.webUrl"
+ class="commit-author-link js-user-link"
+ >
+ {{ commit.author.name }}
+ </gl-link>
+ authored
+ <timeago-tooltip :time="commit.authoredDate" tooltip-placement="bottom" />
+ </div>
+ <pre
+ v-if="commit.description"
+ v-show="showDescription"
+ class="commit-row-description append-bottom-8"
+ >
+ {{ commit.description }}
+ </pre>
+ </div>
+ <div class="commit-actions flex-row">
+ <gl-link
+ v-if="commit.pipeline"
+ v-gl-tooltip
+ :href="commit.pipeline.detailedStatus.detailsPath"
+ :title="statusTitle"
+ class="js-commit-pipeline"
+ >
+ <ci-icon :status="commit.pipeline.detailedStatus" :size="24" :aria-label="statusTitle" />
+ </gl-link>
+ <div class="commit-sha-group d-flex">
+ <div class="label label-monospace monospace">
+ {{ showCommitId }}
+ </div>
+ <clipboard-button
+ :text="commit.id"
+ :title="__('Copy commit SHA to clipboard')"
+ tooltip-placement="bottom"
+ />
+ </div>
+ </div>
+ </div>
+ </div>
+</template>
diff --git a/app/assets/javascripts/repository/components/table/index.vue b/app/assets/javascripts/repository/components/table/index.vue
index 0357a0e44c3..891e3fe9d16 100644
--- a/app/assets/javascripts/repository/components/table/index.vue
+++ b/app/assets/javascripts/repository/components/table/index.vue
@@ -3,8 +3,8 @@ import { GlLoadingIcon } from '@gitlab/ui';
import createFlash from '~/flash';
import { sprintf, __ } from '../../../locale';
import getRefMixin from '../../mixins/get_ref';
-import getFiles from '../../queries/getFiles.graphql';
-import getProjectPath from '../../queries/getProjectPath.graphql';
+import getFiles from '../../queries/getFiles.query.graphql';
+import getProjectPath from '../../queries/getProjectPath.query.graphql';
import TableHeader from './header.vue';
import TableRow from './row.vue';
import ParentRow from './parent_row.vue';
diff --git a/app/assets/javascripts/repository/index.js b/app/assets/javascripts/repository/index.js
index 52f53be045b..d9216e88676 100644
--- a/app/assets/javascripts/repository/index.js
+++ b/app/assets/javascripts/repository/index.js
@@ -2,6 +2,7 @@ import Vue from 'vue';
import createRouter from './router';
import App from './components/app.vue';
import Breadcrumbs from './components/breadcrumbs.vue';
+import LastCommit from './components/last_commit.vue';
import apolloProvider from './graphql';
import { setTitle } from './utils/title';
@@ -48,6 +49,24 @@ export default function setupVueRepositoryList() {
},
});
+ const commitEl = document.getElementById('js-last-commit');
+
+ if (commitEl) {
+ // eslint-disable-next-line no-new
+ new Vue({
+ el: commitEl,
+ router,
+ apolloProvider,
+ render(h) {
+ return h(LastCommit, {
+ props: {
+ currentPath: this.$route.params.pathMatch,
+ },
+ });
+ },
+ });
+ }
+
return new Vue({
el,
router,
diff --git a/app/assets/javascripts/repository/mixins/get_ref.js b/app/assets/javascripts/repository/mixins/get_ref.js
index b06087d6f42..a43e0e91bcf 100644
--- a/app/assets/javascripts/repository/mixins/get_ref.js
+++ b/app/assets/javascripts/repository/mixins/get_ref.js
@@ -1,4 +1,4 @@
-import getRef from '../queries/getRef.graphql';
+import getRef from '../queries/getRef.query.graphql';
export default {
apollo: {
diff --git a/app/assets/javascripts/repository/queries/getFiles.graphql b/app/assets/javascripts/repository/queries/getFiles.query.graphql
index ef924fde556..ef924fde556 100644
--- a/app/assets/javascripts/repository/queries/getFiles.graphql
+++ b/app/assets/javascripts/repository/queries/getFiles.query.graphql
diff --git a/app/assets/javascripts/repository/queries/getProjectPath.graphql b/app/assets/javascripts/repository/queries/getProjectPath.query.graphql
index 74e73e07577..74e73e07577 100644
--- a/app/assets/javascripts/repository/queries/getProjectPath.graphql
+++ b/app/assets/javascripts/repository/queries/getProjectPath.query.graphql
diff --git a/app/assets/javascripts/repository/queries/getProjectShortPath.graphql b/app/assets/javascripts/repository/queries/getProjectShortPath.query.graphql
index 34eb26598c2..34eb26598c2 100644
--- a/app/assets/javascripts/repository/queries/getProjectShortPath.graphql
+++ b/app/assets/javascripts/repository/queries/getProjectShortPath.query.graphql
diff --git a/app/assets/javascripts/repository/queries/getRef.graphql b/app/assets/javascripts/repository/queries/getRef.query.graphql
index 58c09844c3f..58c09844c3f 100644
--- a/app/assets/javascripts/repository/queries/getRef.graphql
+++ b/app/assets/javascripts/repository/queries/getRef.query.graphql
diff --git a/app/assets/javascripts/repository/queries/pathLastCommit.query.graphql b/app/assets/javascripts/repository/queries/pathLastCommit.query.graphql
new file mode 100644
index 00000000000..90901f54d54
--- /dev/null
+++ b/app/assets/javascripts/repository/queries/pathLastCommit.query.graphql
@@ -0,0 +1,29 @@
+query pathLastCommit($projectPath: ID!, $path: String, $ref: String!) {
+ project(fullPath: $projectPath) {
+ repository {
+ tree(path: $path, ref: $ref) {
+ commit {
+ id
+ title
+ message
+ webUrl
+ authoredDate
+ author {
+ name
+ avatarUrl
+ webUrl
+ }
+ pipeline {
+ detailedStatus {
+ detailsPath
+ icon
+ tooltip
+ text
+ group
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/app/assets/javascripts/vue_shared/components/paginated_list.vue b/app/assets/javascripts/vue_shared/components/paginated_list.vue
new file mode 100644
index 00000000000..e19b8510399
--- /dev/null
+++ b/app/assets/javascripts/vue_shared/components/paginated_list.vue
@@ -0,0 +1,35 @@
+<script>
+import { GlPaginatedList } from '@gitlab/ui';
+import { PREV, NEXT } from '~/vue_shared/components/pagination/constants';
+
+export default {
+ components: {
+ GlPaginatedList,
+ },
+ labels: {
+ prev: PREV,
+ next: NEXT,
+ },
+};
+</script>
+
+<template>
+ <gl-paginated-list
+ v-bind="$attrs"
+ :prev-text="$options.labels.prev"
+ :next-text="$options.labels.next"
+ >
+ <!-- proxy the slots -->
+ <template #header>
+ <slot name="header"></slot>
+ </template>
+
+ <template #subheader>
+ <slot name="subheader"></slot>
+ </template>
+
+ <template #default="{ listItem, query }">
+ <slot :listItem="listItem" :query="query"></slot>
+ </template>
+ </gl-paginated-list>
+</template>
diff --git a/app/assets/stylesheets/framework/blocks.scss b/app/assets/stylesheets/framework/blocks.scss
index 65c0ee74c60..53a8f7c483a 100644
--- a/app/assets/stylesheets/framework/blocks.scss
+++ b/app/assets/stylesheets/framework/blocks.scss
@@ -199,7 +199,6 @@
&.user-cover-block {
padding: 24px 0 0;
- border-bottom: 1px solid $border-color;
.nav-links {
width: 100%;
diff --git a/app/assets/stylesheets/framework/typography.scss b/app/assets/stylesheets/framework/typography.scss
index 9e1431963d9..7baab478034 100644
--- a/app/assets/stylesheets/framework/typography.scss
+++ b/app/assets/stylesheets/framework/typography.scss
@@ -221,6 +221,11 @@
ol {
padding: 0;
margin: 0 0 16px;
+
+ ul,
+ ol {
+ margin-bottom: 0;
+ }
}
ul:dir(rtl),
diff --git a/app/controllers/admin/application_settings_controller.rb b/app/controllers/admin/application_settings_controller.rb
index 57b976b9121..42634bf611e 100644
--- a/app/controllers/admin/application_settings_controller.rb
+++ b/app/controllers/admin/application_settings_controller.rb
@@ -6,56 +6,19 @@ class Admin::ApplicationSettingsController < Admin::ApplicationController
before_action :set_application_setting
before_action :whitelist_query_limiting, only: [:usage_data]
- def show
- end
-
- def integrations
- end
-
- def repository
- end
-
- def templates
- end
-
- def ci_cd
- end
-
- def reporting
- end
-
- def metrics_and_profiling
- end
-
- def network
- end
+ VALID_SETTING_PANELS = %w(show integrations repository templates
+ ci_cd reporting metrics_and_profiling
+ network geo preferences).freeze
- def geo
+ def show
end
- def preferences
+ (VALID_SETTING_PANELS - %w(show)).each do |action|
+ define_method(action) { perform_update if submitted? }
end
def update
- successful = ApplicationSettings::UpdateService
- .new(@application_setting, current_user, application_setting_params)
- .execute
-
- if recheck_user_consent?
- session[:ask_for_usage_stats_consent] = current_user.requires_usage_stats_consent?
- end
-
- redirect_path = referer_path(request) || admin_application_settings_path
-
- respond_to do |format|
- if successful
- format.json { head :ok }
- format.html { redirect_to redirect_path, notice: _('Application settings saved successfully') }
- else
- format.json { head :bad_request }
- format.html { render :show }
- end
- end
+ perform_update
end
def usage_data
@@ -149,6 +112,38 @@ class Admin::ApplicationSettingsController < Admin::ApplicationController
]
end
+ def submitted?
+ request.patch?
+ end
+
+ def perform_update
+ successful = ApplicationSettings::UpdateService
+ .new(@application_setting, current_user, application_setting_params)
+ .execute
+
+ if recheck_user_consent?
+ session[:ask_for_usage_stats_consent] = current_user.requires_usage_stats_consent?
+ end
+
+ redirect_path = referer_path(request) || admin_application_settings_path
+
+ respond_to do |format|
+ if successful
+ format.json { head :ok }
+ format.html { redirect_to redirect_path, notice: _('Application settings saved successfully') }
+ else
+ format.json { head :bad_request }
+ format.html { render_update_error }
+ end
+ end
+ end
+
+ def render_update_error
+ action = VALID_SETTING_PANELS.include?(action_name) ? action_name : :show
+
+ render action
+ end
+
def lets_encrypt_visible_attributes
return [] unless Feature.enabled?(:pages_auto_ssl)
diff --git a/app/controllers/projects/environments_controller.rb b/app/controllers/projects/environments_controller.rb
index ae46a234aa6..ecf05e6ea64 100644
--- a/app/controllers/projects/environments_controller.rb
+++ b/app/controllers/projects/environments_controller.rb
@@ -162,9 +162,17 @@ class Projects::EnvironmentsController < Projects::ApplicationController
return render_403 unless Feature.enabled?(:environment_metrics_use_prometheus_endpoint, project)
if Feature.enabled?(:environment_metrics_show_multiple_dashboards, project)
- result = dashboard_finder.find(project, current_user, environment, params[:dashboard])
-
- result[:all_dashboards] = dashboard_finder.find_all_paths(project)
+ result = dashboard_finder.find(
+ project,
+ current_user,
+ environment,
+ dashboard_path: params[:dashboard],
+ embedded: params[:embedded]
+ )
+
+ unless params[:embedded]
+ result[:all_dashboards] = dashboard_finder.find_all_paths(project)
+ end
else
result = dashboard_finder.find(project, current_user, environment)
end
diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb
index b4d89db20c5..b16f3dd9d82 100644
--- a/app/controllers/projects/issues_controller.rb
+++ b/app/controllers/projects/issues_controller.rb
@@ -33,7 +33,7 @@ class Projects::IssuesController < Projects::ApplicationController
before_action :authorize_create_issue!, only: [:new, :create]
# Allow modify issue
- before_action :authorize_update_issuable!, only: [:edit, :update, :move]
+ before_action :authorize_update_issuable!, only: [:edit, :update, :move, :reorder]
# Allow create a new branch and empty WIP merge request from current issue
before_action :authorize_create_merge_request_from!, only: [:create_merge_request]
@@ -132,6 +132,16 @@ class Projects::IssuesController < Projects::ApplicationController
render_conflict_response
end
+ def reorder
+ service = Issues::ReorderService.new(project, current_user, reorder_params)
+
+ if service.execute(issue)
+ head :ok
+ else
+ head :unprocessable_entity
+ end
+ end
+
def related_branches
@related_branches = Issues::RelatedBranchesService.new(project, current_user).execute(issue)
@@ -239,6 +249,10 @@ class Projects::IssuesController < Projects::ApplicationController
] + [{ label_ids: [], assignee_ids: [], update_task: [:index, :checked, :line_number, :line_source] }]
end
+ def reorder_params
+ params.permit(:move_before_id, :move_after_id, :group_full_path)
+ end
+
def store_uri
if request.get? && !request.xhr?
store_location_for :user, request.fullpath
diff --git a/app/controllers/projects/jobs_controller.rb b/app/controllers/projects/jobs_controller.rb
index 2a4933e7bc2..d7c0039b234 100644
--- a/app/controllers/projects/jobs_controller.rb
+++ b/app/controllers/projects/jobs_controller.rb
@@ -31,8 +31,12 @@ class Projects::JobsController < Projects::ApplicationController
@builds
end
@builds = @builds.includes([
- { pipeline: :project },
+ { pipeline: [:project, :user] },
+ :job_artifacts_archive,
+ :metadata,
+ :trigger_request,
:project,
+ :user,
:tags
])
@builds = @builds.page(params[:page]).per(30).without_count
diff --git a/app/controllers/projects/pages_domains_controller.rb b/app/controllers/projects/pages_domains_controller.rb
index 89f21d8dadb..c287e440db0 100644
--- a/app/controllers/projects/pages_domains_controller.rb
+++ b/app/controllers/projects/pages_domains_controller.rb
@@ -65,16 +65,14 @@ class Projects::PagesDomainsController < Projects::ApplicationController
private
def create_params
- params.require(:pages_domain).permit(:key, :certificate, :domain, :auto_ssl_enabled)
+ params.require(:pages_domain).permit(:user_provided_key, :user_provided_certificate, :domain, :auto_ssl_enabled)
end
def update_params
- params.require(:pages_domain).permit(:key, :certificate, :auto_ssl_enabled)
+ params.require(:pages_domain).permit(:user_provided_key, :user_provided_certificate, :auto_ssl_enabled)
end
- # rubocop: disable CodeReuse/ActiveRecord
def domain
- @domain ||= @project.pages_domains.find_by!(domain: params[:id].to_s)
+ @domain ||= @project.pages_domains.find_by_domain!(params[:id].to_s)
end
- # rubocop: enable CodeReuse/ActiveRecord
end
diff --git a/app/finders/notes_finder.rb b/app/finders/notes_finder.rb
index 817aac8b5d5..8f610d7dddb 100644
--- a/app/finders/notes_finder.rb
+++ b/app/finders/notes_finder.rb
@@ -34,8 +34,10 @@ class NotesFinder
target_type = @params[:target_type]
target_id = @params[:target_id]
+ target_iid = @params[:target_iid]
- return @target = nil unless target_type && target_id
+ return @target = nil unless target_type
+ return @target = nil unless target_id || target_iid
@target =
if target_type == "commit"
@@ -43,12 +45,22 @@ class NotesFinder
@project.commit(target_id)
end
else
- noteables_for_type(target_type).find(target_id)
+ noteables_for_type_by_id(target_type, target_id, target_iid)
end
end
private
+ def noteables_for_type_by_id(type, id, iid)
+ query = if id
+ { id: id }
+ else
+ { iid: iid }
+ end
+
+ noteables_for_type(type).find_by!(query) # rubocop: disable CodeReuse/ActiveRecord
+ end
+
def init_collection
if target
notes_on_target
diff --git a/app/graphql/types/base_object.rb b/app/graphql/types/base_object.rb
index e40059c46bb..dad16898ba6 100644
--- a/app/graphql/types/base_object.rb
+++ b/app/graphql/types/base_object.rb
@@ -4,6 +4,7 @@ module Types
class BaseObject < GraphQL::Schema::Object
prepend Gitlab::Graphql::Present
prepend Gitlab::Graphql::ExposePermissions
+ prepend Gitlab::Graphql::MarkdownField
field_class Types::BaseField
diff --git a/app/graphql/types/issue_type.rb b/app/graphql/types/issue_type.rb
index f2365499eee..8b208cab1df 100644
--- a/app/graphql/types/issue_type.rb
+++ b/app/graphql/types/issue_type.rb
@@ -14,7 +14,9 @@ module Types
field :iid, GraphQL::ID_TYPE, null: false
field :title, GraphQL::STRING_TYPE, null: false
+ markdown_field :title_html, null: true
field :description, GraphQL::STRING_TYPE, null: true
+ markdown_field :description_html, null: true
field :state, IssueStateEnum, null: false
field :reference, GraphQL::STRING_TYPE, null: false, method: :to_reference do
diff --git a/app/graphql/types/label_type.rb b/app/graphql/types/label_type.rb
index ccd466edc1a..50eb1b89c61 100644
--- a/app/graphql/types/label_type.rb
+++ b/app/graphql/types/label_type.rb
@@ -5,6 +5,7 @@ module Types
graphql_name 'Label'
field :description, GraphQL::STRING_TYPE, null: true
+ markdown_field :description_html, null: true
field :title, GraphQL::STRING_TYPE, null: false
field :color, GraphQL::STRING_TYPE, null: false
field :text_color, GraphQL::STRING_TYPE, null: false
diff --git a/app/graphql/types/merge_request_type.rb b/app/graphql/types/merge_request_type.rb
index dac4c24cf10..577ccd48ef8 100644
--- a/app/graphql/types/merge_request_type.rb
+++ b/app/graphql/types/merge_request_type.rb
@@ -15,7 +15,9 @@ module Types
field :id, GraphQL::ID_TYPE, null: false
field :iid, GraphQL::STRING_TYPE, null: false
field :title, GraphQL::STRING_TYPE, null: false
+ markdown_field :title_html, null: true
field :description, GraphQL::STRING_TYPE, null: true
+ markdown_field :description_html, null: true
field :state, MergeRequestStateEnum, null: false
field :created_at, Types::TimeType, null: false
field :updated_at, Types::TimeType, null: false
diff --git a/app/graphql/types/namespace_type.rb b/app/graphql/types/namespace_type.rb
index f6d91320e50..62feccaa660 100644
--- a/app/graphql/types/namespace_type.rb
+++ b/app/graphql/types/namespace_type.rb
@@ -12,6 +12,7 @@ module Types
field :full_path, GraphQL::ID_TYPE, null: false
field :description, GraphQL::STRING_TYPE, null: true
+ markdown_field :description_html, null: true
field :visibility, GraphQL::STRING_TYPE, null: true
field :lfs_enabled, GraphQL::BOOLEAN_TYPE, null: true, method: :lfs_enabled?
field :request_access_enabled, GraphQL::BOOLEAN_TYPE, null: true
diff --git a/app/graphql/types/notes/note_type.rb b/app/graphql/types/notes/note_type.rb
index 85c55d16ac2..fe54a45c7dc 100644
--- a/app/graphql/types/notes/note_type.rb
+++ b/app/graphql/types/notes/note_type.rb
@@ -35,6 +35,8 @@ module Types
method: :note,
description: "The content note itself"
+ markdown_field :body_html, null: true, method: :note
+
field :created_at, Types::TimeType, null: false
field :updated_at, Types::TimeType, null: false
field :discussion, Types::Notes::DiscussionType, null: true, description: "The discussion this note is a part of"
diff --git a/app/graphql/types/project_type.rb b/app/graphql/types/project_type.rb
index 81914b70c7f..ac957eafafc 100644
--- a/app/graphql/types/project_type.rb
+++ b/app/graphql/types/project_type.rb
@@ -17,6 +17,7 @@ module Types
field :name, GraphQL::STRING_TYPE, null: false
field :description, GraphQL::STRING_TYPE, null: true
+ markdown_field :description_html, null: true
field :tag_list, GraphQL::STRING_TYPE, null: true
diff --git a/app/helpers/issuables_helper.rb b/app/helpers/issuables_helper.rb
index 9a12db258d5..150f24a5d5b 100644
--- a/app/helpers/issuables_helper.rb
+++ b/app/helpers/issuables_helper.rb
@@ -74,7 +74,7 @@ module IssuablesHelper
end
end
- def serialize_issuable(issuable, serializer: nil)
+ def serialize_issuable(issuable, opts = {})
serializer_klass = case issuable
when Issue
IssueSerializer
@@ -84,7 +84,7 @@ module IssuablesHelper
serializer_klass
.new(current_user: current_user, project: issuable.project)
- .represent(issuable, serializer: serializer)
+ .represent(issuable, opts)
.to_json
end
diff --git a/app/helpers/markup_helper.rb b/app/helpers/markup_helper.rb
index bf894360a2e..8ccb39f8444 100644
--- a/app/helpers/markup_helper.rb
+++ b/app/helpers/markup_helper.rb
@@ -278,7 +278,7 @@ module MarkupHelper
def prepare_for_rendering(html, context = {})
return '' unless html.present?
- context.merge!(
+ context.reverse_merge!(
current_user: (current_user if defined?(current_user)),
# RelativeLinkFilter
diff --git a/app/models/clusters/platforms/kubernetes.rb b/app/models/clusters/platforms/kubernetes.rb
index 272861cacf0..2afe471d1cc 100644
--- a/app/models/clusters/platforms/kubernetes.rb
+++ b/app/models/clusters/platforms/kubernetes.rb
@@ -91,19 +91,6 @@ module Clusters
elsif kubernetes_namespace = cluster.kubernetes_namespaces.has_service_account_token.find_by(project: project)
variables.concat(kubernetes_namespace.predefined_variables)
- elsif cluster.project_type?
- # As of 11.11 a user can create a cluster that they manage themselves,
- # which replicates the existing project-level cluster behaviour.
- # Once we have marked all project-level clusters that make use of this
- # behaviour as "unmanaged", we can remove the `cluster.project_type?`
- # check here.
- project_namespace = cluster.kubernetes_namespace_for(project)
-
- variables
- .append(key: 'KUBE_URL', value: api_url)
- .append(key: 'KUBE_TOKEN', value: token, public: false, masked: true)
- .append(key: 'KUBE_NAMESPACE', value: project_namespace)
- .append(key: 'KUBECONFIG', value: kubeconfig(project_namespace), public: false, file: true)
end
variables.concat(cluster.predefined_variables)
diff --git a/app/models/concerns/deployment_platform.rb b/app/models/concerns/deployment_platform.rb
index 9ac0d612db3..1bd8a799f0d 100644
--- a/app/models/concerns/deployment_platform.rb
+++ b/app/models/concerns/deployment_platform.rb
@@ -14,9 +14,7 @@ module DeploymentPlatform
def find_deployment_platform(environment)
find_cluster_platform_kubernetes(environment: environment) ||
find_group_cluster_platform_kubernetes_with_feature_guard(environment: environment) ||
- find_instance_cluster_platform_kubernetes_with_feature_guard(environment: environment) ||
- find_kubernetes_service_integration ||
- build_cluster_and_deployment_platform
+ find_instance_cluster_platform_kubernetes_with_feature_guard(environment: environment)
end
# EE would override this and utilize environment argument
@@ -48,39 +46,4 @@ module DeploymentPlatform
Clusters::Instance.new.clusters.enabled.default_environment
.first&.platform_kubernetes
end
-
- def find_kubernetes_service_integration
- services.deployment.reorder(nil).find_by(active: true)
- end
-
- def build_cluster_and_deployment_platform
- return unless kubernetes_service_template
-
- cluster = ::Clusters::Cluster.create(cluster_attributes_from_service_template)
- cluster.platform_kubernetes if cluster.persisted?
- end
-
- def kubernetes_service_template
- @kubernetes_service_template ||= KubernetesService.active.find_by_template
- end
-
- def cluster_attributes_from_service_template
- {
- name: 'kubernetes-template',
- projects: [self],
- cluster_type: :project_type,
- provider_type: :user,
- platform_type: :kubernetes,
- platform_kubernetes_attributes: platform_kubernetes_attributes_from_service_template
- }
- end
-
- def platform_kubernetes_attributes_from_service_template
- {
- api_url: kubernetes_service_template.api_url,
- ca_pem: kubernetes_service_template.ca_pem,
- token: kubernetes_service_template.token,
- namespace: kubernetes_service_template.namespace
- }
- end
end
diff --git a/app/models/note.rb b/app/models/note.rb
index 15271c68a9e..b55af7d9b5e 100644
--- a/app/models/note.rb
+++ b/app/models/note.rb
@@ -457,7 +457,7 @@ class Note < ApplicationRecord
end
def banzai_render_context(field)
- super.merge(noteable: noteable)
+ super.merge(noteable: noteable, system_note: system?)
end
def retrieve_upload(_identifier, paths)
diff --git a/app/models/pages_domain.rb b/app/models/pages_domain.rb
index 524df30289e..07195c0bfd3 100644
--- a/app/models/pages_domain.rb
+++ b/app/models/pages_domain.rb
@@ -4,6 +4,8 @@ class PagesDomain < ApplicationRecord
VERIFICATION_KEY = 'gitlab-pages-verification-code'.freeze
VERIFICATION_THRESHOLD = 3.days.freeze
+ enum certificate_source: { user_provided: 0, gitlab_provided: 1 }, _prefix: :certificate
+
belongs_to :project
has_many :acme_orders, class_name: "PagesDomainAcmeOrder"
@@ -143,6 +145,34 @@ class PagesDomain < ApplicationRecord
self.certificate_valid_not_after = x509&.not_after
end
+ def user_provided_key
+ key if certificate_user_provided?
+ end
+
+ def user_provided_key=(key)
+ self.key = key
+ self.certificate_source = 'user_provided' if key_changed?
+ end
+
+ def user_provided_certificate
+ certificate if certificate_user_provided?
+ end
+
+ def user_provided_certificate=(certificate)
+ self.certificate = certificate
+ self.certificate_source = 'user_provided' if certificate_changed?
+ end
+
+ def gitlab_provided_certificate=(certificate)
+ self.certificate = certificate
+ self.certificate_source = 'gitlab_provided' if certificate_changed?
+ end
+
+ def gitlab_provided_key=(key)
+ self.key = key
+ self.certificate_source = 'gitlab_provided' if key_changed?
+ end
+
private
def set_verification_code
diff --git a/app/models/project.rb b/app/models/project.rb
index 351d08eaf63..7851f37116c 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -55,8 +55,6 @@ class Project < ApplicationRecord
VALID_MIRROR_PORTS = [22, 80, 443].freeze
VALID_MIRROR_PROTOCOLS = %w(http https ssh git).freeze
- ignore_column :import_status, :import_jid, :import_error
-
cache_markdown_field :description, pipeline: :description
delegate :feature_available?, :builds_enabled?, :wiki_enabled?,
diff --git a/app/models/project_services/kubernetes_service.rb b/app/models/project_services/kubernetes_service.rb
index edf7e886e77..27b7827d55e 100644
--- a/app/models/project_services/kubernetes_service.rb
+++ b/app/models/project_services/kubernetes_service.rb
@@ -170,12 +170,11 @@ class KubernetesService < Service
def deprecation_message
content = if project
- _("Kubernetes service integration has been deprecated. %{deprecated_message_content} your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page") % {
- deprecated_message_content: deprecated_message_content,
+ _("Kubernetes service integration has been disabled. Fields on this page are not used by GitLab, you can configure your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page") % {
url: Gitlab::Routing.url_helpers.project_clusters_path(project)
}
else
- _("The instance-level Kubernetes service integration is deprecated. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>.") % {
+ _("The instance-level Kubernetes service integration is disabled. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>.") % {
url: Gitlab::Routing.url_helpers.admin_clusters_path
}
end
@@ -260,8 +259,4 @@ class KubernetesService < Service
errors[:base] << deprecation_message
end
end
-
- def deprecated_message_content
- _("Fields on this page are now uneditable, you can configure")
- end
end
diff --git a/app/serializers/merge_request_widget_entity.rb b/app/serializers/merge_request_widget_entity.rb
index a428930dbbf..43aced598a9 100644
--- a/app/serializers/merge_request_widget_entity.rb
+++ b/app/serializers/merge_request_widget_entity.rb
@@ -114,7 +114,10 @@ class MergeRequestWidgetEntity < IssuableEntity
presenter(merge_request).ci_status
end
- expose :issues_links do
+ # Rendering and redacting Markdown can be expensive. These links are
+ # just nice to have in the merge request widget, so only
+ # include them if they are explicitly requested on first load.
+ expose :issues_links, if: -> (_, opts) { opts[:issues_links] } do
expose :assign_to_closing do |merge_request|
presenter(merge_request).assign_to_closing_issues_link
end
diff --git a/app/services/boards/issues/move_service.rb b/app/services/boards/issues/move_service.rb
index 834baeb9643..e27d34dbcab 100644
--- a/app/services/boards/issues/move_service.rb
+++ b/app/services/boards/issues/move_service.rb
@@ -79,9 +79,11 @@ module Boards
# rubocop: enable CodeReuse/ActiveRecord
def move_between_ids
- return unless params[:move_after_id] || params[:move_before_id]
+ ids = [params[:move_after_id], params[:move_before_id]]
+ .map(&:to_i)
+ .map { |m| m.positive? ? m : nil }
- [params[:move_after_id], params[:move_before_id]]
+ ids.any? ? ids : nil
end
end
end
diff --git a/app/services/clusters/gcp/kubernetes/fetch_kubernetes_token_service.rb b/app/services/clusters/gcp/kubernetes/fetch_kubernetes_token_service.rb
index 4ad04ab801e..5d9bdc52d37 100644
--- a/app/services/clusters/gcp/kubernetes/fetch_kubernetes_token_service.rb
+++ b/app/services/clusters/gcp/kubernetes/fetch_kubernetes_token_service.rb
@@ -4,17 +4,30 @@ module Clusters
module Gcp
module Kubernetes
class FetchKubernetesTokenService
+ DEFAULT_TOKEN_RETRY_DELAY = 5.seconds
+ TOKEN_RETRY_LIMIT = 5
+
attr_reader :kubeclient, :service_account_token_name, :namespace
- def initialize(kubeclient, service_account_token_name, namespace)
+ def initialize(kubeclient, service_account_token_name, namespace, token_retry_delay: DEFAULT_TOKEN_RETRY_DELAY)
@kubeclient = kubeclient
@service_account_token_name = service_account_token_name
@namespace = namespace
+ @token_retry_delay = token_retry_delay
end
def execute
- token_base64 = get_secret&.dig('data', 'token')
- Base64.decode64(token_base64) if token_base64
+ # Kubernetes will create the Secret and set the token asynchronously
+ # so it is necessary to retry
+ # https://kubernetes.io/docs/reference/access-authn-authz/service-accounts-admin/#token-controller
+ TOKEN_RETRY_LIMIT.times do
+ token_base64 = get_secret&.dig('data', 'token')
+ return Base64.decode64(token_base64) if token_base64
+
+ sleep @token_retry_delay
+ end
+
+ nil
end
private
diff --git a/app/services/issues/reorder_service.rb b/app/services/issues/reorder_service.rb
new file mode 100644
index 00000000000..02c18d31b5e
--- /dev/null
+++ b/app/services/issues/reorder_service.rb
@@ -0,0 +1,48 @@
+# frozen_string_literal: true
+
+module Issues
+ class ReorderService < Issues::BaseService
+ def execute(issue)
+ return false unless can?(current_user, :update_issue, issue)
+ return false if group && !can?(current_user, :read_group, group)
+
+ attrs = issue_params(group)
+ return false if attrs.empty?
+
+ update(issue, attrs)
+ end
+
+ private
+
+ def group
+ return unless params[:group_full_path]
+
+ @group ||= Group.find_by_full_path(params[:group_full_path])
+ end
+
+ def update(issue, attrs)
+ ::Issues::UpdateService.new(project, current_user, attrs).execute(issue)
+ rescue ActiveRecord::RecordNotFound
+ false
+ end
+
+ def issue_params(group)
+ attrs = {}
+
+ if move_between_ids
+ attrs[:move_between_ids] = move_between_ids
+ attrs[:board_group_id] = group&.id
+ end
+
+ attrs
+ end
+
+ def move_between_ids
+ ids = [params[:move_after_id], params[:move_before_id]]
+ .map(&:to_i)
+ .map { |m| m.positive? ? m : nil }
+
+ ids.any? ? ids : nil
+ end
+ end
+end
diff --git a/app/services/issues/update_service.rb b/app/services/issues/update_service.rb
index cb2337d29d4..6b9f23f24cd 100644
--- a/app/services/issues/update_service.rb
+++ b/app/services/issues/update_service.rb
@@ -76,6 +76,7 @@ module Issues
issue_before = get_issue_if_allowed(before_id, board_group_id)
issue_after = get_issue_if_allowed(after_id, board_group_id)
+ raise ActiveRecord::RecordNotFound unless issue_before || issue_after
issue.move_between(issue_before, issue_after)
end
diff --git a/app/services/lfs/file_transformer.rb b/app/services/lfs/file_transformer.rb
index d1746399908..88f59b820a4 100644
--- a/app/services/lfs/file_transformer.rb
+++ b/app/services/lfs/file_transformer.rb
@@ -4,6 +4,14 @@ module Lfs
# Usage: Calling `new_file` check to see if a file should be in LFS and
# return a transformed result with `content` and `encoding` to commit.
#
+ # The `repository` passed to the initializer can be a Repository or
+ # a DesignManagement::Repository (an EE-specific class that inherits
+ # from Repository).
+ #
+ # The `repository_type` property will be one of the types named in
+ # `Gitlab::GlRepository.types`, and is recorded on the `LfsObjectsProject`
+ # in order to identify the repository location of the blob.
+ #
# For LFS an LfsObject linked to the project is stored and an LFS
# pointer returned. If the file isn't in LFS the untransformed content
# is returned to save in the commit.
@@ -52,7 +60,7 @@ module Lfs
end
def cached_attributes
- @cached_attributes ||= Gitlab::Git::AttributesAtRefParser.new(repository, branch_name)
+ @cached_attributes ||= repository.attributes_at(branch_name)
end
# rubocop: disable CodeReuse/ActiveRecord
diff --git a/app/services/pages_domains/obtain_lets_encrypt_certificate_service.rb b/app/services/pages_domains/obtain_lets_encrypt_certificate_service.rb
index 2dfe1a3d8ca..3413a9e4612 100644
--- a/app/services/pages_domains/obtain_lets_encrypt_certificate_service.rb
+++ b/app/services/pages_domains/obtain_lets_encrypt_certificate_service.rb
@@ -35,7 +35,7 @@ module PagesDomains
def save_certificate(private_key, api_order)
certificate = api_order.certificate
- pages_domain.update!(key: private_key, certificate: certificate)
+ pages_domain.update!(gitlab_provided_key: private_key, gitlab_provided_certificate: certificate)
end
end
end
diff --git a/app/services/users/build_service.rb b/app/services/users/build_service.rb
index 30f7743c56e..026bcfcdaf4 100644
--- a/app/services/users/build_service.rb
+++ b/app/services/users/build_service.rb
@@ -5,10 +5,12 @@ module Users
delegate :user_default_internal_regex_enabled?,
:user_default_internal_regex_instance,
to: :'Gitlab::CurrentSettings.current_application_settings'
+ attr_reader :identity_params
def initialize(current_user, params = {})
@current_user = current_user
@params = params.dup
+ @identity_params = params.slice(*identity_attributes)
end
def execute(skip_authorization: false)
@@ -26,10 +28,8 @@ module Users
end
end
- identity_attrs = params.slice(*identity_params)
-
- unless identity_attrs.empty?
- user.identities.build(identity_attrs)
+ unless identity_params.empty?
+ user.identities.build(identity_params)
end
user
@@ -37,7 +37,7 @@ module Users
private
- def identity_params
+ def identity_attributes
[:extern_uid, :provider]
end
diff --git a/app/services/users/update_service.rb b/app/services/users/update_service.rb
index 0b00bd135eb..15c13a452ad 100644
--- a/app/services/users/update_service.rb
+++ b/app/services/users/update_service.rb
@@ -3,11 +3,13 @@
module Users
class UpdateService < BaseService
include NewUserNotifier
+ attr_reader :user, :identity_params
def initialize(current_user, params = {})
@current_user = current_user
@user = params.delete(:user)
@status_params = params.delete(:status)
+ @identity_params = params.slice(*identity_attributes)
@params = params.dup
end
@@ -15,8 +17,8 @@ module Users
yield(@user) if block_given?
user_exists = @user.persisted?
-
assign_attributes
+ assign_identity
if @user.save(validate: validate) && update_status
notify_success(user_exists)
@@ -55,7 +57,18 @@ module Users
params.reject! { |key, _| read_only.include?(key.to_sym) }
end
- @user.assign_attributes(params) unless params.empty?
+ @user.assign_attributes(params.except(*identity_attributes)) unless params.empty? # rubocop: disable CodeReuse/ActiveRecord
+ end
+
+ def assign_identity
+ return unless identity_params.present?
+
+ identity = user.identities.find_or_create_by(provider: identity_params[:provider]) # rubocop: disable CodeReuse/ActiveRecord
+ identity.update(identity_params)
+ end
+
+ def identity_attributes
+ [:provider, :extern_uid]
end
end
end
diff --git a/app/views/admin/application_settings/_abuse.html.haml b/app/views/admin/application_settings/_abuse.html.haml
index 5f8bd799d23..ddffec32c41 100644
--- a/app/views/admin/application_settings/_abuse.html.haml
+++ b/app/views/admin/application_settings/_abuse.html.haml
@@ -1,4 +1,4 @@
-= form_for @application_setting, url: admin_application_settings_path(anchor: 'js-abuse-settings'), html: { class: 'fieldset-form' } do |f|
+= form_for @application_setting, url: reporting_admin_application_settings_path(anchor: 'js-abuse-settings'), html: { class: 'fieldset-form' } do |f|
= form_errors(@application_setting)
%fieldset
diff --git a/app/views/admin/application_settings/_ci_cd.html.haml b/app/views/admin/application_settings/_ci_cd.html.haml
index b8c481df0d2..d1de4286ee7 100644
--- a/app/views/admin/application_settings/_ci_cd.html.haml
+++ b/app/views/admin/application_settings/_ci_cd.html.haml
@@ -1,4 +1,4 @@
-= form_for @application_setting, url: admin_application_settings_path(anchor: 'js-ci-cd-settings'), html: { class: 'fieldset-form' } do |f|
+= form_for @application_setting, url: ci_cd_admin_application_settings_path(anchor: 'js-ci-cd-settings'), html: { class: 'fieldset-form' } do |f|
= form_errors(@application_setting)
%fieldset
diff --git a/app/views/admin/application_settings/_email.html.haml b/app/views/admin/application_settings/_email.html.haml
index 3f30c75fbb6..bd60ff0b99c 100644
--- a/app/views/admin/application_settings/_email.html.haml
+++ b/app/views/admin/application_settings/_email.html.haml
@@ -1,4 +1,4 @@
-= form_for @application_setting, url: admin_application_settings_path(anchor: 'js-email-settings'), html: { class: 'fieldset-form' } do |f|
+= form_for @application_setting, url: preferences_admin_application_settings_path(anchor: 'js-email-settings'), html: { class: 'fieldset-form' } do |f|
= form_errors(@application_setting)
%fieldset
diff --git a/app/views/admin/application_settings/_gitaly.html.haml b/app/views/admin/application_settings/_gitaly.html.haml
index f39d5709811..1da02de0461 100644
--- a/app/views/admin/application_settings/_gitaly.html.haml
+++ b/app/views/admin/application_settings/_gitaly.html.haml
@@ -1,4 +1,4 @@
-= form_for @application_setting, url: admin_application_settings_path(anchor: 'js-gitaly-settings'), html: { class: 'fieldset-form' } do |f|
+= form_for @application_setting, url: preferences_admin_application_settings_path(anchor: 'js-gitaly-settings'), html: { class: 'fieldset-form' } do |f|
= form_errors(@application_setting)
%fieldset
diff --git a/app/views/admin/application_settings/_help_page.html.haml b/app/views/admin/application_settings/_help_page.html.haml
index aa491c735d1..a869f1bd4df 100644
--- a/app/views/admin/application_settings/_help_page.html.haml
+++ b/app/views/admin/application_settings/_help_page.html.haml
@@ -1,4 +1,4 @@
-= form_for @application_setting, url: admin_application_settings_path(anchor: 'js-help-settings'), html: { class: 'fieldset-form' } do |f|
+= form_for @application_setting, url: preferences_admin_application_settings_path(anchor: 'js-help-settings'), html: { class: 'fieldset-form' } do |f|
= form_errors(@application_setting)
%fieldset
diff --git a/app/views/admin/application_settings/_influx.html.haml b/app/views/admin/application_settings/_influx.html.haml
index dc5cbb8fa94..98c7a9659c3 100644
--- a/app/views/admin/application_settings/_influx.html.haml
+++ b/app/views/admin/application_settings/_influx.html.haml
@@ -1,4 +1,4 @@
-= form_for @application_setting, url: admin_application_settings_path(anchor: 'js-influx-settings'), html: { class: 'fieldset-form' } do |f|
+= form_for @application_setting, url: metrics_and_profiling_admin_application_settings_path(anchor: 'js-influx-settings'), html: { class: 'fieldset-form' } do |f|
= form_errors(@application_setting)
%fieldset
diff --git a/app/views/admin/application_settings/_ip_limits.html.haml b/app/views/admin/application_settings/_ip_limits.html.haml
index 5a5681830b8..67a04fcf698 100644
--- a/app/views/admin/application_settings/_ip_limits.html.haml
+++ b/app/views/admin/application_settings/_ip_limits.html.haml
@@ -1,4 +1,4 @@
-= form_for @application_setting, url: admin_application_settings_path(anchor: 'js-ip-limits-settings'), html: { class: 'fieldset-form' } do |f|
+= form_for @application_setting, url: network_admin_application_settings_path(anchor: 'js-ip-limits-settings'), html: { class: 'fieldset-form' } do |f|
= form_errors(@application_setting)
%fieldset
diff --git a/app/views/admin/application_settings/_localization.html.haml b/app/views/admin/application_settings/_localization.html.haml
index 95d016a94a5..bb4d1fa1241 100644
--- a/app/views/admin/application_settings/_localization.html.haml
+++ b/app/views/admin/application_settings/_localization.html.haml
@@ -1,4 +1,4 @@
-= form_for @application_setting, url: admin_application_settings_path(anchor: 'js-localization-settings'), html: { class: 'fieldset-form' } do |f|
+= form_for @application_setting, url: preferences_admin_application_settings_path(anchor: 'js-localization-settings'), html: { class: 'fieldset-form' } do |f|
= form_errors(@application_setting)
%fieldset
diff --git a/app/views/admin/application_settings/_logging.html.haml b/app/views/admin/application_settings/_logging.html.haml
index 1da5f6fccd6..d57066bba01 100644
--- a/app/views/admin/application_settings/_logging.html.haml
+++ b/app/views/admin/application_settings/_logging.html.haml
@@ -1,4 +1,4 @@
-= form_for @application_setting, url: admin_application_settings_path(anchor: 'js-logging-settings'), html: { class: 'fieldset-form' } do |f|
+= form_for @application_setting, url: reporting_admin_application_settings_path(anchor: 'js-logging-settings'), html: { class: 'fieldset-form' } do |f|
= form_errors(@application_setting)
%p
diff --git a/app/views/admin/application_settings/_outbound.html.haml b/app/views/admin/application_settings/_outbound.html.haml
index dd56bb99a06..d16304ed338 100644
--- a/app/views/admin/application_settings/_outbound.html.haml
+++ b/app/views/admin/application_settings/_outbound.html.haml
@@ -1,4 +1,4 @@
-= form_for @application_setting, url: admin_application_settings_path(anchor: 'js-outbound-settings'), html: { class: 'fieldset-form' } do |f|
+= form_for @application_setting, url: network_admin_application_settings_path(anchor: 'js-outbound-settings'), html: { class: 'fieldset-form' } do |f|
= form_errors(@application_setting)
%fieldset
diff --git a/app/views/admin/application_settings/_pages.html.haml b/app/views/admin/application_settings/_pages.html.haml
index 77795dbf913..d7d709ffd62 100644
--- a/app/views/admin/application_settings/_pages.html.haml
+++ b/app/views/admin/application_settings/_pages.html.haml
@@ -1,4 +1,4 @@
-= form_for @application_setting, url: admin_application_settings_path(anchor: 'js-pages-settings'), html: { class: 'fieldset-form' } do |f|
+= form_for @application_setting, url: preferences_admin_application_settings_path(anchor: 'js-pages-settings'), html: { class: 'fieldset-form' } do |f|
= form_errors(@application_setting)
%fieldset
diff --git a/app/views/admin/application_settings/_performance.html.haml b/app/views/admin/application_settings/_performance.html.haml
index e7076e7ed2f..7821a83530f 100644
--- a/app/views/admin/application_settings/_performance.html.haml
+++ b/app/views/admin/application_settings/_performance.html.haml
@@ -1,4 +1,4 @@
-= form_for @application_setting, url: admin_application_settings_path(anchor: 'js-performance-settings'), html: { class: 'fieldset-form' } do |f|
+= form_for @application_setting, url: network_admin_application_settings_path(anchor: 'js-performance-settings'), html: { class: 'fieldset-form' } do |f|
= form_errors(@application_setting)
%fieldset
diff --git a/app/views/admin/application_settings/_performance_bar.html.haml b/app/views/admin/application_settings/_performance_bar.html.haml
index 1e66b635038..f8bc29048f2 100644
--- a/app/views/admin/application_settings/_performance_bar.html.haml
+++ b/app/views/admin/application_settings/_performance_bar.html.haml
@@ -1,4 +1,4 @@
-= form_for @application_setting, url: admin_application_settings_path(anchor: 'js-performance-bar-settings'), html: { class: 'fieldset-form' } do |f|
+= form_for @application_setting, url: metrics_and_profiling_admin_application_settings_path(anchor: 'js-performance-bar-settings'), html: { class: 'fieldset-form' } do |f|
= form_errors(@application_setting)
%fieldset
diff --git a/app/views/admin/application_settings/_plantuml.html.haml b/app/views/admin/application_settings/_plantuml.html.haml
index 5c2b7114426..86dc289dd7c 100644
--- a/app/views/admin/application_settings/_plantuml.html.haml
+++ b/app/views/admin/application_settings/_plantuml.html.haml
@@ -1,4 +1,4 @@
-= form_for @application_setting, url: admin_application_settings_path(anchor: 'js-plantuml-settings'), html: { class: 'fieldset-form' } do |f|
+= form_for @application_setting, url: integrations_admin_application_settings_path(anchor: 'js-plantuml-settings'), html: { class: 'fieldset-form' } do |f|
= form_errors(@application_setting)
%fieldset
diff --git a/app/views/admin/application_settings/_prometheus.html.haml b/app/views/admin/application_settings/_prometheus.html.haml
index a923568e52d..4c0ff3a18e8 100644
--- a/app/views/admin/application_settings/_prometheus.html.haml
+++ b/app/views/admin/application_settings/_prometheus.html.haml
@@ -1,4 +1,4 @@
-= form_for @application_setting, url: admin_application_settings_path(anchor: 'js-prometheus-settings'), html: { class: 'fieldset-form' } do |f|
+= form_for @application_setting, url: metrics_and_profiling_admin_application_settings_path(anchor: 'js-prometheus-settings'), html: { class: 'fieldset-form' } do |f|
= form_errors(@application_setting)
%fieldset
diff --git a/app/views/admin/application_settings/_realtime.html.haml b/app/views/admin/application_settings/_realtime.html.haml
index 92f0c02eb6a..8f6946534ea 100644
--- a/app/views/admin/application_settings/_realtime.html.haml
+++ b/app/views/admin/application_settings/_realtime.html.haml
@@ -1,4 +1,4 @@
-= form_for @application_setting, url: admin_application_settings_path(anchor: 'js-realtime-settings'), html: { class: 'fieldset-form' } do |f|
+= form_for @application_setting, url: preferences_admin_application_settings_path(anchor: 'js-realtime-settings'), html: { class: 'fieldset-form' } do |f|
= form_errors(@application_setting)
%fieldset
diff --git a/app/views/admin/application_settings/_registry.html.haml b/app/views/admin/application_settings/_registry.html.haml
index 08c981db13f..77623e1495b 100644
--- a/app/views/admin/application_settings/_registry.html.haml
+++ b/app/views/admin/application_settings/_registry.html.haml
@@ -1,4 +1,4 @@
-= form_for @application_setting, url: admin_application_settings_path(anchor: 'js-registry-settings'), html: { class: 'fieldset-form' } do |f|
+= form_for @application_setting, url: ci_cd_admin_application_settings_path(anchor: 'js-registry-settings'), html: { class: 'fieldset-form' } do |f|
= form_errors(@application_setting)
%fieldset
diff --git a/app/views/admin/application_settings/_repository_check.html.haml b/app/views/admin/application_settings/_repository_check.html.haml
index 925e39bc0a3..417916d8c25 100644
--- a/app/views/admin/application_settings/_repository_check.html.haml
+++ b/app/views/admin/application_settings/_repository_check.html.haml
@@ -1,4 +1,4 @@
-= form_for @application_setting, url: admin_application_settings_path(anchor: 'js-repository-check-settings'), html: { class: 'fieldset-form' } do |f|
+= form_for @application_setting, url: repository_admin_application_settings_path(anchor: 'js-repository-check-settings'), html: { class: 'fieldset-form' } do |f|
= form_errors(@application_setting)
%fieldset
diff --git a/app/views/admin/application_settings/_repository_mirrors_form.html.haml b/app/views/admin/application_settings/_repository_mirrors_form.html.haml
index f2f2cd1282a..362f4a42464 100644
--- a/app/views/admin/application_settings/_repository_mirrors_form.html.haml
+++ b/app/views/admin/application_settings/_repository_mirrors_form.html.haml
@@ -1,4 +1,4 @@
-= form_for @application_setting, url: admin_application_settings_path(anchor: 'js-mirror-settings') do |f|
+= form_for @application_setting, url: repository_admin_application_settings_path(anchor: 'js-mirror-settings') do |f|
= form_errors(@application_setting)
%fieldset
diff --git a/app/views/admin/application_settings/_repository_storage.html.haml b/app/views/admin/application_settings/_repository_storage.html.haml
index 7a2bbfcdc4d..e5bcb180445 100644
--- a/app/views/admin/application_settings/_repository_storage.html.haml
+++ b/app/views/admin/application_settings/_repository_storage.html.haml
@@ -1,4 +1,4 @@
-= form_for @application_setting, url: admin_application_settings_path(anchor: 'js-repository-storage-settings'), html: { class: 'fieldset-form' } do |f|
+= form_for @application_setting, url: repository_admin_application_settings_path(anchor: 'js-repository-storage-settings'), html: { class: 'fieldset-form' } do |f|
= form_errors(@application_setting)
%fieldset
diff --git a/app/views/admin/application_settings/_spam.html.haml b/app/views/admin/application_settings/_spam.html.haml
index 54cda531580..a34fc15acb1 100644
--- a/app/views/admin/application_settings/_spam.html.haml
+++ b/app/views/admin/application_settings/_spam.html.haml
@@ -1,4 +1,4 @@
-= form_for @application_setting, url: admin_application_settings_path(anchor: 'js-spam-settings'), html: { class: 'fieldset-form' } do |f|
+= form_for @application_setting, url: reporting_admin_application_settings_path(anchor: 'js-spam-settings'), html: { class: 'fieldset-form' } do |f|
= form_errors(@application_setting)
%fieldset
diff --git a/app/views/admin/application_settings/_third_party_offers.html.haml b/app/views/admin/application_settings/_third_party_offers.html.haml
index fae5b0b965f..adde09f75e4 100644
--- a/app/views/admin/application_settings/_third_party_offers.html.haml
+++ b/app/views/admin/application_settings/_third_party_offers.html.haml
@@ -1,6 +1,6 @@
- application_setting = local_assigns.fetch(:application_setting)
-= form_for application_setting, url: admin_application_settings_path(anchor: 'js-third-party-offers-settings'), html: { class: 'fieldset-form' } do |f|
+= form_for application_setting, url: integrations_admin_application_settings_path(anchor: 'js-third-party-offers-settings'), html: { class: 'fieldset-form' } do |f|
= form_errors(application_setting)
%fieldset
diff --git a/app/views/admin/application_settings/_usage.html.haml b/app/views/admin/application_settings/_usage.html.haml
index 788595877ea..d716b52be05 100644
--- a/app/views/admin/application_settings/_usage.html.haml
+++ b/app/views/admin/application_settings/_usage.html.haml
@@ -1,4 +1,4 @@
-= form_for @application_setting, url: admin_application_settings_path(anchor: 'js-usage-settings'), html: { class: 'fieldset-form' } do |f|
+= form_for @application_setting, url: metrics_and_profiling_admin_application_settings_path(anchor: 'js-usage-settings'), html: { class: 'fieldset-form' } do |f|
= form_errors(@application_setting)
%fieldset
diff --git a/app/views/devise/shared/_signup_box.html.haml b/app/views/devise/shared/_signup_box.html.haml
index 5eba819172b..eae3ee6339f 100644
--- a/app/views/devise/shared/_signup_box.html.haml
+++ b/app/views/devise/shared/_signup_box.html.haml
@@ -10,10 +10,10 @@
= f.text_field :name, class: "form-control top qa-new-user-name js-block-emoji js-validate-length", :data => { :max_length => max_name_length, :max_length_message => s_("SignUp|Name is too long (maximum is %{max_length} characters).") % { max_length: max_name_length } }, required: true, title: _("This field is required.")
.username.form-group
= f.label :username, class: 'label-bold'
- = f.text_field :username, class: "form-control middle qa-new-user-username js-block-emoji js-validate-length", :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 } }, pattern: Gitlab::PathRegex::NAMESPACE_FORMAT_REGEX_JS, required: true, title: _("Please create a username with only alphanumeric characters.")
- %p.validation-error.field-validation.hide= _('Username is already taken.')
- %p.validation-success.field-validation.hide= _('Username is available.')
- %p.validation-pending.field-validation.hide= _('Checking username availability...')
+ = f.text_field :username, class: "form-control middle qa-new-user-username 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 } }, 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.hide= _('Username is already taken.')
+ %p.validation-success.gl-field-error-ignore.field-validation.hide= _('Username is available.')
+ %p.validation-pending.gl-field-error-ignore.field-validation.hide= _('Checking username availability...')
.form-group
= f.label :email, class: 'label-bold'
= f.email_field :email, class: "form-control middle qa-new-user-email", required: true, title: _("Please provide a valid email address.")
diff --git a/app/views/layouts/nav/sidebar/_group.html.haml b/app/views/layouts/nav/sidebar/_group.html.haml
index 0fc5ebbea7e..4b5ccc33716 100644
--- a/app/views/layouts/nav/sidebar/_group.html.haml
+++ b/app/views/layouts/nav/sidebar/_group.html.haml
@@ -45,7 +45,6 @@
= _('Contribution Analytics')
= render_if_exists 'layouts/nav/group_insights_link'
- = render_if_exists 'groups/sidebar/dependency_proxy' # EE-specific
= render_if_exists "layouts/nav/ee/epic_link", group: @group
@@ -119,6 +118,8 @@
%strong.fly-out-top-item-name
= _('Kubernetes')
+ = render_if_exists 'groups/sidebar/packages' # EE-specific
+
- if group_sidebar_link?(:group_members)
= nav_link(path: 'group_members#index') do
= link_to group_group_members_path(@group) do
diff --git a/app/views/projects/merge_requests/show.html.haml b/app/views/projects/merge_requests/show.html.haml
index f593f4e049e..2084ca6f905 100644
--- a/app/views/projects/merge_requests/show.html.haml
+++ b/app/views/projects/merge_requests/show.html.haml
@@ -19,7 +19,7 @@
-# haml-lint:disable InlineJavaScript
:javascript
window.gl = window.gl || {};
- window.gl.mrWidgetData = #{serialize_issuable(@merge_request, serializer: 'widget')}
+ window.gl.mrWidgetData = #{serialize_issuable(@merge_request, serializer: 'widget', issues_links: true)}
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')}';
diff --git a/app/views/projects/pages_domains/_form.html.haml b/app/views/projects/pages_domains/_form.html.haml
index 33f2166480b..e7edb93f05b 100644
--- a/app/views/projects/pages_domains/_form.html.haml
+++ b/app/views/projects/pages_domains/_form.html.haml
@@ -11,7 +11,7 @@
- if Gitlab.config.pages.external_https
- - auto_ssl_available = Feature.enabled?(:pages_auto_ssl)
+ - auto_ssl_available = ::Gitlab::LetsEncrypt::Client.new.enabled?
- auto_ssl_enabled = @domain.auto_ssl_enabled?
- auto_ssl_available_and_enabled = auto_ssl_available && auto_ssl_enabled
@@ -38,40 +38,24 @@
- docs_link_end = "</a>".html_safe
= _("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}.").html_safe % { docs_link_url: docs_link_url, docs_link_start: docs_link_start, docs_link_end: docs_link_end }
- .js-shown-if-auto-ssl{ class: ("d-none" unless auto_ssl_available_and_enabled) }
- .form-group.row
- .col-sm-2.col-form-label
- = f.label :certificate, _("Certificate (PEM)")
- .col-sm-10
- - if auto_ssl_available_and_enabled && !@domain.certificate.empty?
- = f.text_area :certificate,
- rows: 5,
- class: "form-control",
- disabled: true
- %span.help-inline.text-muted= _("This certificate is automatically managed by Let's Encrypt")
- - else
- %p.text-secondary.form-control-plaintext= _("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.")
-
.js-shown-unless-auto-ssl{ class: ("d-none" if auto_ssl_available_and_enabled) }
.form-group.row
.col-sm-2.col-form-label
- = f.label :certificate, _("Certificate (PEM)")
+ = f.label :user_provided_certificate, _("Certificate (PEM)")
.col-sm-10
- = f.text_area :certificate,
+ = f.text_area :user_provided_certificate,
rows: 5,
class: "form-control js-enabled-unless-auto-ssl",
- value: (@domain.certificate unless auto_ssl_available_and_enabled),
disabled: auto_ssl_available_and_enabled
%span.help-inline.text-muted= _("Upload a certificate for your domain with all intermediates")
.form-group.row
.col-sm-2.col-form-label
- = f.label :key, _("Key (PEM)")
+ = f.label :user_provided_key, _("Key (PEM)")
.col-sm-10
- = f.text_area :key,
+ = f.text_area :user_provided_key,
rows: 5,
class: "form-control js-enabled-unless-auto-ssl",
- value: (@domain.key unless auto_ssl_available_and_enabled),
disabled: auto_ssl_available_and_enabled
%span.help-inline.text-muted= _("Upload a private key for your certificate")
diff --git a/app/views/users/show.html.haml b/app/views/users/show.html.haml
index a71bfd624e4..b3a73030859 100644
--- a/app/views/users/show.html.haml
+++ b/app/views/users/show.html.haml
@@ -9,7 +9,7 @@
= auto_discovery_link_tag(:atom, user_url(@user, format: :atom), title: "#{@user.name} activity")
.user-profile
- .cover-block.user-cover-block
+ .cover-block.user-cover-block{ class: [('border-bottom' if profile_tabs.empty?)] }
.cover-controls
- if @user == current_user
= link_to profile_path, class: 'btn btn-default has-tooltip', title: s_('UserProfile|Edit profile'), 'aria-label': 'Edit profile' do
diff --git a/changelogs/unreleased/29775-fix-nested-lists-unnecessary-margin.yml b/changelogs/unreleased/29775-fix-nested-lists-unnecessary-margin.yml
new file mode 100644
index 00000000000..e7e43c54bab
--- /dev/null
+++ b/changelogs/unreleased/29775-fix-nested-lists-unnecessary-margin.yml
@@ -0,0 +1,5 @@
+---
+title: Fix nested lists unnecessary margin
+merge_request: 29775
+author: Kuba Kopeć
+type: fixed
diff --git a/changelogs/unreleased/52442-minimal-remove-mysql-support.yml b/changelogs/unreleased/52442-minimal-remove-mysql-support.yml
new file mode 100644
index 00000000000..f1a50657383
--- /dev/null
+++ b/changelogs/unreleased/52442-minimal-remove-mysql-support.yml
@@ -0,0 +1,5 @@
+---
+title: Remove MySQL support
+merge_request: 29790
+author:
+type: removed
diff --git a/changelogs/unreleased/57973-errors-in-application-settings-panel-shows-wrong-panel.yml b/changelogs/unreleased/57973-errors-in-application-settings-panel-shows-wrong-panel.yml
new file mode 100644
index 00000000000..2b62992eda0
--- /dev/null
+++ b/changelogs/unreleased/57973-errors-in-application-settings-panel-shows-wrong-panel.yml
@@ -0,0 +1,5 @@
+---
+title: Show poper panel when validation error occurs in admin settings panels
+merge_request: 25434
+author:
+type: fixed
diff --git a/changelogs/unreleased/59028-fix-extra-plus-in-diffs.yml b/changelogs/unreleased/59028-fix-extra-plus-in-diffs.yml
new file mode 100644
index 00000000000..0786f4dbc10
--- /dev/null
+++ b/changelogs/unreleased/59028-fix-extra-plus-in-diffs.yml
@@ -0,0 +1,5 @@
+---
+title: Remove duplicate trailing +/- char in merge request discussions
+merge_request: 29518
+author:
+type: fixed
diff --git a/changelogs/unreleased/62772-disable-kubernetes-credential-passthrough.yml b/changelogs/unreleased/62772-disable-kubernetes-credential-passthrough.yml
new file mode 100644
index 00000000000..35771e80821
--- /dev/null
+++ b/changelogs/unreleased/62772-disable-kubernetes-credential-passthrough.yml
@@ -0,0 +1,5 @@
+---
+title: Disable Kubernetes credential passthrough for managed project-level clusters
+merge_request: 29262
+author:
+type: removed
diff --git a/changelogs/unreleased/62772-migrate-managed-clusters-to-unmanaged.yml b/changelogs/unreleased/62772-migrate-managed-clusters-to-unmanaged.yml
new file mode 100644
index 00000000000..62a67c7b78d
--- /dev/null
+++ b/changelogs/unreleased/62772-migrate-managed-clusters-to-unmanaged.yml
@@ -0,0 +1,6 @@
+---
+title: Migrate GitLab managed project-level clusters to unmanaged if a Kubernetes
+ namespace was unable to be created
+merge_request: 29251
+author:
+type: other
diff --git a/changelogs/unreleased/62980-username-availability-checker-breaks-inline-validation.yml b/changelogs/unreleased/62980-username-availability-checker-breaks-inline-validation.yml
new file mode 100644
index 00000000000..7436f5d278e
--- /dev/null
+++ b/changelogs/unreleased/62980-username-availability-checker-breaks-inline-validation.yml
@@ -0,0 +1,5 @@
+---
+title: Fix the signup form's username validation messages not displaying
+merge_request: 29678
+author: Jiaan Louw
+type: fixed
diff --git a/changelogs/unreleased/63079-migrate-clusters-with-no-token-to-unmanaged.yml b/changelogs/unreleased/63079-migrate-clusters-with-no-token-to-unmanaged.yml
new file mode 100644
index 00000000000..92133af03f7
--- /dev/null
+++ b/changelogs/unreleased/63079-migrate-clusters-with-no-token-to-unmanaged.yml
@@ -0,0 +1,6 @@
+---
+title: Migrate GitLab managed project-level clusters to unmanaged if they are missing
+ a Kubernetes service account token
+merge_request: 29648
+author:
+type: other
diff --git a/changelogs/unreleased/63227-fix-double-border.yml b/changelogs/unreleased/63227-fix-double-border.yml
new file mode 100644
index 00000000000..6cc4040d333
--- /dev/null
+++ b/changelogs/unreleased/63227-fix-double-border.yml
@@ -0,0 +1,5 @@
+---
+title: Fix Double Border in Profile Page
+merge_request: 29784
+author: Yoginth <@yo>
+type: fixed
diff --git a/changelogs/unreleased/63507-fix-race-condition-fetching-token.yml b/changelogs/unreleased/63507-fix-race-condition-fetching-token.yml
new file mode 100644
index 00000000000..7f2b59fc9eb
--- /dev/null
+++ b/changelogs/unreleased/63507-fix-race-condition-fetching-token.yml
@@ -0,0 +1,5 @@
+---
+title: Retry fetching Kubernetes Secret#token (#63507)
+merge_request: 29922
+author:
+type: fixed
diff --git a/changelogs/unreleased/bug-63162-duplicate_path_in_links.yml b/changelogs/unreleased/bug-63162-duplicate_path_in_links.yml
new file mode 100644
index 00000000000..d3f246492fb
--- /dev/null
+++ b/changelogs/unreleased/bug-63162-duplicate_path_in_links.yml
@@ -0,0 +1,5 @@
+---
+title: Fixed 'diff version changes' link not working
+merge_request: 29825
+author:
+type: fixed
diff --git a/changelogs/unreleased/bvl-markdown-graphql.yml b/changelogs/unreleased/bvl-markdown-graphql.yml
new file mode 100644
index 00000000000..c2432b3ae81
--- /dev/null
+++ b/changelogs/unreleased/bvl-markdown-graphql.yml
@@ -0,0 +1,5 @@
+---
+title: Render GFM in GraphQL
+merge_request: 29700
+author:
+type: added
diff --git a/changelogs/unreleased/db-update-geo-nodes-primary.yml b/changelogs/unreleased/db-update-geo-nodes-primary.yml
new file mode 100644
index 00000000000..7c5203353ac
--- /dev/null
+++ b/changelogs/unreleased/db-update-geo-nodes-primary.yml
@@ -0,0 +1,5 @@
+---
+title: Disallow `NULL` values for `geo_nodes.primary` column
+merge_request: 29818
+author: Arun Kumar Mohan
+type: other
diff --git a/changelogs/unreleased/expose-saml-provider-id-to-users-api.yml b/changelogs/unreleased/expose-saml-provider-id-to-users-api.yml
new file mode 100644
index 00000000000..6f0e4f4cf7f
--- /dev/null
+++ b/changelogs/unreleased/expose-saml-provider-id-to-users-api.yml
@@ -0,0 +1,5 @@
+---
+title: Expose saml_provider_id in the users API
+merge_request: 14045
+author:
+type: added
diff --git a/changelogs/unreleased/fix-facivon-url-if-uploads-object-store-enabled.yml b/changelogs/unreleased/fix-facivon-url-if-uploads-object-store-enabled.yml
new file mode 100644
index 00000000000..4e6d9c087ef
--- /dev/null
+++ b/changelogs/unreleased/fix-facivon-url-if-uploads-object-store-enabled.yml
@@ -0,0 +1,5 @@
+---
+title: 'Fix favicon path with uploads of object store'
+merge_request: 29482
+author: Roger Meier
+type: fixed
diff --git a/changelogs/unreleased/paginate-license-management.yml b/changelogs/unreleased/paginate-license-management.yml
new file mode 100644
index 00000000000..c5134978612
--- /dev/null
+++ b/changelogs/unreleased/paginate-license-management.yml
@@ -0,0 +1,5 @@
+---
+title: Backport and Docs for Paginate license management and add license search
+merge_request: 27602
+author:
+type: changed
diff --git a/changelogs/unreleased/remove-kubernetes-service-deployment-platform.yml b/changelogs/unreleased/remove-kubernetes-service-deployment-platform.yml
new file mode 100644
index 00000000000..17421fca234
--- /dev/null
+++ b/changelogs/unreleased/remove-kubernetes-service-deployment-platform.yml
@@ -0,0 +1,5 @@
+---
+title: Remove Kubernetes service integration and Kubernetes service template from available deployment platforms
+merge_request: 29786
+author:
+type: removed
diff --git a/changelogs/unreleased/sanitize_rake_ldap_check_output.yml b/changelogs/unreleased/sanitize_rake_ldap_check_output.yml
new file mode 100644
index 00000000000..92824d1dd48
--- /dev/null
+++ b/changelogs/unreleased/sanitize_rake_ldap_check_output.yml
@@ -0,0 +1,5 @@
+---
+title: Sanitize LDAP output in Rake tasks
+merge_request: 28427
+author:
+type: fixed
diff --git a/changelogs/unreleased/sh-omit-issues-links-on-poll.yml b/changelogs/unreleased/sh-omit-issues-links-on-poll.yml
new file mode 100644
index 00000000000..21e51d3534f
--- /dev/null
+++ b/changelogs/unreleased/sh-omit-issues-links-on-poll.yml
@@ -0,0 +1,5 @@
+---
+title: Omit issues links in merge request entity API response
+merge_request: 29917
+author:
+type: performance
diff --git a/changelogs/unreleased/sh-remove-import-columns-from-projects.yml b/changelogs/unreleased/sh-remove-import-columns-from-projects.yml
new file mode 100644
index 00000000000..f4052b2bef5
--- /dev/null
+++ b/changelogs/unreleased/sh-remove-import-columns-from-projects.yml
@@ -0,0 +1,5 @@
+---
+title: Remove import columns from projects table
+merge_request: 29863
+author:
+type: performance
diff --git a/changelogs/unreleased/zj-gitaly-usage-data.yml b/changelogs/unreleased/zj-gitaly-usage-data.yml
new file mode 100644
index 00000000000..ce5087292ed
--- /dev/null
+++ b/changelogs/unreleased/zj-gitaly-usage-data.yml
@@ -0,0 +1,5 @@
+---
+title: Add Gitaly data to the usage ping
+merge_request:
+author:
+type: added
diff --git a/config/database.yml.postgresql b/config/database.yml.postgresql
index baded682e46..5b3b35c9226 100644
--- a/config/database.yml.postgresql
+++ b/config/database.yml.postgresql
@@ -9,6 +9,15 @@ production:
username: git
password: "secure password"
host: localhost
+ # load_balancing:
+ # hosts:
+ # - host1.example.com
+ # - host2.example.com
+ # discover:
+ # nameserver: 1.2.3.4
+ # port: 8600
+ # record: secondary.postgresql.service.consul
+ # interval: 300
#
# Development specific
diff --git a/config/dependency_decisions.yml b/config/dependency_decisions.yml
index af76bace577..40a80429afa 100644
--- a/config/dependency_decisions.yml
+++ b/config/dependency_decisions.yml
@@ -599,3 +599,10 @@
:why: https://github.com/apache/incubator-echarts/blob/master/LICENSE
:versions: []
:when: 2018-12-07 20:46:12.421256000 Z
+- - :license
+ - contracts
+ - BSD
+ - :who: Jarka Košanová
+ :why: https://github.com/egonSchiele/contracts.ruby/blob/master/LICENSE
+ :versions: []
+ :when: 2019-04-01 11:29:39.361015000 Z
diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example
index c83f569d885..dddc5ec3540 100644
--- a/config/gitlab.yml.example
+++ b/config/gitlab.yml.example
@@ -230,7 +230,45 @@ production: &base
## Packages (maven repository, npm registry, etc...)
packages:
- enabled: false
+ enabled: true
+ # The location where build packages are stored (default: shared/packages).
+ # storage_path: shared/packages
+ object_store:
+ enabled: false
+ remote_directory: packages # The bucket name
+ # direct_upload: false # Use Object Storage directly for uploads instead of background uploads if enabled (Default: false)
+ # background_upload: false # Temporary option to limit automatic upload (Default: true)
+ # proxy_download: false # Passthrough all downloads via GitLab instead of using Redirects to Object Storage
+ connection:
+ provider: AWS
+ aws_access_key_id: AWS_ACCESS_KEY_ID
+ aws_secret_access_key: AWS_SECRET_ACCESS_KEY
+ region: us-east-1
+ # host: 'localhost' # default: s3.amazonaws.com
+ # endpoint: 'http://127.0.0.1:9000' # default: nil
+ # aws_signature_version: 4 # For creation of signed URLs. Set to 2 if provider does not support v4.
+ # path_style: true # Use 'host/bucket_name/object' instead of 'bucket_name.host/object'
+
+ ## Dependency Proxy
+ dependency_proxy:
+ enabled: true
+ # The location where build packages are stored (default: shared/dependency_proxy).
+ # storage_path: shared/dependency_proxy
+ object_store:
+ enabled: false
+ remote_directory: dependency_proxy # The bucket name
+ # direct_upload: false # Use Object Storage directly for uploads instead of background uploads if enabled (Default: false)
+ # background_upload: false # Temporary option to limit automatic upload (Default: true)
+ # proxy_download: false # Passthrough all downloads via GitLab instead of using Redirects to Object Storage
+ connection:
+ provider: AWS
+ aws_access_key_id: AWS_ACCESS_KEY_ID
+ aws_secret_access_key: AWS_SECRET_ACCESS_KEY
+ region: us-east-1
+ # host: 'localhost' # default: s3.amazonaws.com
+ # endpoint: 'http://127.0.0.1:9000' # default: nil
+ # aws_signature_version: 4 # For creation of signed URLs. Set to 2 if provider does not support v4.
+ # path_style: true # Use 'host/bucket_name/object' instead of 'bucket_name.host/object'
## GitLab Pages
pages:
@@ -306,6 +344,53 @@ production: &base
schedule_migrate_external_diffs_worker:
cron: "15 * * * *"
+ # GitLab EE only jobs. These jobs are automatically enabled for an EE
+ # installation, and ignored for a CE installation.
+ ee_cron_jobs:
+ # Snapshot active users statistics
+ historical_data_worker:
+ cron: "0 12 * * *"
+
+ # In addition to refreshing users when they log in,
+ # periodically refresh LDAP users membership.
+ # NOTE: This will only take effect if LDAP is enabled
+ ldap_sync_worker:
+ cron: "30 1 * * *"
+
+ # Periodically refresh LDAP groups membership.
+ # NOTE: This will only take effect if LDAP is enabled
+ ldap_group_sync_worker:
+ cron: "0 * * * *"
+
+ # GitLab Geo metrics update worker
+ # NOTE: This will only take effect if Geo is enabled
+ geo_metrics_update_worker:
+ cron: "*/1 * * * *"
+
+ # GitLab Geo prune event log worker
+ # NOTE: This will only take effect if Geo is enabled (primary node only)
+ geo_prune_event_log_worker:
+ cron: "*/5 * * * *"
+
+ # GitLab Geo repository sync worker
+ # NOTE: This will only take effect if Geo is enabled (secondary nodes only)
+ geo_repository_sync_worker:
+ cron: "*/1 * * * *"
+
+ # GitLab Geo file download dispatch worker
+ # NOTE: This will only take effect if Geo is enabled (secondary nodes only)
+ geo_file_download_dispatch_worker:
+ cron: "*/1 * * * *"
+
+ # GitLab Geo migrated local files clean up worker
+ # NOTE: This will only take effect if Geo is enabled (secondary nodes only)
+ geo_migrated_local_files_clean_up_worker:
+ cron: "15 */6 * * *"
+
+ # Export pseudonymized data in CSV format for analysis
+ pseudonymizer_worker:
+ cron: "0 * * * *"
+
registry:
# enabled: true
# host: registry.example.com
@@ -323,6 +408,16 @@ production: &base
# clientside_dsn: https://<key>@sentry.io/<project>
# environment: 'production' # e.g. development, staging, production
+ ## Geo
+ # NOTE: These settings will only take effect if Geo is enabled
+ geo:
+ # This is an optional identifier which Geo nodes can use to identify themselves.
+ # For example, if external_url is the same for two secondaries, you must specify
+ # a unique Geo node name for those secondaries.
+ #
+ # If it is blank, it defaults to external_url.
+ node_name: ''
+
#
# 2. GitLab CI settings
# ==========================
@@ -349,6 +444,19 @@ production: &base
# bundle exec rake gitlab:ldap:check RAILS_ENV=production
ldap:
enabled: false
+
+ # This setting controls the number of seconds between LDAP permission checks
+ # for each user. After this time has expired for a given user, their next
+ # interaction with GitLab (a click in the web UI, a git pull, etc.) will be
+ # slower because the LDAP permission check is being performed. How much
+ # slower depends on your LDAP setup, but it is not uncommon for this check
+ # to add seconds of waiting time. The default value is to have a "slow
+ # click" once every 3600 seconds (i.e., once per hour).
+ #
+ # Warning: if you set this value too low, every click in GitLab will be a
+ # "slow click" for all of your LDAP users.
+ # sync_time: 3600
+
servers:
##########################################################################
#
@@ -446,6 +554,10 @@ production: &base
# A value of 0 means there is no timeout.
timeout: 10
+ # Enable smartcard authentication against the LDAP server. Valid values
+ # are "false", "optional", and "required".
+ smartcard_auth: false
+
# This setting specifies if LDAP server is Active Directory LDAP server.
# For non AD servers it skips the AD specific queries.
# If your LDAP server is not AD, set this to false.
@@ -485,6 +597,31 @@ production: &base
#
user_filter: ''
+ # Base where we can search for groups
+ #
+ # Ex. ou=Groups,dc=gitlab,dc=example
+ #
+ group_base: ''
+
+ # LDAP group of users who should be admins in GitLab
+ #
+ # Ex. GLAdmins
+ #
+ admin_group: ''
+
+ # LDAP group of users who should be marked as external users in GitLab
+ #
+ # Ex. ['Contractors', 'Interns']
+ #
+ external_groups: []
+
+ # Name of attribute which holds a ssh public key of the user object.
+ # If false or nil, SSH key syncronisation will be disabled.
+ #
+ # Ex. sshpublickey
+ #
+ sync_ssh_keys: false
+
# LDAP attributes that GitLab will use to create an account for the LDAP user.
# The specified attribute can either be the attribute name as a string (e.g. 'mail'),
# or an array of attribute names to try in order (e.g. ['mail', 'email']).
@@ -516,6 +653,38 @@ production: &base
# host:
# ....
+ ## Smartcard authentication settings
+ smartcard:
+ # Allow smartcard authentication
+ enabled: false
+
+ # Path to a file containing a CA certificate
+ ca_file: '/etc/ssl/certs/CA.pem'
+
+ # Port where the client side certificate is requested by the webserver (NGINX/Apache)
+ # client_certificate_required_port: 3444
+
+ ## Kerberos settings
+ kerberos:
+ # Allow the HTTP Negotiate authentication method for Git clients
+ enabled: false
+
+ # Kerberos 5 keytab file. The keytab file must be readable by the GitLab user,
+ # and should be different from other keytabs in the system.
+ # (default: use default keytab from Krb5 config)
+ # keytab: /etc/http.keytab
+
+ # The Kerberos service name to be used by GitLab.
+ # (default: accept any service name in keytab file)
+ # service_principal_name: HTTP/gitlab.example.com@EXAMPLE.COM
+
+ # Dedicated port: Git before 2.4 does not fall back to Basic authentication if Negotiate fails.
+ # To support both Basic and Negotiate methods with older versions of Git, configure
+ # nginx to proxy GitLab on an extra port (e.g. 8443) and uncomment the following lines
+ # to dedicate this port to Kerberos authentication. (default: false)
+ # use_dedicated_port: true
+ # port: 8443
+ # https: true
## OmniAuth settings
omniauth:
@@ -635,6 +804,8 @@ production: &base
# name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:transient'
# } }
#
+ # - { name: 'group_saml' }
+ #
# - { name: 'crowd',
# args: {
# crowd_server_url: 'CROWD SERVER URL',
@@ -707,6 +878,20 @@ production: &base
# # Specifies Amazon S3 storage class to use for backups, this is optional
# # storage_class: 'STANDARD'
+ ## Pseudonymizer exporter
+ pseudonymizer:
+ # Tables manifest that specifies the fields to extract and pseudonymize.
+ manifest: config/pseudonymizer.yml
+ upload:
+ remote_directory: 'gitlab-elt'
+ # Fog storage connection settings, see http://fog.io/storage/ .
+ connection:
+ # provider: AWS
+ # region: eu-west-1
+ # aws_access_key_id: AKIAKIAKI
+ # aws_secret_access_key: 'secret123'
+ # # The remote 'directory' to store the CSV files. For S3, this would be the bucket name.
+
## GitLab Shell settings
gitlab_shell:
path: /home/git/gitlab-shell/
@@ -872,6 +1057,17 @@ test:
token: secret
backup:
path: tmp/tests/backups
+ pseudonymizer:
+ manifest: config/pseudonymizer.yml
+ upload:
+ # The remote 'directory' to store the CSV files. For S3, this would be the bucket name.
+ remote_directory: gitlab-elt.test
+ # Fog storage connection settings, see http://fog.io/storage/
+ connection:
+ provider: AWS # Only AWS supported at the moment
+ aws_access_key_id: AWS_ACCESS_KEY_ID
+ aws_secret_access_key: AWS_SECRET_ACCESS_KEY
+ region: us-east-1
gitlab_shell:
path: tmp/tests/gitlab-shell/
authorized_keys_file: tmp/tests/authorized_keys
diff --git a/config/initializers/1_postgresql_only.rb b/config/initializers/1_postgresql_only.rb
new file mode 100644
index 00000000000..be771bebf47
--- /dev/null
+++ b/config/initializers/1_postgresql_only.rb
@@ -0,0 +1,4 @@
+# frozen_string_literal: true
+
+raise "PostgreSQL is the only supported database from GitLab 12.1" unless
+ Gitlab::Database.postgresql?
diff --git a/config/initializers/1_settings.rb b/config/initializers/1_settings.rb
index 0c8d94ccaed..6cca7a3b75f 100644
--- a/config/initializers/1_settings.rb
+++ b/config/initializers/1_settings.rb
@@ -117,6 +117,15 @@ if github_settings
end
end
+# SAML should be enabled for the tests automatically, but only for EE.
+saml_provider_enabled = Settings.omniauth.providers.any? do |provider|
+ provider['name'] == 'group_saml'
+end
+
+if Gitlab.ee? && Rails.env.test? && !saml_provider_enabled
+ Settings.omniauth.providers << Settingslogic.new({ 'name' => 'group_saml' })
+end
+
Settings['shared'] ||= Settingslogic.new({})
Settings.shared['path'] = Settings.absolute(Settings.shared['path'] || "shared")
@@ -291,6 +300,11 @@ Settings.gravatar['host'] = Settings.host_without_www(Settings.gravatar[
# Cron Jobs
#
Settings['cron_jobs'] ||= Settingslogic.new({})
+
+if Gitlab.ee? && Settings['ee_cron_jobs']
+ Settings.cron_jobs.merge!(Settings.ee_cron_jobs)
+end
+
Settings.cron_jobs['stuck_ci_jobs_worker'] ||= Settingslogic.new({})
Settings.cron_jobs['stuck_ci_jobs_worker']['cron'] ||= '0 * * * *'
Settings.cron_jobs['stuck_ci_jobs_worker']['job_class'] = 'StuckCiJobsWorker'
diff --git a/config/prometheus/common_metrics.yml b/config/prometheus/common_metrics.yml
index 3c67ca36791..f9ce5a6f365 100644
--- a/config/prometheus/common_metrics.yml
+++ b/config/prometheus/common_metrics.yml
@@ -171,7 +171,7 @@ panel_groups:
weight: 2
metrics:
- id: system_metrics_kubernetes_container_memory_average
- query_range: 'avg(sum(container_memory_usage_bytes{container_name!="POD",pod_name=~"^%{ci_environment_slug}-(.*)",namespace="%{kube_namespace}"}) by (job)) without (job) / count(avg(container_memory_usage_bytes{container_name!="POD",pod_name=~"^%{ci_environment_slug}-(.*)",namespace="%{kube_namespace}"}) without (job)) /1024/1024'
+ query_range: 'avg(sum(container_memory_usage_bytes{container_name!="POD",pod_name=~"^%{ci_environment_slug}-([^c].*|c([^a]|a([^n]|n([^a]|a([^r]|r[^y])))).*|)-(.*)",namespace="%{kube_namespace}"}) by (job)) without (job) / count(avg(container_memory_usage_bytes{container_name!="POD",pod_name=~"^%{ci_environment_slug}-([^c].*|c([^a]|a([^n]|n([^a]|a([^r]|r[^y])))).*|)-(.*)",namespace="%{kube_namespace}"}) without (job)) /1024/1024'
label: Pod average
unit: MB
- title: "Canary: Memory Usage (Pod Average)"
@@ -190,7 +190,7 @@ panel_groups:
weight: 1
metrics:
- id: system_metrics_kubernetes_container_core_usage
- query_range: 'avg(sum(rate(container_cpu_usage_seconds_total{container_name!="POD",pod_name=~"^%{ci_environment_slug}-(.*)",namespace="%{kube_namespace}"}[15m])) by (job)) without (job) / count(sum(rate(container_cpu_usage_seconds_total{container_name!="POD",pod_name=~"^%{ci_environment_slug}-(.*)",namespace="%{kube_namespace}"}[15m])) by (pod_name))'
+ query_range: 'avg(sum(rate(container_cpu_usage_seconds_total{container_name!="POD",pod_name=~"^%{ci_environment_slug}-([^c].*|c([^a]|a([^n]|n([^a]|a([^r]|r[^y])))).*|)-(.*)",namespace="%{kube_namespace}"}[15m])) by (job)) without (job) / count(sum(rate(container_cpu_usage_seconds_total{container_name!="POD",pod_name=~"^%{ci_environment_slug}-([^c].*|c([^a]|a([^n]|n([^a]|a([^r]|r[^y])))).*|)-(.*)",namespace="%{kube_namespace}"}[15m])) by (pod_name))'
label: Pod average
unit: "cores"
- title: "Canary: Core Usage (Pod Average)"
diff --git a/config/routes/admin.rb b/config/routes/admin.rb
index ae79beb1dba..f609739d9fd 100644
--- a/config/routes/admin.rb
+++ b/config/routes/admin.rb
@@ -110,7 +110,7 @@ namespace :admin do
put :reset_registration_token
put :reset_health_check_token
put :clear_repository_check_states
- get :integrations, :repository, :templates, :ci_cd, :reporting, :metrics_and_profiling, :network, :geo, :preferences
+ match :integrations, :repository, :templates, :ci_cd, :reporting, :metrics_and_profiling, :network, :geo, :preferences, via: [:get, :patch]
get :lets_encrypt_terms_of_service
end
diff --git a/config/routes/project.rb b/config/routes/project.rb
index a1e769f6ca3..0e8e089c78a 100644
--- a/config/routes/project.rb
+++ b/config/routes/project.rb
@@ -406,6 +406,7 @@ constraints(::Constraints::ProjectUrlConstrainer.new) do
post :toggle_subscription
post :mark_as_spam
post :move
+ put :reorder
get :related_branches
get :can_create_branch
get :realtime_changes
diff --git a/config/settings.rb b/config/settings.rb
index 1b94df785a7..6df2132332c 100644
--- a/config/settings.rb
+++ b/config/settings.rb
@@ -1,5 +1,11 @@
require 'settingslogic'
+# We can not use `Rails.root` here, as this file might be loaded without the
+# full Rails environment being loaded. We can not use `require_relative` either,
+# as Rails uses `load` for `require_dependency` (used when loading the Rails
+# environment). This could then lead to this file being loaded twice.
+require_dependency File.expand_path('../lib/gitlab', __dir__)
+
class Settings < Settingslogic
source ENV.fetch('GITLAB_CONFIG') { Pathname.new(File.expand_path('..', __dir__)).join('config/gitlab.yml') }
namespace ENV.fetch('GITLAB_ENV') { Rails.env }
diff --git a/config/sidekiq_queues.yml b/config/sidekiq_queues.yml
index fd9ce4d3374..4fda9d69077 100644
--- a/config/sidekiq_queues.yml
+++ b/config/sidekiq_queues.yml
@@ -93,3 +93,20 @@
- [migrate_external_diffs, 1]
- [update_project_statistics, 1]
- [phabricator_import_import_tasks, 1]
+
+ # EE-specific queues
+ - [ldap_group_sync, 2]
+ - [create_github_webhook, 2]
+ - [geo, 1]
+ - [repository_update_mirror, 1]
+ - [new_epic, 2]
+ - [project_import_schedule, 1]
+ - [project_update_repository_storage, 1]
+ - [admin_emails, 1]
+ - [elastic_batch_project_indexer, 1]
+ - [elastic_indexer, 1]
+ - [elastic_full_index, 1]
+ - [elastic_commit_indexer, 1]
+ - [elastic_namespace_indexer, 1]
+ - [export_csv, 1]
+ - [incident_management, 2]
diff --git a/danger/commit_messages/Dangerfile b/danger/commit_messages/Dangerfile
index bdb4343b1d6..ec494635f02 100644
--- a/danger/commit_messages/Dangerfile
+++ b/danger/commit_messages/Dangerfile
@@ -80,7 +80,7 @@ def unicode_emoji_regex
))x
end
-def lint_commit(commit)
+def lint_commit(commit) # rubocop:disable Metrics/AbcSize
# For now we'll ignore merge commits, as getting rid of those is a problem
# separate from enforcing good commit messages.
return false if commit.message.start_with?('Merge branch')
@@ -114,6 +114,16 @@ def lint_commit(commit)
)
end
+ # Fail if a suggestion commit is used and squash is not enabled
+ if commit.message.start_with?('Apply suggestion to') && !gitlab.mr_json['squash']
+ fail_commit(
+ commit,
+ 'If you are applying suggestions, squash needs to be enabled in the merge request'
+ )
+
+ failures = true
+ end
+
unless subject_starts_with_capital?(subject)
fail_commit(commit, 'The commit subject must start with a capital letter')
failures = true
diff --git a/db/migrate/20190607085356_add_source_to_pages_domains.rb b/db/migrate/20190607085356_add_source_to_pages_domains.rb
new file mode 100644
index 00000000000..0a845d7d11f
--- /dev/null
+++ b/db/migrate/20190607085356_add_source_to_pages_domains.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 AddSourceToPagesDomains < ActiveRecord::Migration[5.1]
+ include Gitlab::Database::MigrationHelpers
+
+ # Set this constant to true if this migration requires downtime.
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def up
+ add_column_with_default(:pages_domains, :certificate_source, :smallint, default: 0)
+ end
+
+ def down
+ remove_column(:pages_domains, :certificate_source)
+ end
+end
diff --git a/db/post_migrate/20190606163724_migrate_legacy_managed_clusters_to_unmanaged.rb b/db/post_migrate/20190606163724_migrate_legacy_managed_clusters_to_unmanaged.rb
new file mode 100644
index 00000000000..759ab939f7d
--- /dev/null
+++ b/db/post_migrate/20190606163724_migrate_legacy_managed_clusters_to_unmanaged.rb
@@ -0,0 +1,48 @@
+# 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 MigrateLegacyManagedClustersToUnmanaged < ActiveRecord::Migration[5.1]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ class Cluster < ActiveRecord::Base
+ include EachBatch
+
+ self.table_name = 'clusters'
+
+ has_many :kubernetes_namespaces, class_name: 'MigrateLegacyManagedClustersToUnmanaged::KubernetesNamespace'
+
+ scope :managed, -> { where(managed: true) }
+
+ enum cluster_type: {
+ instance_type: 1,
+ group_type: 2,
+ project_type: 3
+ }
+ end
+
+ class KubernetesNamespace < ActiveRecord::Base
+ self.table_name = 'clusters_kubernetes_namespaces'
+
+ belongs_to :cluster, class_name: 'MigrateLegacyManagedClustersToUnmanaged::Cluster'
+ end
+
+ def up
+ Cluster.managed
+ .project_type
+ .left_joins(:kubernetes_namespaces)
+ .where(clusters_kubernetes_namespaces: { cluster_id: nil })
+ .where('clusters.created_at < ?', 5.minutes.ago)
+ .each_batch do |batch|
+ batch.update_all(managed: false)
+ end
+ end
+
+ def down
+ end
+end
diff --git a/db/post_migrate/20190613231640_migrate_managed_clusters_with_no_token_to_unmanaged.rb b/db/post_migrate/20190613231640_migrate_managed_clusters_with_no_token_to_unmanaged.rb
new file mode 100644
index 00000000000..b2914afe2cd
--- /dev/null
+++ b/db/post_migrate/20190613231640_migrate_managed_clusters_with_no_token_to_unmanaged.rb
@@ -0,0 +1,48 @@
+# 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 MigrateManagedClustersWithNoTokenToUnmanaged < ActiveRecord::Migration[5.1]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ class Cluster < ActiveRecord::Base
+ include EachBatch
+
+ self.table_name = 'clusters'
+
+ has_many :kubernetes_namespaces, class_name: 'MigrateManagedClustersWithNoTokenToUnmanaged::KubernetesNamespace'
+
+ scope :managed, -> { where(managed: true) }
+
+ enum cluster_type: {
+ instance_type: 1,
+ group_type: 2,
+ project_type: 3
+ }
+ end
+
+ class KubernetesNamespace < ActiveRecord::Base
+ self.table_name = 'clusters_kubernetes_namespaces'
+
+ belongs_to :cluster, class_name: 'MigrateManagedClustersWithNoTokenToUnmanaged::Cluster'
+ end
+
+ def up
+ Cluster.managed
+ .project_type
+ .joins(:kubernetes_namespaces)
+ .where(clusters_kubernetes_namespaces: { encrypted_service_account_token: nil })
+ .where('clusters.created_at < ?', Date.new(2018, 12, 1).midnight)
+ .each_batch do |batch|
+ batch.update_all(managed: false)
+ end
+ end
+
+ def down
+ end
+end
diff --git a/db/post_migrate/20190618171120_update_geo_nodes_primary.rb b/db/post_migrate/20190618171120_update_geo_nodes_primary.rb
new file mode 100644
index 00000000000..dc9cfbda177
--- /dev/null
+++ b/db/post_migrate/20190618171120_update_geo_nodes_primary.rb
@@ -0,0 +1,20 @@
+# 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 UpdateGeoNodesPrimary < ActiveRecord::Migration[5.1]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ def up
+ change_column_default(:geo_nodes, :primary, false)
+ change_column_null(:geo_nodes, :primary, false, false)
+ end
+
+ def down
+ change_column_default(:geo_nodes, :primary, nil)
+ change_column_null(:geo_nodes, :primary, true)
+ end
+end
diff --git a/db/post_migrate/20190619175843_remove_import_columns_from_projects.rb b/db/post_migrate/20190619175843_remove_import_columns_from_projects.rb
new file mode 100644
index 00000000000..85f776ac99c
--- /dev/null
+++ b/db/post_migrate/20190619175843_remove_import_columns_from_projects.rb
@@ -0,0 +1,14 @@
+# frozen_string_literal: true
+
+class RemoveImportColumnsFromProjects < ActiveRecord::Migration[5.1]
+ include Gitlab::Database::MigrationHelpers
+
+ # Set this constant to true if this migration requires downtime.
+ DOWNTIME = false
+
+ def change
+ remove_column :projects, :import_status, :string
+ remove_column :projects, :import_jid, :string
+ remove_column :projects, :import_error, :text
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 7a7319c132e..c1c67e012e9 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: 20190613030606) do
+ActiveRecord::Schema.define(version: 20190619175843) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -1391,7 +1391,7 @@ ActiveRecord::Schema.define(version: 20190613030606) do
end
create_table "geo_nodes", id: :serial, force: :cascade do |t|
- t.boolean "primary"
+ t.boolean "primary", default: false, null: false
t.integer "oauth_application_id"
t.boolean "enabled", default: true, null: false
t.string "access_key"
@@ -2333,6 +2333,7 @@ ActiveRecord::Schema.define(version: 20190613030606) do
t.boolean "auto_ssl_enabled", default: false, null: false
t.datetime_with_timezone "certificate_valid_not_before"
t.datetime_with_timezone "certificate_valid_not_after"
+ t.integer "certificate_source", limit: 2, default: 0, null: false
t.index ["domain"], name: "index_pages_domains_on_domain", unique: true, using: :btree
t.index ["project_id", "enabled_until"], name: "index_pages_domains_on_project_id_and_enabled_until", using: :btree
t.index ["project_id"], name: "index_pages_domains_on_project_id", using: :btree
@@ -2595,11 +2596,9 @@ ActiveRecord::Schema.define(version: 20190613030606) do
t.integer "visibility_level", default: 0, null: false
t.boolean "archived", default: false, null: false
t.string "avatar"
- t.string "import_status"
t.integer "star_count", default: 0, null: false
t.string "import_type"
t.string "import_source"
- t.text "import_error"
t.boolean "shared_runners_enabled", default: true, null: false
t.string "runners_token"
t.string "build_coverage_regex"
@@ -2621,7 +2620,6 @@ ActiveRecord::Schema.define(version: 20190613030606) do
t.boolean "only_allow_merge_if_all_discussions_are_resolved"
t.boolean "printing_merge_request_link_enabled", default: true, null: false
t.integer "auto_cancel_pending_pipelines", default: 1, null: false
- t.string "import_jid"
t.integer "cached_markdown_version"
t.text "delete_error"
t.datetime "last_repository_updated_at"
diff --git a/doc/administration/environment_variables.md b/doc/administration/environment_variables.md
index 864a84b33e0..874b1f3c80d 100644
--- a/doc/administration/environment_variables.md
+++ b/doc/administration/environment_variables.md
@@ -42,7 +42,7 @@ The list of `GITLAB_DATABASE_XXX` variables that you can set is:
Variable | Default value | Overridden by `DATABASE_URL`?
-------- | ------------- | -----------------------------
-`GITLAB_DATABASE_ADAPTER` | `postgresql` (for MySQL use `mysql2`) | Yes
+`GITLAB_DATABASE_ADAPTER` | `postgresql` | Yes
`GITLAB_DATABASE_DATABASE` | `gitlab_#{ENV['RAILS_ENV']` | Yes
`GITLAB_DATABASE_USERNAME` | `root` | Yes
`GITLAB_DATABASE_PASSWORD` | None | Yes
diff --git a/doc/administration/geo/replication/database.md b/doc/administration/geo/replication/database.md
index 1e5a56c3f4e..6658c37752a 100644
--- a/doc/administration/geo/replication/database.md
+++ b/doc/administration/geo/replication/database.md
@@ -489,10 +489,6 @@ work:
gitlab-ctl reconfigure
```
-## MySQL replication
-
-MySQL replication is not supported for Geo.
-
## Troubleshooting
Read the [troubleshooting document](troubleshooting.md).
diff --git a/doc/administration/geo/replication/troubleshooting.md b/doc/administration/geo/replication/troubleshooting.md
index c5bdd36ba70..846afd8f5f4 100644
--- a/doc/administration/geo/replication/troubleshooting.md
+++ b/doc/administration/geo/replication/troubleshooting.md
@@ -1,15 +1,23 @@
# Geo Troubleshooting **[PREMIUM ONLY]**
-NOTE: **Note:**
-This list is an attempt to document all the moving parts that can go wrong.
-We are working into getting all this steps verified automatically in a
-rake task in the future.
-
Setting up Geo requires careful attention to details and sometimes it's easy to
-miss a step. Here is a list of questions you should ask to try to detect
-what you need to fix (all commands and path locations are for Omnibus installs):
+miss a step.
+
+Here is a list of steps you should take to attempt to fix problem:
+
+- Perform [basic troubleshooting](#basic-troubleshooting).
+- Fix any [replication errors](#fixing-replication-errors).
+- Fix any [Foreign Data Wrapper](#fixing-foreign-data-wrapper-errors) errors.
+- Fix any [common](#fixing-common-errors) errors.
-## First check the health of the **secondary** node
+## Basic troubleshooting
+
+Before attempting more advanced troubleshooting:
+
+- Check [the health of the **secondary** node](#check-the-health-of-the-secondary-node).
+- Check [if PostgreSQL replication is working](#check-if-postgresql-replication-is-working).
+
+### Check the health of the **secondary** node
Visit the **primary** node's **Admin Area > Geo** (`/admin/geo/nodes`) in
your browser. We perform the following health checks on each **secondary** node
@@ -23,10 +31,12 @@ to help identify if something is wrong:
![Geo health check](img/geo_node_healthcheck.png)
-For information on how to resolve common errors reported from the UI, see [common errors](#common-errors).
+For information on how to resolve common errors reported from the UI, see
+[Fixing Common Errors](#fixing-common-errors).
If the UI is not working, or you are unable to log in, you can run the Geo
health check manually to get this information as well as a few more details.
+
This rake task can be run on an app node in the **primary** or **secondary**
Geo nodes:
@@ -36,7 +46,7 @@ sudo gitlab-rake gitlab:geo:check
Example output:
-```
+```text
Checking Geo ...
GitLab Geo is available ... yes
@@ -68,7 +78,7 @@ sudo gitlab-rake geo:status
Example output:
-```
+```text
http://secondary.example.com/
-----------------------------------------------------
GitLab Version: 11.10.4-ee
@@ -89,16 +99,21 @@ http://secondary.example.com/
Last status report was: 2 minutes ago
```
-## Is Postgres replication working?
+### Check if PostgreSQL replication is working
+
+To check if PostgreSQL replication is working, check if:
+
+- [Nodes are pointing to the correct database instance](#are-nodes-pointing-to-the-correct-database-instance).
+- [Geo can detect the current node correctly](#can-geo-detect-the-current-node-correctly).
-### Are my nodes pointing to the correct database instance?
+#### Are nodes pointing to the correct database instance?
You should make sure your **primary** Geo node points to the instance with
writing permissions.
Any **secondary** nodes should point only to read-only instances.
-### Can Geo detect my current node correctly?
+#### Can Geo detect the current node correctly?
Geo uses the defined node from the **Admin Area > Geo** screen, and tries to match
it with the value defined in the `/etc/gitlab/gitlab.rb` configuration file.
@@ -112,29 +127,38 @@ sudo gitlab-rails runner "puts Gitlab::Geo.current_node.inspect"
and expect something like:
-```
+```ruby
#<GeoNode id: 2, schema: "https", host: "gitlab.example.com", port: 443, relative_url_root: "", primary: false, ...>
```
By running the command above, `primary` should be `true` when executed in
the **primary** node, and `false` on any **secondary** node.
-## How do I fix the message, "ERROR: replication slots can only be used if max_replication_slots > 0"?
+## Fixing replication errors
+
+The following sections outline troubleshooting steps for fixing replication
+errors.
+
+### Message: "ERROR: replication slots can only be used if max_replication_slots > 0"?
This means that the `max_replication_slots` PostgreSQL variable needs to
be set on the **primary** database. In GitLab 9.4, we have made this setting
default to 1. You may need to increase this value if you have more
-**secondary** nodes. Be sure to restart PostgreSQL for this to take
+**secondary** nodes.
+
+Be sure to restart PostgreSQL for this to take
effect. See the [PostgreSQL replication
setup][database-pg-replication] guide for more details.
-## How do I fix the message, "FATAL: could not start WAL streaming: ERROR: replication slot "geo_secondary_my_domain_com" does not exist"?
+### Message: "FATAL: could not start WAL streaming: ERROR: replication slot "geo_secondary_my_domain_com" does not exist"?
This occurs when PostgreSQL does not have a replication slot for the
-**secondary** node by that name. You may want to rerun the [replication
+**secondary** node by that name.
+
+You may want to rerun the [replication
process](database.md) on the **secondary** node .
-## How do I fix the message, "Command exceeded allowed execution time" when setting up replication?
+### Message: "Command exceeded allowed execution time" when setting up replication?
This may happen while [initiating the replication process][database-start-replication] on the **secondary** node,
and indicates that your initial dataset is too large to be replicated in the default timeout (30 minutes).
@@ -153,7 +177,7 @@ sudo gitlab-ctl \
This will give the initial replication up to six hours to complete, rather than
the default thirty minutes. Adjust as required for your installation.
-## How do I fix the message, "PANIC: could not write to file 'pg_xlog/xlogtemp.123': No space left on device"
+### Message: "PANIC: could not write to file 'pg_xlog/xlogtemp.123': No space left on device"
Determine if you have any unused replication slots in the **primary** database. This can cause large amounts of
log data to build up in `pg_xlog`. Removing the unused slots can reduce the amount of space used in the `pg_xlog`.
@@ -184,11 +208,12 @@ Slots where `active` is `f` are not active.
SELECT pg_drop_replication_slot('<name_of_extra_slot>');
```
-## Very large repositories never successfully synchronize on the **secondary** node
+### Very large repositories never successfully synchronize on the **secondary** node
GitLab places a timeout on all repository clones, including project imports
and Geo synchronization operations. If a fresh `git clone` of a repository
on the primary takes more than a few minutes, you may be affected by this.
+
To increase the timeout, add the following line to `/etc/gitlab/gitlab.rb`
on the **secondary** node:
@@ -205,7 +230,7 @@ sudo gitlab-ctl reconfigure
This will increase the timeout to three hours (10800 seconds). Choose a time
long enough to accommodate a full clone of your largest repositories.
-## How to reset Geo **secondary** node replication
+### Reseting Geo **secondary** node replication
If you get a **secondary** node in a broken state and want to reset the replication state,
to start again from scratch, there are a few steps that can help you:
@@ -289,12 +314,16 @@ to start again from scratch, there are a few steps that can help you:
gitlab-ctl start
```
-## How do I fix a "Foreign Data Wrapper (FDW) is not configured" error?
+## Fixing Foreign Data Wrapper errors
+
+This section documents ways to fix potential Foreign Data Wrapper errors.
+
+### "Foreign Data Wrapper (FDW) is not configured" error
When setting up Geo, you might see this warning in the `gitlab-rake
gitlab:geo:check` output:
-```
+```text
GitLab Geo tracking database Foreign Data Wrapper schema is up-to-date? ... foreign data wrapper is not configured
```
@@ -307,7 +336,7 @@ There are a few key points to remember:
By default, the Geo secondary and tracking database are running on the
same host on different ports. That is, 5432 and 5431 respectively.
-### Checking configuration
+#### Checking configuration
NOTE: **Note:**
The following steps are for Omnibus installs only. Using Geo with source-based installs was **deprecated** in GitLab 11.5.
@@ -419,7 +448,7 @@ should see something like this:
- `geo_postgresql['fdw_external_user']`
- `geo_postgresql['fdw_external_password']`
-### Manual reload of FDW schema
+#### Manual reload of FDW schema
If you're still unable to get FDW working, you may want to try a manual
reload of the FDW schema. To manually reload the FDW schema:
@@ -459,9 +488,25 @@ reload of the FDW schema. To manually reload the FDW schema:
[database-start-replication]: database.md#step-3-initiate-the-replication-process
[database-pg-replication]: database.md#postgresql-replication
-## Common errors
+### "Geo database has an outdated FDW remote schema" error
+
+GitLab can error with a `Geo database has an outdated FDW remote schema` message.
+
+For example:
-This section documents common errors reported in the admin UI and how to fix them.
+```text
+Geo database has an outdated FDW remote schema. It contains 229 of 236 expected tables. Please refer to Geo Troubleshooting.
+```
+
+To resolve this, run the following command:
+
+```sh
+sudo gitlab-rake geo:db:refresh_foreign_tables
+```
+
+## Fixing common errors
+
+This section documents common errors reported in the Admin UI and how to fix them.
### Geo database configuration file is missing
@@ -470,7 +515,6 @@ GitLab cannot find or doesn't have permission to access the `database_geo.yml` c
In an Omnibus GitLab installation, the file should be in `/var/opt/gitlab/gitlab-rails/etc`.
If it doesn't exist or inadvertent changes have been made to it, run `sudo gitlab-ctl reconfigure` to restore it to its correct state.
-
If this path is mounted on a remote volume, please check your volume configuration and that it has correct permissions.
### Geo node has a database that is writable which is an indication it is not configured for replication with the primary node.
@@ -503,7 +547,7 @@ Make sure you follow the [Geo database replication](database.md) instructions fo
If you are using GitLab Omnibus installation, something might have failed during upgrade. You can:
-- Run `sudo gitlab-ctl reconfigure`.
+- Run `sudo gitlab-ctl reconfigure`.
- Manually trigger the database migration by running: `sudo gitlab-rake geo:db:migrate` as root on the **secondary** node.
### Geo database is not configured to use Foreign Data Wrapper
@@ -511,4 +555,4 @@ If you are using GitLab Omnibus installation, something might have failed during
This error means the Geo Tracking Database doesn't have the FDW server and credentials
configured.
-See [How do I fix a "Foreign Data Wrapper (FDW) is not configured" error?](#how-do-i-fix-a-foreign-data-wrapper-fdw-is-not-configured-error).
+See ["Foreign Data Wrapper (FDW) is not configured" error?](#foreign-data-wrapper-fdw-is-not-configured-error).
diff --git a/doc/administration/gitaly/index.md b/doc/administration/gitaly/index.md
index 53a85dfad6c..da8f1ee1529 100644
--- a/doc/administration/gitaly/index.md
+++ b/doc/administration/gitaly/index.md
@@ -432,6 +432,24 @@ gitaly_enabled=false
When you run `service gitlab restart` Gitaly will be disabled on this
particular machine.
+## Eliminating NFS altogether
+
+If you are planning to use Gitaly without NFS for your storage needs
+and want to eliminate NFS from your environment altogether, there are
+a few things that you need to do:
+
+ 1. Make sure the [`git` user home directory](https://docs.gitlab.com/omnibus/settings/configuration.html#moving-the-home-directory-for-a-user) is on local disk.
+ 1. Configure [database lookup of SSH keys](https://docs.gitlab.com/ce/administration/operations/fast_ssh_key_lookup.html)
+ to eliminate the need for a shared authorized_keys file.
+ 1. Configure [object storage for job artifacts](https://docs.gitlab.com/ce/administration/job_artifacts.html#using-object-storage)
+ including [live tracing](https://docs.gitlab.com/ce/administration/job_traces.html#new-live-trace-architecture).
+ 1. Configure [object storage for LFS objects](https://docs.gitlab.com/ce/workflow/lfs/lfs_administration.html#storing-lfs-objects-in-remote-object-storage).
+ 1. Configure [object storage for uploads](https://docs.gitlab.com/ce/administration/uploads.html#using-object-storage-core-only).
+
+NOTE: **Note:** One current feature of GitLab still requires a shared directory (NFS): [GitLab Pages](../../user/project/pages/index.md).
+There is [work in progress](https://gitlab.com/gitlab-org/gitlab-pages/issues/196)
+to eliminate the need for NFS to support GitLab Pages.
+
## Troubleshooting Gitaly in production
Since GitLab 11.6, Gitaly comes with a command-line tool called
diff --git a/doc/administration/index.md b/doc/administration/index.md
index 06d900b152d..602eecb9746 100644
--- a/doc/administration/index.md
+++ b/doc/administration/index.md
@@ -33,7 +33,6 @@ Learn how to install, configure, update, and maintain your GitLab instance.
- [Install](../install/README.md): Requirements, directory structures, and installation methods.
- [Database load balancing](database_load_balancing.md): Distribute database queries among multiple database servers. **[STARTER ONLY]**
- - [Omnibus support for external MySQL DB](https://docs.gitlab.com/omnibus/settings/database.html#using-a-mysql-database-management-server-enterprise-edition-only): Omnibus package supports configuring an external MySQL database. **[STARTER ONLY]**
- [Omnibus support for log forwarding](https://docs.gitlab.com/omnibus/settings/logs.html#udp-log-shipping-gitlab-enterprise-edition-only) **[STARTER ONLY]**
- [High Availability](high_availability/README.md): Configure multiple servers for scaling or high availability.
- [Installing GitLab HA on Amazon Web Services (AWS)](../install/aws/index.md): Set up GitLab High Availability on Amazon AWS.
diff --git a/doc/api/README.md b/doc/api/README.md
index 3a1064b787e..23c69deef23 100644
--- a/doc/api/README.md
+++ b/doc/api/README.md
@@ -35,6 +35,7 @@ The following API resources are available in the project context:
| [Environments](environments.md) | `/projects/:id/environments` |
| [Events](events.md) | `/projects/:id/events` (also available for users and standalone) |
| [Issues](issues.md) | `/projects/:id/issues` (also available for groups and standalone) |
+| [Issues Statistics](issues_statistics.md) | `/projects/:id/issues_statistics` (also available for groups and standalone) |
| [Issue boards](boards.md) | `/projects/:id/boards` |
| [Issue links](issue_links.md) **[STARTER]** | `/projects/:id/issues/.../links` |
| [Jobs](jobs.md) | `/projects/:id/jobs`, `/projects/:id/pipelines/.../jobs` |
@@ -92,6 +93,7 @@ The following API resources are available in the group context:
| [Group-level variables](group_level_variables.md) | `/groups/:id/variables` |
| [Group milestones](group_milestones.md) | `/groups/:id/milestones` |
| [Issues](issues.md) | `/groups/:id/issues` (also available for projects and standalone) |
+| [Issues Statistics](issues_statistics.md) | `/groups/:id/issues_statistics` (also available for projects and standalone) |
| [Members](members.md) | `/groups/:id/members` (also available for projects) |
| [Merge requests](merge_requests.md) | `/groups/:id/merge_requests` (also available for projects and standalone) |
| [Notes](notes.md) (comments) | `/groups/:id/epics/.../notes` (also available for projects) |
@@ -116,6 +118,7 @@ The following API resources are available outside of project and group contexts
| [Geo Nodes](geo_nodes.md) **[PREMIUM ONLY]** | `/geo_nodes` |
| [Import repository from GitHub](import.md) | `/import/github` |
| [Issues](issues.md) | `/issues` (also available for groups and projects) |
+| [Issues Statistics](issues_statistics.md) | `/issues_statistics` (also available for groups and projects) |
| [Keys](keys.md) | `/keys` |
| [License](license.md) **[CORE ONLY]** | `/license` |
| [Markdown](markdown.md) | `/markdown` |
diff --git a/doc/api/container_registry.md b/doc/api/container_registry.md
index 1f17af1f1e9..64ea15bca93 100644
--- a/doc/api/container_registry.md
+++ b/doc/api/container_registry.md
@@ -145,6 +145,9 @@ DELETE /projects/:id/registry/repositories/:repository_id/tags/:tag_name
curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/registry/repositories/2/tags/v10.0.0"
```
+This action does not delete blobs. In order to delete them and recycle disk space,
+[run the garbage collection](https://docs.gitlab.com/omnibus/maintenance/README.html#removing-unused-layers-not-referenced-by-manifests).
+
## Delete repository tags in bulk
Delete repository tags in bulk based on given criteria.
@@ -174,6 +177,8 @@ This API call performs the following operations:
These operations are executed asynchronously and it might
take time to get executed. You can run this at most
once an hour for a given container repository.
+This action does not delete blobs. In order to delete them and recycle disk space,
+[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-ce/issues/21405),
diff --git a/doc/api/users.md b/doc/api/users.md
index 47028c679b8..4bc0335ae33 100644
--- a/doc/api/users.md
+++ b/doc/api/users.md
@@ -2,6 +2,8 @@
## List users
+Active users = Total accounts - Blocked users
+
Get a list of users.
This function takes pagination parameters `page` and `per_page` to restrict the list of users.
@@ -257,7 +259,8 @@ Parameters:
"two_factor_enabled": true,
"external": false,
"private_profile": false,
- "highest_role":10
+ "shared_runners_minutes_limit": 133
+ "extra_shared_runners_minutes_limit": 133
}
```
@@ -290,6 +293,7 @@ Parameters:
- `projects_limit` (optional) - Number of projects 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` (optional) - User's biography
- `location` (optional) - User's location
- `public_email` (optional) - The public email of the user
@@ -299,6 +303,8 @@ Parameters:
- `external` (optional) - Flags the user as external - true or false(default)
- `avatar` (optional) - Image file for user's avatar
- `private_profile` (optional) - User's profile is private - true or false
+- `shared_runners_minutes_limit` (optional) - Pipeline minutes quota for this user
+- `extra_shared_runners_minutes_limit` (optional) - Extra pipeline minutes quota for this user
## User modification
@@ -322,6 +328,7 @@ Parameters:
- `projects_limit` - Limit projects each user can create
- `extern_uid` - External UID
- `provider` - External provider name
+- `group_id_for_saml` (optional) - ID of group where SAML has been configured
- `bio` - User's biography
- `location` (optional) - User's location
- `public_email` (optional) - The public email of the user
@@ -329,6 +336,8 @@ Parameters:
- `can_create_group` (optional) - User can create groups - true or false
- `skip_reconfirmation` (optional) - Skip reconfirmation - true or false (default)
- `external` (optional) - Flags the user as external - true or false(default)
+- `shared_runners_minutes_limit` (optional) - Pipeline minutes quota for this user
+- `extra_shared_runners_minutes_limit` (optional) - Extra pipeline minutes quota for this user
- `avatar` (optional) - Image file for user's avatar
- `private_profile` (optional) - User's profile is private - true or false
@@ -1150,8 +1159,6 @@ settings page.
POST /users/:user_id/impersonation_tokens
```
-Parameters:
-
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `user_id` | integer | yes | The ID of the user |
@@ -1255,4 +1262,4 @@ 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
+[gemojione-index]: https://github.com/jonathanwiesel/gemojione/blob/master/config/index.json \ No newline at end of file
diff --git a/doc/ci/docker/using_docker_images.md b/doc/ci/docker/using_docker_images.md
index f6b84dca734..e4dc289dbdb 100644
--- a/doc/ci/docker/using_docker_images.md
+++ b/doc/ci/docker/using_docker_images.md
@@ -478,7 +478,7 @@ To define which should be used, the GitLab Runner process reads the configuratio
- A [variable](../variables/README.md#gitlab-cicd-environment-variables) in `.gitlab-ci.yml`.
- A project's variables stored on the projects **Settings > CI/CD** page.
- `DOCKER_AUTH_CONFIG` variable provided as environment variable in `config.toml` of the Runner.
-- `config.json` file placed in `$HOME/docker` directory of the user running GitLab Runner process.
+- `config.json` file placed in `$HOME/.docker` directory of the user running GitLab Runner process.
If the `--user` flag is provided to run the GitLab Runner child processes as unprivileged user,
the home directory of the main GitLab Runner process user will be used.
diff --git a/doc/development/architecture.md b/doc/development/architecture.md
index d817d513173..d14a760f972 100644
--- a/doc/development/architecture.md
+++ b/doc/development/architecture.md
@@ -141,13 +141,13 @@ Component statuses are linked to configuration documentation for each component.
| [Consul](#consul) | Database node discovery, failover | [âš™][consul-omnibus] | [âŒ][consul-charts] | [âŒ][consul-charts] | [✅](../user/gitlab_com/index.md#consul) | ⌠| ⌠| EE Only |
| [GitLab self-monitoring: Prometheus](#prometheus) | Time-series database, metrics collection, and query service | [✅][prometheus-omnibus] | [✅][prometheus-charts] | [⚙][prometheus-charts] | [✅](../user/gitlab_com/index.md#prometheus) | ⌠| ⌠| CE & EE |
| [GitLab self-monitoring: Alertmanager](#alertmanager) | Deduplicates, groups, and routes alerts from Prometheus | [⚙][alertmanager-omnibus] | [✅][alertmanager-charts] | [⚙][alertmanager-charts] | [✅](https://about.gitlab.com/handbook/engineering/monitoring/) | ⌠| ⌠| CE & EE |
-| [GitLab self-monitoring: Grafana](#grafana) | Metrics dashboard | [⚙][grafana-omnibus] | [⤓][grafana-charts] | [⤓][grafana-charts] | [✅](https://dashboards.gitlab.com/d/RZmbBr7mk/gitlab-triage?refresh=30s) | ⌠| ⌠| CE & EE |
+| [GitLab self-monitoring: Grafana](#grafana) | Metrics dashboard | [✅][grafana-omnibus] | [⤓][grafana-charts] | [⤓][grafana-charts] | [✅](https://dashboards.gitlab.com/d/RZmbBr7mk/gitlab-triage?refresh=30s) | ⌠| ⌠| CE & EE |
| [GitLab self-monitoring: Sentry](#sentry) | Track errors generated by the GitLab instance | [⤓][sentry-omnibus] | [âŒ][sentry-charts] | [âŒ][sentry-charts] | [✅](https://about.gitlab.com/handbook/support/workflows/services/gitlab_com/500_errors.html#searching-sentry) | [⤓][gitlab-yml] | [⤓][gitlab-yml] | CE & EE |
| [GitLab self-monitoring: Jaeger](#jaeger) | View traces generated by the GitLab instance | [âŒ][jaeger-omnibus] | [âŒ][jaeger-charts] | [âŒ][jaeger-charts] | [âŒ](https://gitlab.com/gitlab-org/omnibus-gitlab/issues/4104) | [⤓][jaeger-source] | [âš™][jaeger-gdk] | CE & EE |
| [Redis Exporter](#redis-exporter) | Prometheus endpoint with Redis metrics | [✅][redis-exporter-omnibus] | [✅][redis-exporter-charts] | [✅][redis-exporter-charts] | [✅](https://about.gitlab.com/handbook/engineering/monitoring/) | ⌠| ⌠| CE & EE |
| [Postgres Exporter](#postgres-exporter) | Prometheus endpoint with PostgreSQL metrics | [✅][postgres-exporter-omnibus] | [✅][postgres-exporter-charts] | [✅][postgres-exporter-charts] | [✅](https://about.gitlab.com/handbook/engineering/monitoring/) | ⌠| ⌠| CE & EE |
| [PgBouncer Exporter](#pgbouncer-exporter) | Prometheus endpoint with PgBouncer metrics | [âš™][pgbouncer-exporter-omnibus] | [âŒ][pgbouncer-exporter-charts] | [âŒ][pgbouncer-exporter-charts] | [✅](https://about.gitlab.com/handbook/engineering/monitoring/) | ⌠| ⌠| CE & EE |
-| [GitLab Monitor](#gitlab-monitor) | Generates a variety of GitLab metrics | [✅][gitlab-monitor-omnibus] | [âŒ][gitab-monitor-charts] | [âŒ][gitab-monitor-charts] | [✅](https://about.gitlab.com/handbook/engineering/monitoring/) | ⌠| ⌠| CE & EE |
+| [GitLab Monitor](#gitlab-monitor) | Generates a variety of GitLab metrics | [✅][gitlab-monitor-omnibus] | [✅][gitab-monitor-charts] | [✅][gitab-monitor-charts] | [✅](https://about.gitlab.com/handbook/engineering/monitoring/) | ⌠| ⌠| CE & EE |
| [Node Exporter](#node-exporter) | Prometheus endpoint with system metrics | [✅][node-exporter-omnibus] | [âŒ][node-exporter-charts] | [âŒ][node-exporter-charts] | [✅](https://about.gitlab.com/handbook/engineering/monitoring/) | ⌠| ⌠| CE & EE |
| [Mattermost](#mattermost) | Open-source Slack alternative | [⚙][mattermost-omnibus] | [⤓][mattermost-charts] | [⤓][mattermost-charts] | [⤓](../user/project/integrations/mattermost.md) | ⌠| ⌠| CE & EE |
| [MinIO](#minio) | Object storage service | [⤓][minio-omnibus] | [✅][minio-charts] | [✅][minio-charts] | [✅](https://about.gitlab.com/handbook/engineering/infrastructure/production-architecture/#storage-architecture) | ⌠| [⚙][minio-gdk] | CE & EE |
@@ -681,7 +681,7 @@ We've also detailed [our architecture of GitLab.com](https://about.gitlab.com/ha
[pgbouncer-exporter-omnibus]: ../administration/monitoring/prometheus/pgbouncer_exporter.md
[pgbouncer-exporter-charts]: https://docs.gitlab.com/charts/installation/deployment.html#postgresql
[gitlab-monitor-omnibus]: ../administration/monitoring/prometheus/gitlab_monitor_exporter.md
-[gitab-monitor-charts]: https://gitlab.com/charts/gitlab/issues/319
+[gitab-monitor-charts]: https://docs.gitlab.com/charts/charts/gitlab/gitlab-monitor/index.html
[node-exporter-omnibus]: ../administration/monitoring/prometheus/node_exporter.md
[node-exporter-charts]: https://gitlab.com/charts/gitlab/issues/1332
[mattermost-omnibus]: https://docs.gitlab.com/omnibus/gitlab-mattermost/
@@ -695,7 +695,7 @@ We've also detailed [our architecture of GitLab.com](https://about.gitlab.com/ha
[runner-gdk]: https://gitlab.com/gitlab-org/gitlab-development-kit/blob/master/doc/howto/runner.md
[database-migrations-omnibus]: https://docs.gitlab.com/omnibus/settings/database.html#disabling-automatic-database-migration
[database-migrations-charts]: https://docs.gitlab.com/charts/charts/gitlab/migrations/
-[database-migrations-source]: ../update/upgrading_from_source.md#14-install-libs-migrations-etc
+[database-migrations-source]: ../update/upgrading_from_source.md#13-install-libs-migrations-etc
[certificate-management-omnibus]: https://docs.gitlab.com/omnibus/settings/ssl.html
[certificate-management-charts]: https://docs.gitlab.com/charts/installation/tls.html
[certificate-management-source]: ../install/installation.md#using-https
diff --git a/doc/development/contributing/issue_workflow.md b/doc/development/contributing/issue_workflow.md
index 0396f7ebc45..3d36a7bf3b1 100644
--- a/doc/development/contributing/issue_workflow.md
+++ b/doc/development/contributing/issue_workflow.md
@@ -172,35 +172,35 @@ This label documents the planned timeline & urgency which is used to measure aga
| ~P3 | Medium Priority | Within the next 3 releases (approx one quarter or 90 days) |
| ~P4 | Low Priority | Anything outside the next 3 releases (more than one quarter or 120 days) |
-If an issue seems to fall between two priority labels, assign it to the higher-
-priority label.
-
## Severity labels
Severity labels help us clearly communicate the impact of a ~bug on users.
-
-| Label | Meaning | Impact on Functionality | Example |
-|-------|-------------------|-------------------------------------------------------|---------|
-| ~S1 | Blocker | Outage, broken feature with no workaround | Unable to create an issue. Data corruption/loss. Security breach. |
-| ~S2 | Critical Severity | Broken Feature, workaround too complex & unacceptable | Can push commits, but only via the command line. |
-| ~S3 | Major Severity | Broken Feature, workaround acceptable | Can create merge requests only from the Merge Requests page, not through the Issue. |
-| ~S4 | Low Severity | Functionality inconvenience or cosmetic issue | Label colors are incorrect / not being displayed. |
-
-If an issue seems to fall between two severity labels, even taking the
-[severity impact guidance](#severity-impact-guidance) into account, assign
-it to the higher-severity label.
-
-### Severity impact guidance
-
-Severity levels can be applied further depending on the facet of the impact; e.g. Affected customers, GitLab.com availability, performance and etc. The below is a guideline.
-
-| Severity | Affected Customers/Users | GitLab.com Availability | Performance Degradation |
-|----------|---------------------------------------------------------------------|----------------------------------------------------|------------------------------|
-| ~S1 | >50% users affected (possible company extinction level event) | Significant impact on all of GitLab.com | |
-| ~S2 | Many users or multiple paid customers affected (but not apocalyptic)| Significant impact on large portions of GitLab.com | Degradation is guaranteed to occur in the near future |
-| ~S3 | A few users or a single paid customer affected | Limited impact on important portions of GitLab.com | Degradation is likely to occur in the near future |
-| ~S4 | No paid users/customer affected, or expected to in the near future | Minor impact on GitLab.com | Degradation _may_ occur but it's not likely |
-
+There can be multiple facets of the impact. The below is a guideline.
+
+| Label | Meaning | Functionality | Affected Users | GitLab.com Availability | Performance Degradation |
+|-------|-------------------|-------------------------------------------------------|----------------------------------|----------------------------------------------------|------------------------------|
+| ~S1 | Blocker | Unusable feature with no workaround, user is blocked | Impacts 50% or more of users | Outage, Significant impact on all of GitLab.com | |
+| ~S2 | Critical Severity | Broken Feature, workaround too complex & unacceptable | Impacts between 25%-50% of users | Significant impact on large portions of GitLab.com | Degradation is guaranteed to occur in the near future |
+| ~S3 | Major Severity | Broken feature with an acceptable workaround | Impacts up to 25% of users | Limited impact on important portions of GitLab.com | Degradation is likely to occur in the near future |
+| ~S4 | Low Severity | Functionality inconvenience or cosmetic issue | Impacts less than 5% of users | Minor impact on GitLab.com | Degradation _may_ occur but it's not likely |
+
+If a bug seems to fall between two severity labels, assign it to the higher-severity label.
+
+* Example(s) of ~S1
+ * Data corruption/loss.
+ * Security breach.
+ * Unable to create an issue or merge request.
+ * Unable to add a comment or discussion to the issue or merge request.
+* Example(s) of ~S2
+ * Cannot submit changes through the web IDE but the commandline works.
+ * A status widget on the merge request page is not working but information can be seen in the test pipeline page.
+* Example(s) of ~S3
+ * Can create merge requests only from the Merge Requests list view, not from an Issue page.
+ * Status is not updated in real time and needs a page refresh.
+* Example(s) of ~S4
+ * Label colors are incorrect.
+ * UI elements are not fully aligned.
+
## Label for community contributors
Issues that are beneficial to our users, 'nice to haves', that we currently do
diff --git a/doc/development/rake_tasks.md b/doc/development/rake_tasks.md
index 28a12572961..4fc10b6af5c 100644
--- a/doc/development/rake_tasks.md
+++ b/doc/development/rake_tasks.md
@@ -80,30 +80,6 @@ There are a few environment flags you can pass to change how projects are seeded
- `LARGE_PROJECTS`: defaults to false. If set will clone 6 large projects to help with testing.
- `FORK`: defaults to false. If set to `true` will fork `torvalds/linux` five times. Can also be set to an existing project full_path and it will fork that instead.
-### Notes for MySQL
-
-Since the seeds would contain various UTF-8 characters, such as emojis or so,
-we'll need to make sure that we're using `utf8mb4` for all the encoding
-settings and `utf8mb4_unicode_ci` for collation. Please check
-[MySQL utf8mb4 support](../install/database_mysql.md#mysql-utf8mb4-support)
-
-Make sure that `config/database.yml` has `encoding: utf8mb4`, too.
-
-Next, we'll need to update the schema to make the indices fit:
-
-``` shell
-sed -i 's/limit: 255/limit: 191/g' db/schema.rb
-```
-
-Then run the setup script:
-
-``` shell
-bundle exec rake setup
-```
-
-To make sure that indices still fit. You could find great details in:
-[How to support full Unicode in MySQL databases](https://mathiasbynens.be/notes/mysql-utf8mb4)
-
## Run tests
In order to run the test you can use the following commands:
diff --git a/doc/development/swapping_tables.md b/doc/development/swapping_tables.md
index 29cd6a43aff..5c62900dbff 100644
--- a/doc/development/swapping_tables.md
+++ b/doc/development/swapping_tables.md
@@ -39,14 +39,6 @@ PostgreSQL you can use the `reset_pk_sequence!` method like so:
reset_pk_sequence!('events')
```
-For MySQL however you need to do run the following:
-
-```ruby
-amount = Event.pluck('COALESCE(MAX(id), 1)').first
-
-execute "ALTER TABLE events AUTO_INCREMENT = #{amount}"
-```
-
Failure to reset the primary keys will result in newly created rows starting
with an ID value of 1. Depending on the existing data this can then lead to
duplicate key constraints from popping up, preventing users from creating new
diff --git a/doc/development/testing_guide/end_to_end/index.md b/doc/development/testing_guide/end_to_end/index.md
index afd81ff00b2..527cd350633 100644
--- a/doc/development/testing_guide/end_to_end/index.md
+++ b/doc/development/testing_guide/end_to_end/index.md
@@ -126,6 +126,18 @@ See [Review Apps][review-apps] for more details about Review Apps.
[helm-chart]: https://gitlab.com/charts/gitlab/
[cng]: https://gitlab.com/gitlab-org/build/CNG
+## How do I run the tests?
+
+There are two main options for running the tests. If you simply want to run the
+existing tests against a live GitLab instance or against a pre-built docker image
+you can use the [GitLab QA orchestrator][gitlab-qa-readme]. See also [examples
+of the test scenarios you can run via the orchestrator](https://gitlab.com/gitlab-org/gitlab-qa/blob/master/docs/what_tests_can_be_run.md#examples).
+
+On the other hand, if you would like to run against a local development GitLab
+environment, you can use the [GitLab Development Kit (GDK)](https://gitlab.com/gitlab-org/gitlab-development-kit/).
+Please refer to the instructions in the [QA README](https://gitlab.com/gitlab-org/gitlab-ce/tree/master/qa/README.md#how-can-i-use-it)
+and the section below.
+
## How do I write tests?
In order to write new tests, you first need to learn more about GitLab QA
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 d33ef0fc229..f96c85be1ba 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
@@ -247,7 +247,7 @@ module QA
[@new_label_same_scope, @new_label_different_scope].each do |label|
Resource::Label.fabricate_via_api! do |l|
- l.project = issue.project.id
+ l.project = issue.project
l.title = label
end
end
@@ -414,7 +414,7 @@ def api_get_path
end
def api_post_path
- "/projects/#{project}/labels"
+ "/projects/#{project.id}/labels"
end
def api_post_body
diff --git a/doc/install/database_mysql.md b/doc/install/database_mysql.md
deleted file mode 100644
index cbb3b766b4e..00000000000
--- a/doc/install/database_mysql.md
+++ /dev/null
@@ -1,319 +0,0 @@
----
-type: reference
----
-
-# Database MySQL
-
-NOTE: **Note:**
-We do not recommend using MySQL due to various issues.
-For example, there have been bugs with case
-[(in)sensitivity](https://dev.mysql.com/doc/refman/5.7/en/case-sensitivity.html).
-
-Bugs relating to case sensitivity:
-
-- <https://bugs.mysql.com/bug.php?id=65830>
-- <https://bugs.mysql.com/bug.php?id=50909>
-- <https://bugs.mysql.com/bug.php?id=65830>
-- <https://bugs.mysql.com/bug.php?id=63164>
-
-## Initial database setup
-
-```sh
-# Install the database packages
-sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev
-
-# Ensure you have MySQL version 5.6 or later
-mysql --version
-
-# Pick a MySQL root password (can be anything), type it and press enter
-# Retype the MySQL root password and press enter
-
-# Secure your installation
-sudo mysql_secure_installation
-
-# Login to MySQL
-mysql -u root -p
-
-# Type the MySQL root password
-
-# Create a user for GitLab
-# do not type the 'mysql>', this is part of the prompt
-# change $password in the command below to a real password you pick
-mysql> CREATE USER 'git'@'localhost' IDENTIFIED BY '$password';
-
-# Ensure you can use the InnoDB engine which is necessary to support long indexes
-# If this fails, check your MySQL config files (e.g. `/etc/mysql/*.cnf`, `/etc/mysql/conf.d/*`) for the setting "innodb = off"
-mysql> SET storage_engine=INNODB;
-
-# If you have MySQL < 5.7.7 and want to enable utf8mb4 character set support with your GitLab install, you must set the following NOW:
-mysql> SET GLOBAL innodb_file_per_table=1, innodb_file_format=Barracuda, innodb_large_prefix=1;
-
-# If you use MySQL with replication, or just have MySQL configured with binary logging, you need to run the following to allow the use of `TRIGGER`:
-mysql> SET GLOBAL log_bin_trust_function_creators = 1;
-
-# Create the GitLab production database
-mysql> CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_general_ci`;
-
-# Grant the GitLab user necessary permissions on the database
-mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, CREATE TEMPORARY TABLES, DROP, INDEX, ALTER, LOCK TABLES, REFERENCES, TRIGGER ON `gitlabhq_production`.* TO 'git'@'localhost';
-
-# Quit the database session
-mysql> \q
-
-# Try connecting to the new database with the new user
-sudo -u git -H mysql -u git -p -D gitlabhq_production
-
-# Type the password you replaced $password with earlier
-
-# You should now see a 'mysql>' prompt
-
-# Quit the database session
-mysql> \q
-```
-
-You are done installing the database for now and can go back to the rest of the installation.
-Please proceed to the rest of the installation **before** running through the steps below.
-
-### `log_bin_trust_function_creators`
-
-If you use MySQL with replication, or just have MySQL configured with binary logging, all of your MySQL servers will need to have `log_bin_trust_function_creators` enabled to allow the use of `TRIGGER` in migrations. You have already set this global variable in the steps above, but to make it persistent, add the following to your `my.cnf` file:
-
-```
-log_bin_trust_function_creators=1
-```
-
-### MySQL utf8mb4 support
-
-After installation or upgrade, remember to [convert any new tables](#tables-and-data-conversion-to-utf8mb4) to `utf8mb4`/`utf8mb4_general_ci`.
-
----
-
-GitLab 8.14 has introduced [a feature](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/7420) requiring `utf8mb4` encoding to be supported in your GitLab MySQL Database, which is not the case if you have set up your database before GitLab 8.16.
-
-Follow the below instructions to ensure you use the most up to date requirements for your GitLab MySQL Database.
-
-**We are about to do the following:**
-
-- Ensure you can enable `utf8mb4` encoding and `utf8mb4_general_ci` collation for your GitLab DB, tables and data.
-- Convert your GitLab tables and data from `utf8`/`utf8_general_ci` to `utf8mb4`/`utf8mb4_general_ci`.
-
-### Check for utf8mb4 support
-
-#### Check for InnoDB File-Per-Table Tablespaces
-
-We need to check, enable and maybe convert your existing GitLab DB tables to the [InnoDB File-Per-Table Tablespaces](https://dev.mysql.com/doc/refman/5.7/en/innodb-multiple-tablespaces.html) as a prerequisite for supporting **utfb8mb4 with long indexes** required by recent GitLab databases.
-
- # Login to MySQL
- mysql -u root -p
-
- # Type the MySQL root password
- mysql > use gitlabhq_production;
-
- # Check your MySQL version is >= 5.5.3 (GitLab requires 5.5.14+)
- mysql > SHOW VARIABLES LIKE 'version';
- +---------------+-----------------+
- | Variable_name | Value |
- +---------------+-----------------+
- | version | 5.5.53-0+deb8u1 |
- +---------------+-----------------+
-
- # Note where is your MySQL data dir for later:
- mysql > select @@datadir;
- +----------------+
- | @@datadir |
- +----------------+
- | /var/lib/mysql |
- +----------------+
-
- # Note whether your MySQL server runs with innodb_file_per_table ON or OFF:
- mysql> SELECT @@innodb_file_per_table;
- +-------------------------+
- | @@innodb_file_per_table |
- +-------------------------+
- | 1 |
- +-------------------------+
-
- # You can now quit the database session
- mysql> \q
-
-> You need **MySQL 5.5.3 or later** to perform this update.
-
-Whatever the results of your checks above, we now need to check if your GitLab database has been created using [InnoDB File-Per-Table Tablespaces](https://dev.mysql.com/doc/refman/5.7/en/innodb-multiple-tablespaces.html) (i.e. `innodb_file_per_table` was set to **1** at initial setup time).
-
-NOTE: **Note:**
-This setting is [enabled by default](http://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_file_per_table) since MySQL 5.6.6.
-
- # Run this command with root privileges, replace the data dir if different:
- sudo ls -lh /var/lib/mysql/gitlabhq_production/*.ibd | wc -l
-
- # Run this command with root privileges, replace the data dir if different:
- sudo ls -lh /var/lib/mysql/gitlabhq_production/*.frm | wc -l
-
-- **Case 1: a result > 0 for both commands**
-
-Congratulations, your GitLab database uses the right InnoDB tablespace format.
-
-However, you must still ensure that any **future tables** created by GitLab will still use the right format:
-
-- If `SELECT @@innodb_file_per_table` returned **1** previously, your server is running correctly.
-
- > It's however a requirement to check *now* that this setting is indeed persisted in your [`my.cnf`](https://dev.mysql.com/doc/refman/5.7/en/innodb-multiple-tablespaces.html) file!
-
-- If `SELECT @@innodb_file_per_table` returned **0** previously, your server is not running correctly.
-
- > [Enable innodb_file_per_table](https://dev.mysql.com/doc/refman/5.7/en/innodb-multiple-tablespaces.html) by running in a MySQL session as root the command `SET GLOBAL innodb_file_per_table=1, innodb_file_format=Barracuda;` and persist the two settings in your [`my.cnf`](https://dev.mysql.com/doc/refman/5.7/en/innodb-multiple-tablespaces.html) file.
-
-Now, if you have a **different result** returned by the 2 commands above, it means you have a **mix of tables format** uses in your GitLab database. This can happen if your MySQL server had different values for `innodb_file_per_table` in its life and you updated GitLab at different moments with those inconsistent values. So keep reading.
-
-- **Case 2: a result equals to "0" OR not the same result for both commands**
-
-Unfortunately, none or only some of your GitLab database tables use the GitLab requirement of [InnoDB File-Per-Table Tablespaces](https://dev.mysql.com/doc/refman/5.7/en/innodb-multiple-tablespaces.html).
-
-Let's enable what we need on the running server:
-
- # Login to MySQL
- mysql -u root -p
-
- # Type the MySQL root password
-
- # Enable innodb_file_per_table and set innodb_file_format on the running server:
- mysql > SET GLOBAL innodb_file_per_table=1, innodb_file_format=Barracuda;
-
- # You can now quit the database session
- mysql> \q
-
-> Now, **persist** [innodb_file_per_table](https://dev.mysql.com/doc/refman/5.7/en/innodb-multiple-tablespaces.html) and [innodb_file_format](https://dev.mysql.com/doc/refman/5.7/en/innodb-file-format-enabling.html) in your `my.cnf` file.
-
-Ensure at this stage that your GitLab instance is indeed **stopped**.
-
-Now, let's convert all the GitLab database tables to the new tablespace format:
-
- # Login to MySQL
- mysql -u root -p
-
- # Type the MySQL root password
- mysql > use gitlabhq_production;
-
- # Safety check: you should still have those values set as follows:
- mysql> SELECT @@innodb_file_per_table, @@innodb_file_format;
- +-------------------------+----------------------+
- | @@innodb_file_per_table | @@innodb_file_format |
- +-------------------------+----------------------+
- | 1 | Barracuda |
- +-------------------------+----------------------+
-
- mysql > SELECT CONCAT('ALTER TABLE `', TABLE_NAME,'` ENGINE=InnoDB;') AS 'Copy & run these SQL statements:' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA="gitlabhq_production" AND TABLE_TYPE="BASE TABLE";
-
- # If previous query returned results, copy & run all shown SQL statements
-
- # You can now quit the database session
- mysql> \q
-
----
-
-#### Check for proper InnoDB File Format, Row Format, Large Prefix and tables conversion
-
-We need to check, enable and probably convert your existing GitLab DB tables to use the [Barracuda InnoDB file format](https://dev.mysql.com/doc/refman/5.7/en/innodb-file-format.html), the [DYNAMIC row format](https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_dynamic_row_format) and [innodb_large_prefix](http://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_large_prefix) as a second prerequisite for supporting **utfb8mb4 with long indexes** used by recent GitLab databases.
-
- # Login to MySQL
- mysql -u root -p
-
- # Type the MySQL root password
- mysql > use gitlabhq_production;
-
- # Set innodb_file_format and innodb_large_prefix on the running server:
- # Note: These are the default settings only for MySQL 5.7.7 and later.
-
- mysql > SET GLOBAL innodb_file_format=Barracuda, innodb_large_prefix=1;
-
- # Your DB must be (still) using utf8/utf8_general_ci as default encoding and collation.
- # We will NOT change the default encoding and collation on the DB in order to support future GitLab migrations creating tables
- # that require "long indexes support" on installations using MySQL <= 5.7.9.
- # However, when such migrations occur, you will have to follow this guide again to convert the newly created tables to the proper encoding/collation.
-
- # This should return the following:
- mysql> SELECT @@character_set_database, @@collation_database;
- +--------------------------+----------------------+
- | @@character_set_database | @@collation_database |
- +--------------------------+----------------------+
- | utf8 | utf8_general_ci |
- +--------------------------+----------------------+
-
-> Now, ensure that [innodb_file_format](https://dev.mysql.com/doc/refman/5.7/en/innodb-multiple-tablespaces.html) and [innodb_large_prefix](http://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_large_prefix) are **persisted** in your `my.cnf` file.
-
-#### Tables and data conversion to utf8mb4
-
-Now that you have a persistent MySQL setup, you can safely upgrade tables after setup or upgrade time:
-
- # Convert tables not using ROW_FORMAT DYNAMIC:
-
- mysql> SELECT CONCAT('ALTER TABLE `', TABLE_NAME,'` ROW_FORMAT=DYNAMIC;') AS 'Copy & run these SQL statements:' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA="gitlabhq_production" AND TABLE_TYPE="BASE TABLE" AND ROW_FORMAT!="Dynamic";
-
- # !! If previous query returned results, copy & run all shown SQL statements
-
- # Convert tables/columns not using utf8mb4/utf8mb4_general_ci as encoding/collation:
-
- mysql > SET foreign_key_checks = 0;
-
- mysql > SELECT CONCAT('ALTER TABLE `', TABLE_NAME,'` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;') AS 'Copy & run these SQL statements:' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA="gitlabhq_production" AND TABLE_COLLATION != "utf8mb4_general_ci" AND TABLE_TYPE="BASE TABLE";
-
- # !! If previous query returned results, copy & run all shown SQL statements
-
- # Turn foreign key checks back on
- mysql > SET foreign_key_checks = 1;
-
- # You can now quit the database session
- mysql> \q
-
-Ensure your GitLab database configuration file uses a proper connection encoding and collation:
-
-`sudo -u git -H editor config/database.yml`
-
- production:
- adapter: mysql2
- encoding: utf8mb4
- collation: utf8mb4_general_ci
-
-[Restart your GitLab instance](../administration/restart_gitlab.md).
-
-## MySQL strings limits
-
-After installation or upgrade, remember to run the `add_limits_mysql` Rake task:
-
-**Omnibus GitLab installations**
-
-```sh
-sudo gitlab-rake add_limits_mysql
-```
-
-**Installations from source**
-
-```sh
-bundle exec rake add_limits_mysql RAILS_ENV=production
-```
-
-The `text` type in MySQL has a different size limit than the `text` type in
-PostgreSQL. In MySQL `text` columns are limited to ~65kB, whereas in PostgreSQL
-`text` columns are limited up to ~1GB!
-
-The `add_limits_mysql` Rake task converts some important `text` columns in the
-GitLab database to `longtext` columns, which can persist values of up to 4GB
-(sometimes less if the value contains multibyte characters).
-
-Details can be found in the [PostgreSQL][postgres-text-type] and
-[MySQL](https://dev.mysql.com/doc/refman/5.7/en/string-type-overview.html) manuals.
-
-[postgres-text-type]: http://www.postgresql.org/docs/9.2/static/datatype-character.html
-[ce-38152]: https://gitlab.com/gitlab-org/gitlab-ce/issues/38152
-
-<!-- ## 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/install/installation.md b/doc/install/installation.md
index e73bf2c16ff..4c1021d097f 100644
--- a/doc/install/installation.md
+++ b/doc/install/installation.md
@@ -293,10 +293,9 @@ sudo adduser --disabled-login --gecos 'GitLab' git
## 6. Database
-We recommend using a PostgreSQL database. For MySQL, see the [MySQL setup guide](database_mysql.md).
-
NOTE: **Note:**
-Because we need to make use of extensions and concurrent index removal, you need at least PostgreSQL 9.2.
+Starting from GitLab 12.1, only PostgreSQL is supported. Because we need to make
+use of extensions and concurrent index removal, you need at least PostgreSQL 9.2.
1. Install the database packages:
@@ -502,13 +501,8 @@ If you want to use HTTPS, see [Using HTTPS](#using-https) for the additional ste
### Configure GitLab DB Settings
```sh
-# PostgreSQL only:
sudo -u git cp config/database.yml.postgresql config/database.yml
-# MySQL only:
-sudo -u git cp config/database.yml.mysql config/database.yml
-
-# PostgreSQL only:
# Remove host, username, and password lines from config/database.yml.
# Once modified, the `production` settings will be as follows:
#
@@ -520,7 +514,7 @@ sudo -u git cp config/database.yml.mysql config/database.yml
#
sudo -u git -H editor config/database.yml
-# MySQL and remote PostgreSQL only:
+# Remote PostgreSQL only:
# Update username/password in config/database.yml.
# You only need to adapt the production settings (first part).
# If you followed the database guide then please do as follows:
@@ -528,7 +522,6 @@ sudo -u git -H editor config/database.yml
# You can keep the double quotes around the password
sudo -u git -H editor config/database.yml
-# PostgreSQL and MySQL:
# Make config/database.yml readable to git only
sudo -u git -H chmod o-rwx config/database.yml
```
@@ -544,11 +537,7 @@ Make sure you have `bundle` (run `bundle -v`):
- `< 2.x`.
```sh
-# For PostgreSQL (note, the option says "without ... mysql")
sudo -u git -H bundle install --deployment --without development test mysql aws kerberos
-
-# Or if you use MySQL (note, the option says "without ... postgres")
-sudo -u git -H bundle install --deployment --without development test postgres aws kerberos
```
NOTE: **Note:**
diff --git a/doc/install/requirements.md b/doc/install/requirements.md
index ee3d17704a2..92122fca7dd 100644
--- a/doc/install/requirements.md
+++ b/doc/install/requirements.md
@@ -104,32 +104,10 @@ installation (e.g. the number of users, projects, etc).
We currently support the following databases:
-- PostgreSQL (highly recommended)
-- MySQL/MariaDB (strongly discouraged, not all GitLab features are supported, no support for [MySQL/MariaDB GTID](https://mariadb.com/kb/en/mariadb/gtid/))
-
-We highly recommend the use of PostgreSQL instead of MySQL/MariaDB as not all
-features of GitLab work with MySQL/MariaDB:
-
-1. MySQL support for subgroups was [dropped with GitLab 9.3][post].
- See [issue #30472][30472] for more information.
-1. Geo does [not support MySQL](../administration/geo/replication/database.md). This means no supported Disaster Recovery solution if using MySQL. **[PREMIUM ONLY]**
-1. [Zero downtime migrations](../update/README.md#upgrading-without-downtime) do not work with MySQL.
-1. [Database load balancing](../administration/database_load_balancing.md) is
- supported only for PostgreSQL. **[PREMIUM ONLY]**
-1. GitLab [optimizes the loading of dashboard events](https://gitlab.com/gitlab-org/gitlab-ce/issues/31806) using [PostgreSQL LATERAL JOINs](https://blog.heapanalytics.com/postgresqls-powerful-new-join-type-lateral/).
-1. In general, SQL optimized for PostgreSQL may run much slower in MySQL due to
- differences in query planners. For example, subqueries that work well in PostgreSQL
- may not be [performant in MySQL](https://dev.mysql.com/doc/refman/5.7/en/optimizing-subqueries.html).
-1. Binary column index length is limited to 20 bytes. This is accomplished with [a hack](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/config/initializers/mysql_set_length_for_binary_indexes.rb).
-1. MySQL requires a variety of hacks to increase limits on various columns, [for example](https://gitlab.com/gitlab-org/gitlab-ce/issues/49583).
-1. [The milestone filter runs slower queries on MySQL](https://gitlab.com/gitlab-org/gitlab-ce/issues/51173#note_99391731).
-1. We expect this list to grow over time.
-
-Existing users using GitLab with MySQL/MariaDB are advised to
-[migrate to PostgreSQL](../update/mysql_to_postgresql.md) instead.
-
-[30472]: https://gitlab.com/gitlab-org/gitlab-ce/issues/30472
-[post]: https://about.gitlab.com/2017/06/22/gitlab-9-3-released/#dropping-support-for-subgroups-in-mysql
+- PostgreSQL
+
+Support for MySQL was removed in GitLab 12.1. Existing users using GitLab with
+MySQL/MariaDB are advised to [migrate to PostgreSQL](../update/mysql_to_postgresql.md) before upgrading.
### PostgreSQL Requirements
diff --git a/doc/integration/omniauth.md b/doc/integration/omniauth.md
index a13e9f73f48..bf5debc7694 100644
--- a/doc/integration/omniauth.md
+++ b/doc/integration/omniauth.md
@@ -194,11 +194,7 @@ from the Omniauth provider's documentation.
gem "omniauth-your-auth-provider"
-- If you're using MySQL, install the new Omniauth provider gem by running the following command:
-
- sudo -u git -H bundle install --without development test postgres --path vendor/bundle --no-deployment
-
-- If you're using PostgreSQL, install the new Omniauth provider gem by running the following command:
+- Install the new Omniauth provider gem by running the following command:
sudo -u git -H bundle install --without development test mysql --path vendor/bundle --no-deployment
diff --git a/doc/raketasks/backup_restore.md b/doc/raketasks/backup_restore.md
index 764916ca82d..c7aa22b11f8 100644
--- a/doc/raketasks/backup_restore.md
+++ b/doc/raketasks/backup_restore.md
@@ -936,5 +936,36 @@ A similar strategy can be employed for the remaining features - by removing the
data that cannot be decrypted, GitLab can be brought back into working order,
and the lost data can be manually replaced.
+### Container Registry push failures after restoring from a backup
+
+If you use the [Container Registry](../user/project/container_registry.md), you
+may see pushes to the registry fail after restoring your backup on an Omnibus
+GitLab instance after restoring the registry data.
+
+These failures will mention permission issues in the registry logs, like:
+
+```
+level=error
+msg="response completed with error"
+err.code=unknown
+err.detail="filesystem: mkdir /var/opt/gitlab/gitlab-rails/shared/registry/docker/registry/v2/repositories/...: permission denied"
+err.message="unknown error"
+```
+
+This is caused by the restore being run as the unprivileged user `git` which was
+unable to assign the correct ownership to the registry files during the restore
+([issue 62759](https://gitlab.com/gitlab-org/gitlab-ce/issues/62759 "Incorrect permissions on registry filesystem after restore")).
+
+To get your registry working again:
+
+```bash
+sudo chown -R registry:registry /var/opt/gitlab/gitlab-rails/shared/registry/docker
+```
+
+NOTE: **Note:**
+If you have changed the default filesystem location for the registry, you will
+want to run the chown against your custom location instead of
+`/var/opt/gitlab/gitlab-rails/shared/registry/docker`.
+
[reconfigure GitLab]: ../administration/restart_gitlab.md#omnibus-gitlab-reconfigure
[restart GitLab]: ../administration/restart_gitlab.md#installations-from-source
diff --git a/doc/university/README.md b/doc/university/README.md
index c116e54ad48..1d2c0f2068a 100644
--- a/doc/university/README.md
+++ b/doc/university/README.md
@@ -149,7 +149,6 @@ The GitLab University curriculum is composed of GitLab videos, screencasts, pres
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. [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. [Using a MySQL Database](https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md#using-a-mysql-database-management-server-enterprise-edition-only)
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/)
diff --git a/doc/update/README.md b/doc/update/README.md
index 58227b6fd3f..974982da5d0 100644
--- a/doc/update/README.md
+++ b/doc/update/README.md
@@ -49,8 +49,7 @@ However, for this to work there are the following requirements:
- You have to use [post-deployment
migrations](../development/post_deployment_migrations.md) (included in
zero downtime update steps below).
-- You are using PostgreSQL. If you are using MySQL please look at the release
- post to see if downtime is required.
+- You are using PostgreSQL. Starting from GitLab 12.1, MySQL is not supported.
Most of the time you can safely upgrade from a patch release to the next minor
release if the patch release is not the latest. For example, upgrading from
@@ -140,8 +139,6 @@ possible.
- [MySQL to PostgreSQL](mysql_to_postgresql.md) guides you through migrating
your database from MySQL to PostgreSQL.
-- [MySQL installation guide](../install/database_mysql.md) contains additional
- information about configuring GitLab to work with a MySQL database.
- [Restoring from backup after a failed upgrade](restore_after_failure.md)
- [Upgrading PostgreSQL Using Slony](upgrading_postgresql_using_slony.md), for
upgrading a PostgreSQL database with minimal downtime.
diff --git a/doc/update/mysql_to_postgresql.md b/doc/update/mysql_to_postgresql.md
index b83abcd36f7..4b13e41ab53 100644
--- a/doc/update/mysql_to_postgresql.md
+++ b/doc/update/mysql_to_postgresql.md
@@ -1,5 +1,5 @@
---
-last_updated: 2019-03-27
+last_updated: 2019-06-18
---
# Migrating from MySQL to PostgreSQL
@@ -9,6 +9,10 @@ migrate it to a PostgreSQL database.
## Requirements
+NOTE: **Note:**
+Support for MySQL was removed in GitLab 12.1. This procedure should be performed
+**before** installing GitLab 12.1.
+
[pgloader](http://pgloader.io) 3.4.1+ is required.
You can install it directly from your distribution, for example in
diff --git a/doc/update/patch_versions.md b/doc/update/patch_versions.md
index f2df4277ca8..4300d6d56c7 100644
--- a/doc/update/patch_versions.md
+++ b/doc/update/patch_versions.md
@@ -13,8 +13,6 @@ You can select the tag in the version dropdown in the top left corner of GitLab
### 0. Backup
It's useful to make a backup just in case things go south:
-(With MySQL, this may require granting "LOCK TABLES" privileges to the GitLab
-user on the database version)
```bash
cd /home/git/gitlab
@@ -48,12 +46,8 @@ sudo -u git -H git checkout LATEST_TAG -b LATEST_TAG
```bash
cd /home/git/gitlab
-# PostgreSQL
sudo -u git -H bundle install --without development test mysql --deployment
-# MySQL
-sudo -u git -H bundle install --without development test postgres --deployment
-
# Optional: clean up old gems
sudo -u git -H bundle clean
diff --git a/doc/update/upgrading_from_source.md b/doc/update/upgrading_from_source.md
index a05af7350de..023dc7d6de3 100644
--- a/doc/update/upgrading_from_source.md
+++ b/doc/update/upgrading_from_source.md
@@ -239,29 +239,7 @@ sudo -u git -H git checkout v$(</home/git/gitlab/GITLAB_PAGES_VERSION)
sudo -u git -H make
```
-### 12. Update MySQL permissions
-
-If you are using MySQL you need to grant the GitLab user the necessary
-permissions on the database:
-
-```bash
-mysql -u root -p -e "GRANT TRIGGER ON \`gitlabhq_production\`.* TO 'git'@'localhost';"
-```
-
-If you use MySQL with replication, or just have MySQL configured with binary logging,
-you will need to also run the following on all of your MySQL servers:
-
-```bash
-mysql -u root -p -e "SET GLOBAL log_bin_trust_function_creators = 1;"
-```
-
-You can make this setting permanent by adding it to your `my.cnf`:
-
-```
-log_bin_trust_function_creators=1
-```
-
-### 13. Update configuration files
+### 12. Update configuration files
#### New configuration options for `gitlab.yml`
@@ -335,18 +313,13 @@ For Ubuntu 16.04.1 LTS:
sudo systemctl daemon-reload
```
-### 14. Install libs, migrations, etc.
+### 13. Install libs, migrations, etc.
```bash
cd /home/git/gitlab
-# PostgreSQL installations (note: the line below states '--without mysql')
sudo -u git -H bundle install --deployment --without development test mysql aws kerberos
-# MySQL installations (note: the line below states '--without postgres')
-sudo -u git -H bundle install --deployment --without development test postgres aws kerberos
-
-
# Optional: clean up old gems
sudo -u git -H bundle clean
@@ -364,17 +337,14 @@ sudo -u git -H bundle exec rake yarn:install gitlab:assets:clean gitlab:assets:c
sudo -u git -H bundle exec rake cache:clear RAILS_ENV=production
```
-**MySQL installations**: Run through the `MySQL strings limits` and `Tables and
-data conversion to utf8mb4` [tasks](../install/database_mysql.md).
-
-### 15. Start application
+### 14. Start application
```bash
sudo service gitlab start
sudo service nginx restart
```
-### 16. Check application status
+### 15. Check application status
Check if GitLab and its environment are configured correctly:
diff --git a/doc/user/application_security/license_management/img/license_management_add_license.png b/doc/user/application_security/license_management/img/license_management_add_license.png
new file mode 100644
index 00000000000..1e1a698515b
--- /dev/null
+++ b/doc/user/application_security/license_management/img/license_management_add_license.png
Binary files differ
diff --git a/doc/user/application_security/license_management/img/license_management_search.png b/doc/user/application_security/license_management/img/license_management_search.png
new file mode 100644
index 00000000000..7b6006cef9d
--- /dev/null
+++ b/doc/user/application_security/license_management/img/license_management_search.png
Binary files differ
diff --git a/doc/user/application_security/license_management/img/license_management_settings.png b/doc/user/application_security/license_management/img/license_management_settings.png
index b5490e59074..1a2bfa78a03 100644
--- a/doc/user/application_security/license_management/img/license_management_settings.png
+++ b/doc/user/application_security/license_management/img/license_management_settings.png
Binary files differ
diff --git a/doc/user/application_security/license_management/index.md b/doc/user/application_security/license_management/index.md
index 7a583016586..957c4ede981 100644
--- a/doc/user/application_security/license_management/index.md
+++ b/doc/user/application_security/license_management/index.md
@@ -262,6 +262,8 @@ To approve or blacklist a license:
navigate to the project's **Settings > CI/CD** and expand the
**License Management** section.
1. Click the **Add a license** button.
+
+ ![License Management Add License](img/license_management_add_license.png)
1. In the **License name** dropdown, either:
- Select one of the available licenses. You can search for licenses in the field
at the top of the list.
@@ -270,8 +272,22 @@ To approve or blacklist a license:
1. Select the **Approve** or **Blacklist** radio button to approve or blacklist respectively
the selected license.
+
+
+To modify an existing license:
+
+1. In the **License Management** list, click the **Approved/Declined** dropdown to change it to the desired status.
+
![License Management Settings](img/license_management_settings.png)
+Searching for Licenses:
+
+1. Use the **Search** box to search for a specific license.
+
+ ![License Management Search](img/license_management_search.png)
+
+
+
## License Management report under pipelines
> [Introduced](https://gitlab.com/gitlab-org/gitlab-ee/issues/5491)
diff --git a/doc/user/group/subgroups/index.md b/doc/user/group/subgroups/index.md
index 79ae94dd9ef..1c6cca049c5 100644
--- a/doc/user/group/subgroups/index.md
+++ b/doc/user/group/subgroups/index.md
@@ -5,8 +5,7 @@ type: reference, howto, concepts
# Subgroups
NOTE: **Note:**
-[Introduced](https://gitlab.com/gitlab-org/gitlab-ce/issues/2772) in GitLab 9.0. Not available when using MySQL as external
-database (support removed in GitLab 9.3 [due to performance reasons](https://gitlab.com/gitlab-org/gitlab-ce/issues/30472#note_27747600)).
+[Introduced](https://gitlab.com/gitlab-org/gitlab-ce/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.
@@ -21,16 +20,6 @@ By using subgroups you can do the following:
- **Make it easier to manage people and control visibility.** Give people
different [permissions](../../permissions.md#group-members-permissions) depending on their group [membership](#membership).
-## Database Requirements
-
-Subgroups are only supported when you use PostgreSQL. Supporting subgroups on MySQL in an
-efficient way is not possible due to MySQL's limitations.
-
-See the following links for more information:
-
-- <https://gitlab.com/gitlab-org/gitlab-ce/issues/30472>
-- <https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/10885>
-
## Overview
A group can have many subgroups inside it, and at the same time a group can have
diff --git a/doc/user/project/clusters/index.md b/doc/user/project/clusters/index.md
index a4d4fb91f71..547a0c36108 100644
--- a/doc/user/project/clusters/index.md
+++ b/doc/user/project/clusters/index.md
@@ -532,6 +532,14 @@ This job failed because the necessary resources were not successfully created.
To find the cause of this error when creating a namespace and service account, check the [logs](../../../administration/logs.md#kuberneteslog).
+NOTE: **NOTE:**
+As of GitLab 12.1 we require [`cluster-admin`](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles)
+tokens for all project level clusters unless you unselect the
+[GitLab-managed cluster](#gitlab-managed-clusters) option. If you
+want to manage namespaces and service accounts yourself and don't
+want to provide a `cluster-admin` token to GitLab you must unselect this
+option or you will get the above error.
+
Common reasons for failure include:
- The token you gave GitLab did not have [`cluster-admin`](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles)
diff --git a/doc/user/project/clusters/serverless/index.md b/doc/user/project/clusters/serverless/index.md
index 0ab6d8e112f..3be5bfeaddc 100644
--- a/doc/user/project/clusters/serverless/index.md
+++ b/doc/user/project/clusters/serverless/index.md
@@ -85,12 +85,22 @@ on a given project but not both. The current implementation makes use of a `serv
## Using an existing installation of Knative
+> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/issues/58941) in GitLab 12.0.
+
NOTE: **Note:**
-The "invocations" monitoring feature of GitLab serverless will not work when adding an existing installation of Knative.
+The "invocations" monitoring feature of GitLab serverless will not work when
+adding an existing installation of Knative.
+
+It is also possible to use GitLab Serverless with an existing Kubernetes
+cluster which already has Knative installed.
+
+Simply:
-It is also possible to use GitLab Serverless with an existing Kubernetes cluster which already has Knative installed.
-Simply follow the steps to [add an existing Kubernetes cluster](../index.md#adding-an-existing-kubernetes-cluster)
-and then follow the steps to deploy [functions](#deploying-functions) or [serverless applications](#deploying-serverless-applications) onto your cluster.
+1. Follow the steps to
+ [add an existing Kubernetes cluster](../index.md#adding-an-existing-kubernetes-cluster).
+1. Follow the steps to deploy [functions](#deploying-functions)
+ or [serverless applications](#deploying-serverless-applications) onto your
+ cluster.
## Deploying functions
diff --git a/doc/user/project/deploy_boards.md b/doc/user/project/deploy_boards.md
index b7f6a855cb6..2aef369c087 100644
--- a/doc/user/project/deploy_boards.md
+++ b/doc/user/project/deploy_boards.md
@@ -59,6 +59,8 @@ specific environment, there are lot of uses cases. To name a few:
To display the Deploy Boards for a specific [environment] you should:
+1. Have [defined an environment](../../ci/environments.md#defining-environments) with a deploy stage.
+
1. Have a Kubernetes cluster up and running.
NOTE: **Running on OpenShift:**
diff --git a/doc/user/project/description_templates.md b/doc/user/project/description_templates.md
index 05ad15476ab..ca59fe3cc7d 100644
--- a/doc/user/project/description_templates.md
+++ b/doc/user/project/description_templates.md
@@ -58,6 +58,7 @@ changes you made after picking the template and return it to its initial status.
## Setting a default template for issues and merge requests **[STARTER]**
> **Notes:**
+>
> - This feature was introduced before [description templates](#overview) and is
> available in [GitLab Starter][products]. It can be enabled
> in the project's settings.
@@ -65,7 +66,7 @@ changes you made after picking the template and return it to its initial status.
> - Templates for merge requests were [introduced][ee-7478ece] in GitLab EE 6.9.
The visibility of issues and/or merge requests should be set to either "Everyone
-with access" or "Only team members" in your project's **Settings** otherwise the
+with access" or "Only Project Members" in your project's **Settings** otherwise the
template text areas won't show. This is the default behavior so in most cases
you should be fine.
diff --git a/doc/user/project/issues/issue_data_and_actions.md b/doc/user/project/issues/issue_data_and_actions.md
index ac26b672d99..2103f331aa2 100644
--- a/doc/user/project/issues/issue_data_and_actions.md
+++ b/doc/user/project/issues/issue_data_and_actions.md
@@ -149,12 +149,19 @@ The plain text title and description of the issue fill the top center of the iss
The description fully supports [GitLab Flavored Markdown](../../markdown.md#gitlab-flavored-markdown-gfm),
allowing many formatting options.
-##### 16.1 Zoom Call Links
+##### Zoom call links
-Including a link to a Zoom call in the description of an issue will result in a "Join Zoom meeting" button at the top of the issue, just under the header. To remove the button, edit the description and remove the Zoom call link.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/issues/62966) in GitLab 12.0.
+
+Including a link to a [Zoom](https://zoom.us) call in the description of an issue
+results in a **Join Zoom meeting** button at the top of the issue, just under the header.
+
+For example:
![Link Zoom Call in Issue](img/link_zoom_call_in_issue.png)
+To remove the button, edit the description and remove the Zoom call link.
+
#### 17. Mentions
You can mention a user or a group present in your GitLab instance with `@username` or
diff --git a/doc/user/project/pipelines/settings.md b/doc/user/project/pipelines/settings.md
index 16f48c462eb..24e15a37a40 100644
--- a/doc/user/project/pipelines/settings.md
+++ b/doc/user/project/pipelines/settings.md
@@ -24,7 +24,8 @@ in `.gitlab-ci.yml`.
> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/28919) in GitLab 12.0.
-NOTE: **Note**: As of GitLab 12.0, newly created projects will automaticallyl have a default
+NOTE: **Note**:
+As of GitLab 12.0, newly created projects will automatically have a default
`git depth` value of `50`.
It is possible to limit the number of changes that GitLab CI/CD will fetch when cloning
diff --git a/doc/user/project/quick_actions.md b/doc/user/project/quick_actions.md
index 1d640966013..6c430ff7cd9 100644
--- a/doc/user/project/quick_actions.md
+++ b/doc/user/project/quick_actions.md
@@ -35,7 +35,7 @@ discussions, and descriptions:
| `/label ~label1 ~label2` | Add label(s). Label names can also start without ~ but mixed syntax is not supported. | ✓ | ✓ |
| `/unlabel ~label1 ~label2` | Remove all or specific label(s)| ✓ | ✓ |
| `/relabel ~label1 ~label2` | Replace label | ✓ | ✓ |
-| <code>/copy_metadata #issue &#124; !merge_request</code> | Copy labels and milestone from other issue or merge request in the project | ✓ | ✓ |
+| <code>/copy_metadata &lt;#issue &#124; !merge_request&gt;</code> | Copy labels and milestone from other issue or merge request in the project | ✓ | ✓ |
| <code>/estimate &lt;1w 3d 2h 14m&gt;</code> | Set time estimate | ✓ | ✓ |
| `/remove_estimate` | Remove time estimate | ✓ | ✓ |
| <code>/spend &lt;time(1h 30m &#124; -1h 5m)&gt; &lt;date(YYYY-MM-DD)&gt;</code> | Add or subtract spent time; optionally, specify the date that time was spent on | ✓ | ✓ |
@@ -44,14 +44,14 @@ discussions, and descriptions:
| `/unlock` | Unlock the discussion | ✓ | ✓ |
| <code>/due &lt;in 2 days &#124; this Friday &#124; December 31st&gt;</code>| Set due date | ✓ | |
| `/remove_due_date` | Remove due date | ✓ | |
-| `/weight 0,1,2, ...` | Set weight **[STARTER]** | ✓ | |
+| <code>/weight &lt;0 &#124; 1 &#124; 2 &#124; ...&gt;</code> | Set weight **[STARTER]** | ✓ | |
| `/clear_weight` | Clears weight **[STARTER]** | ✓ | |
-| `/epic <&epic &#124; group&epic &#124; Epic URL>` | Add to epic **[ULTIMATE]** | ✓ | |
+| <code>/epic &lt;&epic &#124; group&epic &#124; Epic URL&gt;</code> | Add to epic **[ULTIMATE]** | ✓ | |
| `/remove_epic` | Removes from epic **[ULTIMATE]** | ✓ | |
| `/promote` | Promote issue to epic **[ULTIMATE]** | ✓ | |
| `/confidential` | Make confidential | ✓ | |
-| `/duplicate #issue` | Mark this issue as a duplicate of another issue | ✓ |
-| `/move path/to/project` | Move this issue to another project | ✓ | |
+| `/duplicate <#issue>` | Mark this issue as a duplicate of another issue | ✓ |
+| `/move <path/to/project>` | Move this issue to another project | ✓ | |
| `/target_branch <Local branch Name>` | Set target branch | | ✓ |
| `/wip` | Toggle the Work In Progress status | | ✓ |
| `/approve` | Approve the merge request | | ✓ |
@@ -85,3 +85,5 @@ The following quick actions are applicable for epics threads and description:
| `/label ~label1 ~label2` | Add label(s) |
| `/unlabel ~label1 ~label2` | Remove all or specific label(s) |
| `/relabel ~label1 ~label2` | Replace label |
+| <code>/child_epic &lt;&epic &#124; group&epic &#124; Epic URL&gt;</code> | Adds child epic to epic ([introduced in GitLab 12.0](https://gitlab.com/gitlab-org/gitlab-ee/issues/7330)) |
+| <code>/remove_child_epic &lt;&epic &#124; group&epic &#124; Epic URL&gt;</code> | Removes child epic from epic ([introduced in GitLab 12.0](https://gitlab.com/gitlab-org/gitlab-ee/issues/7330)) |
diff --git a/lib/api/discussions.rb b/lib/api/discussions.rb
index 693172b7d08..cc62ce22a1b 100644
--- a/lib/api/discussions.rb
+++ b/lib/api/discussions.rb
@@ -25,7 +25,7 @@ module API
end
# rubocop: disable CodeReuse/ActiveRecord
get ":id/#{noteables_path}/:noteable_id/discussions" do
- noteable = find_noteable(parent_type, noteables_str, params[:noteable_id])
+ noteable = find_noteable(parent_type, params[:id], noteable_type, params[:noteable_id])
notes = noteable.notes
.inc_relations_for_view
@@ -47,7 +47,7 @@ module API
requires :noteable_id, types: [Integer, String], desc: 'The ID of the noteable'
end
get ":id/#{noteables_path}/:noteable_id/discussions/:discussion_id" do
- noteable = find_noteable(parent_type, noteables_str, params[:noteable_id])
+ noteable = find_noteable(parent_type, params[:id], noteable_type, params[:noteable_id])
notes = readable_discussion_notes(noteable, params[:discussion_id])
if notes.empty?
@@ -82,7 +82,7 @@ module API
end
end
post ":id/#{noteables_path}/:noteable_id/discussions" do
- noteable = find_noteable(parent_type, noteables_str, params[:noteable_id])
+ noteable = find_noteable(parent_type, params[:id], noteable_type, params[:noteable_id])
type = params[:position] ? 'DiffNote' : 'DiscussionNote'
id_key = noteable.is_a?(Commit) ? :commit_id : :noteable_id
@@ -112,7 +112,7 @@ module API
requires :noteable_id, types: [Integer, String], desc: 'The ID of the noteable'
end
get ":id/#{noteables_path}/:noteable_id/discussions/:discussion_id/notes" do
- noteable = find_noteable(parent_type, noteables_str, params[:noteable_id])
+ noteable = find_noteable(parent_type, params[:id], noteable_type, params[:noteable_id])
notes = readable_discussion_notes(noteable, params[:discussion_id])
if notes.empty?
@@ -132,7 +132,7 @@ module API
optional :created_at, type: String, desc: 'The creation date of the note'
end
post ":id/#{noteables_path}/:noteable_id/discussions/:discussion_id/notes" do
- noteable = find_noteable(parent_type, noteables_str, params[:noteable_id])
+ noteable = find_noteable(parent_type, params[:id], noteable_type, params[:noteable_id])
notes = readable_discussion_notes(noteable, params[:discussion_id])
first_note = notes.first
@@ -166,7 +166,7 @@ module API
requires :note_id, type: Integer, desc: 'The ID of a note'
end
get ":id/#{noteables_path}/:noteable_id/discussions/:discussion_id/notes/:note_id" do
- noteable = find_noteable(parent_type, noteables_str, params[:noteable_id])
+ noteable = find_noteable(parent_type, params[:id], noteable_type, params[:noteable_id])
get_note(noteable, params[:note_id])
end
@@ -183,7 +183,7 @@ module API
exactly_one_of :body, :resolved
end
put ":id/#{noteables_path}/:noteable_id/discussions/:discussion_id/notes/:note_id" do
- noteable = find_noteable(parent_type, noteables_str, params[:noteable_id])
+ noteable = find_noteable(parent_type, params[:id], noteable_type, params[:noteable_id])
if params[:resolved].nil?
update_note(noteable, params[:note_id])
@@ -201,7 +201,7 @@ module API
requires :note_id, type: Integer, desc: 'The ID of a note'
end
delete ":id/#{noteables_path}/:noteable_id/discussions/:discussion_id/notes/:note_id" do
- noteable = find_noteable(parent_type, noteables_str, params[:noteable_id])
+ noteable = find_noteable(parent_type, params[:id], noteable_type, params[:noteable_id])
delete_note(noteable, params[:note_id])
end
@@ -216,7 +216,7 @@ module API
requires :resolved, type: Boolean, desc: 'Mark discussion resolved/unresolved'
end
put ":id/#{noteables_path}/:noteable_id/discussions/:discussion_id" do
- noteable = find_noteable(parent_type, noteables_str, params[:noteable_id])
+ noteable = find_noteable(parent_type, params[:id], noteable_type, params[:noteable_id])
resolve_discussion(noteable, params[:discussion_id], params[:resolved])
end
diff --git a/lib/api/helpers.rb b/lib/api/helpers.rb
index fd258e3edbc..6382d295f79 100644
--- a/lib/api/helpers.rb
+++ b/lib/api/helpers.rb
@@ -183,11 +183,6 @@ module API
user_project.commit_by(oid: id)
end
- def find_project_snippet(id)
- finder_params = { project: user_project }
- SnippetsFinder.new(current_user, finder_params).find(id)
- end
-
# rubocop: disable CodeReuse/ActiveRecord
def find_merge_request_with_access(iid, access_level = :read_merge_request)
merge_request = user_project.merge_requests.find_by!(iid: iid)
diff --git a/lib/api/helpers/notes_helpers.rb b/lib/api/helpers/notes_helpers.rb
index a068de4361c..b03ac7deb71 100644
--- a/lib/api/helpers/notes_helpers.rb
+++ b/lib/api/helpers/notes_helpers.rb
@@ -73,14 +73,23 @@ module API
"read_#{noteable.class.to_s.underscore}".to_sym
end
- def find_noteable(parent, noteables_str, noteable_id)
- noteable = public_send("find_#{parent}_#{noteables_str.singularize}", noteable_id) # rubocop:disable GitlabSecurity/PublicSend
+ def find_noteable(parent_type, parent_id, noteable_type, noteable_id)
+ params = params_by_noteable_type_and_id(noteable_type, noteable_id)
- readable = can?(current_user, noteable_read_ability_name(noteable), noteable)
-
- return not_found!(noteables_str) unless readable
+ noteable = NotesFinder.new(user_project, current_user, params).target
+ noteable = nil unless can?(current_user, noteable_read_ability_name(noteable), noteable)
+ noteable || not_found!(noteable_type)
+ end
- noteable
+ def params_by_noteable_type_and_id(type, id)
+ target_type = type.name.underscore
+ { target_type: target_type }.tap do |h|
+ if %w(issue merge_request).include?(target_type)
+ h[:target_iid] = id
+ else
+ h[:target_id] = id
+ end
+ end
end
def noteable_parent(noteable)
diff --git a/lib/api/notes.rb b/lib/api/notes.rb
index 416cf39d3ec..9381f045144 100644
--- a/lib/api/notes.rb
+++ b/lib/api/notes.rb
@@ -15,8 +15,6 @@ module API
requires :id, type: String, desc: "The ID of a #{parent_type}"
end
resource parent_type.pluralize.to_sym, requirements: API::NAMESPACE_OR_PROJECT_REQUIREMENTS do
- noteables_str = noteable_type.to_s.underscore.pluralize
-
desc "Get a list of #{noteable_type.to_s.downcase} notes" do
success Entities::Note
end
@@ -30,7 +28,7 @@ module API
end
# rubocop: disable CodeReuse/ActiveRecord
get ":id/#{noteables_str}/:noteable_id/notes" do
- noteable = find_noteable(parent_type, noteables_str, params[:noteable_id])
+ noteable = find_noteable(parent_type, params[:id], noteable_type, params[:noteable_id])
# We exclude notes that are cross-references and that cannot be viewed
# by the current user. By doing this exclusion at this level and not
@@ -56,7 +54,7 @@ module API
requires :noteable_id, type: Integer, desc: 'The ID of the noteable'
end
get ":id/#{noteables_str}/:noteable_id/notes/:note_id" do
- noteable = find_noteable(parent_type, noteables_str, params[:noteable_id])
+ noteable = find_noteable(parent_type, params[:id], noteable_type, params[:noteable_id])
get_note(noteable, params[:note_id])
end
@@ -69,7 +67,7 @@ module API
optional :created_at, type: String, desc: 'The creation date of the note'
end
post ":id/#{noteables_str}/:noteable_id/notes" do
- noteable = find_noteable(parent_type, noteables_str, params[:noteable_id])
+ noteable = find_noteable(parent_type, params[:id], noteable_type, params[:noteable_id])
opts = {
note: params[:body],
@@ -96,7 +94,7 @@ module API
requires :body, type: String, desc: 'The content of a note'
end
put ":id/#{noteables_str}/:noteable_id/notes/:note_id" do
- noteable = find_noteable(parent_type, noteables_str, params[:noteable_id])
+ noteable = find_noteable(parent_type, params[:id], noteable_type, params[:noteable_id])
update_note(noteable, params[:note_id])
end
@@ -109,7 +107,7 @@ module API
requires :note_id, type: Integer, desc: 'The ID of a note'
end
delete ":id/#{noteables_str}/:noteable_id/notes/:note_id" do
- noteable = find_noteable(parent_type, noteables_str, params[:noteable_id])
+ noteable = find_noteable(parent_type, params[:id], noteable_type, params[:noteable_id])
delete_note(noteable, params[:note_id])
end
diff --git a/lib/api/pages_domains.rb b/lib/api/pages_domains.rb
index 78442f465bd..4227a106a95 100644
--- a/lib/api/pages_domains.rb
+++ b/lib/api/pages_domains.rb
@@ -90,14 +90,15 @@ module API
end
params do
requires :domain, type: String, desc: 'The domain'
- optional :certificate, allow_blank: false, types: [File, String], desc: 'The certificate'
- optional :key, allow_blank: false, types: [File, String], desc: 'The key'
- all_or_none_of :certificate, :key
+ optional :certificate, allow_blank: false, types: [File, String], desc: 'The certificate', as: :user_provided_certificate
+ optional :key, allow_blank: false, types: [File, String], desc: 'The key', as: :user_provided_key
+ all_or_none_of :user_provided_certificate, :user_provided_key
end
post ":id/pages/domains" do
authorize! :update_pages, user_project
pages_domain_params = declared(params, include_parent_namespaces: false)
+
pages_domain = user_project.pages_domains.create(pages_domain_params)
if pages_domain.persisted?
@@ -110,8 +111,8 @@ module API
desc 'Updates a pages domain'
params do
requires :domain, type: String, desc: 'The domain'
- optional :certificate, allow_blank: false, types: [File, String], desc: 'The certificate'
- optional :key, allow_blank: false, types: [File, String], desc: 'The key'
+ optional :certificate, allow_blank: false, types: [File, String], desc: 'The certificate', as: :user_provided_certificate
+ optional :key, allow_blank: false, types: [File, String], desc: 'The key', as: :user_provided_key
end
put ":id/pages/domains/:domain", requirements: PAGES_DOMAINS_ENDPOINT_REQUIREMENTS do
authorize! :update_pages, user_project
@@ -119,8 +120,8 @@ module API
pages_domain_params = declared(params, include_parent_namespaces: false)
# Remove empty private key if certificate is not empty.
- if pages_domain_params[:certificate] && !pages_domain_params[:key]
- pages_domain_params.delete(:key)
+ if pages_domain_params[:user_provided_certificate] && !pages_domain_params[:user_provided_key]
+ pages_domain_params.delete(:user_provided_key)
end
if pages_domain.update(pages_domain_params)
diff --git a/lib/api/resource_label_events.rb b/lib/api/resource_label_events.rb
index 448bef12cec..505a6c68c9c 100644
--- a/lib/api/resource_label_events.rb
+++ b/lib/api/resource_label_events.rb
@@ -26,7 +26,7 @@ module API
# rubocop: disable CodeReuse/ActiveRecord
get ":id/#{eventables_str}/:eventable_id/resource_label_events" do
- eventable = find_noteable(parent_type, eventables_str, params[:eventable_id])
+ eventable = find_noteable(parent_type, params[:id], eventable_type, params[:eventable_id])
events = eventable.resource_label_events.includes(:label, :user)
present paginate(events), with: Entities::ResourceLabelEvent
@@ -42,7 +42,7 @@ module API
requires :eventable_id, types: [Integer, String], desc: 'The ID of the eventable'
end
get ":id/#{eventables_str}/:eventable_id/resource_label_events/:event_id" do
- eventable = find_noteable(parent_type, eventables_str, params[:eventable_id])
+ eventable = find_noteable(parent_type, params[:id], eventable_type, params[:eventable_id])
event = eventable.resource_label_events.find(params[:event_id])
present event, with: Entities::ResourceLabelEvent
diff --git a/lib/api/users.rb b/lib/api/users.rb
index 6afeebb6890..9ab5fa8d0bd 100644
--- a/lib/api/users.rb
+++ b/lib/api/users.rb
@@ -209,22 +209,9 @@ module API
.where.not(id: user.id).count > 0
user_params = declared_params(include_missing: false)
- identity_attrs = user_params.slice(:provider, :extern_uid)
-
- if identity_attrs.any?
- identity = user.identities.find_by(provider: identity_attrs[:provider])
-
- if identity
- identity.update(identity_attrs)
- else
- identity = user.identities.build(identity_attrs)
- identity.save
- end
- end
user_params[:password_expires_at] = Time.now if user_params[:password].present?
-
- result = ::Users::UpdateService.new(current_user, user_params.except(:extern_uid, :provider).merge(user: user)).execute
+ result = ::Users::UpdateService.new(current_user, user_params.merge(user: user)).execute
if result[:status] == :success
present user, with: Entities::UserPublic, current_user: current_user
diff --git a/lib/banzai/filter/relative_link_filter.rb b/lib/banzai/filter/relative_link_filter.rb
index 199b3533cf4..80c84c0f622 100644
--- a/lib/banzai/filter/relative_link_filter.rb
+++ b/lib/banzai/filter/relative_link_filter.rb
@@ -17,6 +17,8 @@ module Banzai
include Gitlab::Utils::StrongMemoize
def call
+ return doc if context[:system_note]
+
@uri_types = {}
clear_memoization(:linkable_files)
diff --git a/lib/gitaly/server.rb b/lib/gitaly/server.rb
index 7b238623418..907c6e1b605 100644
--- a/lib/gitaly/server.rb
+++ b/lib/gitaly/server.rb
@@ -2,8 +2,18 @@
module Gitaly
class Server
- def self.all
- Gitlab.config.repositories.storages.keys.map { |s| Gitaly::Server.new(s) }
+ class << self
+ def all
+ Gitlab.config.repositories.storages.keys.map { |s| Gitaly::Server.new(s) }
+ end
+
+ def count
+ all.size
+ end
+
+ def filesystems
+ all.map(&:filesystem_type).compact.uniq
+ end
end
attr_reader :storage
@@ -36,6 +46,10 @@ module Gitaly
storage_status&.writeable
end
+ def filesystem_type
+ storage_status&.fs_type
+ end
+
def address
Gitlab::GitalyClient.address(@storage)
rescue RuntimeError => e
diff --git a/lib/gitlab.rb b/lib/gitlab.rb
index ccaf06c5d6a..fd4bbd69468 100644
--- a/lib/gitlab.rb
+++ b/lib/gitlab.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require_dependency 'gitlab/popen'
+require_dependency File.expand_path('gitlab/popen', __dir__)
module Gitlab
def self.root
@@ -60,11 +60,15 @@ module Gitlab
end
def self.ee?
- if ENV['IS_GITLAB_EE'].present?
- Gitlab::Utils.to_boolean(ENV['IS_GITLAB_EE'])
- else
- Object.const_defined?(:License)
- end
+ @is_ee ||=
+ if ENV['IS_GITLAB_EE'].present?
+ 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
end
def self.http_proxy_env?
diff --git a/lib/gitlab/ci/pipeline/expression/lexeme/pattern.rb b/lib/gitlab/ci/pipeline/expression/lexeme/pattern.rb
index eb32dffc454..e4cf360a1c1 100644
--- a/lib/gitlab/ci/pipeline/expression/lexeme/pattern.rb
+++ b/lib/gitlab/ci/pipeline/expression/lexeme/pattern.rb
@@ -34,7 +34,7 @@ module Gitlab
end
def self.eager_matching_with_escape_characters?
- Feature.enabled?(:ci_variables_complex_expressions)
+ Feature.enabled?(:ci_variables_complex_expressions, default_enabled: true)
end
end
end
diff --git a/lib/gitlab/ci/pipeline/expression/lexer.rb b/lib/gitlab/ci/pipeline/expression/lexer.rb
index 23aa1ca4a36..22c210ae26b 100644
--- a/lib/gitlab/ci/pipeline/expression/lexer.rb
+++ b/lib/gitlab/ci/pipeline/expression/lexer.rb
@@ -73,7 +73,7 @@ module Gitlab
end
def available_lexemes
- Feature.enabled?(:ci_variables_complex_expressions) ? NEW_LEXEMES : LEXEMES
+ Feature.enabled?(:ci_variables_complex_expressions, default_enabled: true) ? NEW_LEXEMES : LEXEMES
end
end
end
diff --git a/lib/gitlab/ci/pipeline/expression/parser.rb b/lib/gitlab/ci/pipeline/expression/parser.rb
index 0679ed329e5..589bf32a4d7 100644
--- a/lib/gitlab/ci/pipeline/expression/parser.rb
+++ b/lib/gitlab/ci/pipeline/expression/parser.rb
@@ -13,7 +13,7 @@ module Gitlab
end
def tree
- if Feature.enabled?(:ci_variables_complex_expressions)
+ if Feature.enabled?(:ci_variables_complex_expressions, default_enabled: true)
rpn_parse_tree
else
reverse_descent_parse_tree
diff --git a/lib/gitlab/database/migration_helpers.rb b/lib/gitlab/database/migration_helpers.rb
index 1b5cd0fbb07..0b12e862ded 100644
--- a/lib/gitlab/database/migration_helpers.rb
+++ b/lib/gitlab/database/migration_helpers.rb
@@ -225,7 +225,10 @@ module Gitlab
# here is based on Rails' foreign_key_name() method, which unfortunately
# is private so we can't rely on it directly.
def concurrent_foreign_key_name(table, column)
- "fk_#{Digest::SHA256.hexdigest("#{table}_#{column}_fk").first(10)}"
+ identifier = "#{table}_#{column}_fk"
+ hashed_identifier = Digest::SHA256.hexdigest(identifier).first(10)
+
+ "fk_#{hashed_identifier}"
end
# Long-running migrations may take more than the timeout allowed by
diff --git a/lib/gitlab/favicon.rb b/lib/gitlab/favicon.rb
index 6e31064f737..519213e143c 100644
--- a/lib/gitlab/favicon.rb
+++ b/lib/gitlab/favicon.rb
@@ -5,8 +5,8 @@ module Gitlab
class << self
def main
image_name =
- if appearance_favicon.exists?
- appearance_favicon.url
+ if appearance.favicon.exists?
+ appearance.favicon_path
elsif Gitlab::Utils.to_boolean(ENV['CANARY'])
'favicon-yellow.png'
elsif Rails.env.development?
@@ -57,10 +57,6 @@ module Gitlab
def appearance
Gitlab::SafeRequestStore[:appearance] ||= (Appearance.current || Appearance.new)
end
-
- def appearance_favicon
- appearance.favicon
- end
end
end
end
diff --git a/lib/gitlab/git/repository.rb b/lib/gitlab/git/repository.rb
index 8a2e711ec4e..a6739f12280 100644
--- a/lib/gitlab/git/repository.rb
+++ b/lib/gitlab/git/repository.rb
@@ -683,17 +683,16 @@ module Gitlab
attributes(path)[name]
end
- # Check .gitattributes for a given ref
+ # Returns parsed .gitattributes for a given ref
#
- # This only checks the root .gitattributes file,
+ # This only parses the root .gitattributes file,
# it does not traverse subfolders to find additional .gitattributes files
#
# This method is around 30 times slower than `attributes`, which uses
# `$GIT_DIR/info/attributes`. Consider caching AttributesAtRefParser
# and reusing that for multiple calls instead of this method.
- def attributes_at(ref, file_path)
- parser = AttributesAtRefParser.new(self, ref)
- parser.attributes(file_path)
+ def attributes_at(ref)
+ AttributesAtRefParser.new(self, ref)
end
def languages(ref = nil)
diff --git a/lib/gitlab/graphql/markdown_field.rb b/lib/gitlab/graphql/markdown_field.rb
new file mode 100644
index 00000000000..7be6810f7ba
--- /dev/null
+++ b/lib/gitlab/graphql/markdown_field.rb
@@ -0,0 +1,26 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Graphql
+ module MarkdownField
+ extend ActiveSupport::Concern
+
+ prepended do
+ def self.markdown_field(name, **kwargs)
+ if kwargs[:resolver].present? || kwargs[:resolve].present?
+ raise ArgumentError, 'Only `method` is allowed to specify the markdown field'
+ end
+
+ method_name = kwargs.delete(:method) || name.to_s.sub(/_html$/, '')
+ kwargs[:resolve] = Gitlab::Graphql::MarkdownField::Resolver.new(method_name.to_sym).proc
+
+ kwargs[:description] ||= "The GitLab Flavored Markdown rendering of `#{method_name}`"
+ # Adding complexity to rendered notes since that could cause queries.
+ kwargs[:complexity] ||= 5
+
+ field name, GraphQL::STRING_TYPE, **kwargs
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/graphql/markdown_field/resolver.rb b/lib/gitlab/graphql/markdown_field/resolver.rb
new file mode 100644
index 00000000000..11a01b95ad1
--- /dev/null
+++ b/lib/gitlab/graphql/markdown_field/resolver.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Graphql
+ module MarkdownField
+ class Resolver
+ attr_reader :method_name
+
+ def initialize(method_name)
+ @method_name = method_name
+ end
+
+ def proc
+ -> (object, _args, ctx) do
+ # We need to `dup` the context so the MarkdownHelper doesn't modify it
+ ::MarkupHelper.markdown_field(object, method_name, ctx.to_h.dup)
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/json_cache.rb b/lib/gitlab/json_cache.rb
index e4bc437d787..9a0b2b35112 100644
--- a/lib/gitlab/json_cache.rb
+++ b/lib/gitlab/json_cache.rb
@@ -58,7 +58,7 @@ module Gitlab
private
def parse_value(raw, klass)
- value = ActiveSupport::JSON.decode(raw)
+ value = ActiveSupport::JSON.decode(raw.to_s)
case value
when Hash then parse_entry(value, klass)
diff --git a/lib/gitlab/metrics/dashboard/base_service.rb b/lib/gitlab/metrics/dashboard/base_service.rb
index 090014aa597..90895eb237a 100644
--- a/lib/gitlab/metrics/dashboard/base_service.rb
+++ b/lib/gitlab/metrics/dashboard/base_service.rb
@@ -23,6 +23,11 @@ module Gitlab
raise NotImplementedError
end
+ # Returns an un-processed dashboard from the cache.
+ def raw_dashboard
+ Gitlab::Metrics::Dashboard::Cache.fetch(cache_key) { get_raw_dashboard }
+ end
+
private
# Returns a new dashboard Hash, supplemented with DB info
@@ -37,11 +42,6 @@ module Gitlab
params[:dashboard_path]
end
- # Returns an un-processed dashboard from the cache.
- def raw_dashboard
- Gitlab::Metrics::Dashboard::Cache.fetch(cache_key) { get_raw_dashboard }
- end
-
# @return [Hash] an unmodified dashboard
def get_raw_dashboard
raise NotImplementedError
@@ -54,6 +54,7 @@ module Gitlab
# Determines whether custom metrics should be included
# in the processed output.
+ # @return [Boolean]
def insert_project_metrics?
false
end
diff --git a/lib/gitlab/metrics/dashboard/dynamic_dashboard_service.rb b/lib/gitlab/metrics/dashboard/dynamic_dashboard_service.rb
new file mode 100644
index 00000000000..81ed8922e17
--- /dev/null
+++ b/lib/gitlab/metrics/dashboard/dynamic_dashboard_service.rb
@@ -0,0 +1,65 @@
+# frozen_string_literal: true
+
+# Responsible for returning a filtered system dashboard
+# containing only the default embedded metrics. In future,
+# this class may be updated to support filtering to
+# alternate metrics/panels.
+#
+# Why isn't this filtering in a processing stage? By filtering
+# here, we ensure the dynamically-determined dashboard is cached.
+#
+# Use Gitlab::Metrics::Dashboard::Finder to retrive dashboards.
+module Gitlab
+ module Metrics
+ module Dashboard
+ class DynamicDashboardService < Gitlab::Metrics::Dashboard::BaseService
+ # For the default filtering for embedded metrics,
+ # uses the 'id' key in dashboard-yml definition for
+ # identification.
+ DEFAULT_EMBEDDED_METRICS_IDENTIFIERS = %w(
+ system_metrics_kubernetes_container_memory_total
+ system_metrics_kubernetes_container_cores_total
+ ).freeze
+
+ # Returns a new dashboard with only the matching
+ # metrics from the system dashboard, stripped of groups.
+ # @return [Hash]
+ def raw_dashboard
+ panels = panel_groups.each_with_object([]) do |group, panels|
+ matched_panels = group['panels'].select { |panel| matching_panel?(panel) }
+
+ panels.concat(matched_panels)
+ end
+
+ { 'panel_groups' => [{ 'panels' => panels }] }
+ end
+
+ def cache_key
+ "dynamic_metrics_dashboard_#{metric_identifiers.join('_')}"
+ end
+
+ private
+
+ # Returns an array of the panels groups on the
+ # system dashboard
+ def panel_groups
+ Gitlab::Metrics::Dashboard::SystemDashboardService
+ .new(project, nil)
+ .raw_dashboard['panel_groups']
+ end
+
+ # Identifies a panel as "matching" if any metric ids in
+ # the panel is in the list of identifiers to collect.
+ def matching_panel?(panel)
+ panel['metrics'].any? do |metric|
+ metric_identifiers.include?(metric['id'])
+ end
+ end
+
+ def metric_identifiers
+ DEFAULT_EMBEDDED_METRICS_IDENTIFIERS
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/metrics/dashboard/finder.rb b/lib/gitlab/metrics/dashboard/finder.rb
index 49ea5c7d4f2..d7491d1553d 100644
--- a/lib/gitlab/metrics/dashboard/finder.rb
+++ b/lib/gitlab/metrics/dashboard/finder.rb
@@ -9,17 +9,28 @@ module Gitlab
class Finder
class << self
# Returns a formatted dashboard packed with DB info.
+ # @param project [Project]
+ # @param user [User]
+ # @param environment [Environment]
+ # @param opts - dashboard_path [String] Path at which the
+ # dashboard can be found. Nil values will
+ # default to the system dashboard.
+ # @param opts - embedded [Boolean] Determines whether the
+ # dashboard is to be rendered as part of an
+ # issue or location other than the primary
+ # metrics dashboard UI. Returns only the
+ # Memory/CPU charts of the system dash.
# @return [Hash]
- def find(project, user, environment, dashboard_path = nil)
- service = system_dashboard?(dashboard_path) ? system_service : project_service
-
- service
+ def find(project, user, environment, dashboard_path: nil, embedded: false)
+ service_for_path(dashboard_path, embedded: embedded)
.new(project, user, environment: environment, dashboard_path: dashboard_path)
.get_dashboard
end
# Summary of all known dashboards.
- # @return [Array<Hash>] ex) [{ path: String, default: Boolean }]
+ # @return [Array<Hash>] ex) [{ path: String,
+ # display_name: String,
+ # default: Boolean }]
def find_all_paths(project)
project.repository.metrics_dashboard_paths
end
@@ -35,6 +46,13 @@ module Gitlab
private
+ def service_for_path(dashboard_path, embedded:)
+ return dynamic_service if embedded
+ return system_service if system_dashboard?(dashboard_path)
+
+ project_service
+ end
+
def system_service
Gitlab::Metrics::Dashboard::SystemDashboardService
end
@@ -43,6 +61,10 @@ module Gitlab
Gitlab::Metrics::Dashboard::ProjectDashboardService
end
+ def dynamic_service
+ Gitlab::Metrics::Dashboard::DynamicDashboardService
+ end
+
def system_dashboard?(filepath)
!filepath || system_service.system_dashboard?(filepath)
end
diff --git a/lib/gitlab/usage_data.rb b/lib/gitlab/usage_data.rb
index 9aa2e972adf..0180fe7fa71 100644
--- a/lib/gitlab/usage_data.rb
+++ b/lib/gitlab/usage_data.rb
@@ -136,8 +136,9 @@ module Gitlab
def components_usage_data
{
- gitlab_pages: { enabled: Gitlab.config.pages.enabled, version: Gitlab::Pages::VERSION },
git: { version: Gitlab::Git.version },
+ gitaly: { version: Gitaly::Server.all.first.server_version, servers: Gitaly::Server.count, filesystems: Gitaly::Server.filesystems },
+ gitlab_pages: { enabled: Gitlab.config.pages.enabled, version: Gitlab::Pages::VERSION },
database: { adapter: Gitlab::Database.adapter_name, version: Gitlab::Database.version }
}
end
diff --git a/lib/system_check/ldap_check.rb b/lib/system_check/ldap_check.rb
index 619fb3cccb8..938026424ed 100644
--- a/lib/system_check/ldap_check.rb
+++ b/lib/system_check/ldap_check.rb
@@ -33,8 +33,13 @@ module SystemCheck
$stdout.puts "LDAP users with access to your GitLab server (only showing the first #{limit} results)"
users = adapter.users(adapter.config.uid, '*', limit)
- users.each do |user|
- $stdout.puts "\tDN: #{user.dn}\t #{adapter.config.uid}: #{user.uid}"
+
+ if should_sanitize?
+ $stdout.puts "\tUser output sanitized. Found #{users.length} users of #{limit} limit."
+ else
+ users.each do |user|
+ $stdout.puts "\tDN: #{user.dn}\t #{adapter.config.uid}: #{user.uid}"
+ end
end
end
rescue Net::LDAP::ConnectionRefusedError, Errno::ECONNREFUSED => e
diff --git a/locale/ar_SA/gitlab.po b/locale/ar_SA/gitlab.po
index e093612f1f7..1b561621f6f 100644
--- a/locale/ar_SA/gitlab.po
+++ b/locale/ar_SA/gitlab.po
@@ -1014,9 +1014,27 @@ 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 ""
@@ -3675,9 +3693,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3687,6 +3702,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4941,6 +4959,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5895,12 +5916,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr ""
-
-msgid "FirstPushedBy|pushed by"
-msgstr ""
-
msgid "Fixed date"
msgstr ""
@@ -7071,6 +7086,12 @@ 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 ""
@@ -9075,6 +9096,9 @@ msgstr ""
msgid "No repository"
msgstr ""
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -9084,9 +9108,15 @@ msgstr ""
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9603,9 +9633,6 @@ msgstr ""
msgid "Pipeline"
msgstr ""
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr ""
@@ -11145,9 +11172,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11520,6 +11544,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13383,6 +13410,9 @@ 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 ""
@@ -13779,6 +13809,9 @@ 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}."
+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 ""
@@ -14862,7 +14895,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15921,9 +15954,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16566,6 +16596,9 @@ msgstr[5] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16662,6 +16695,9 @@ 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 ""
diff --git a/locale/bg/gitlab.po b/locale/bg/gitlab.po
index aea8f16e137..4d72599f5a3 100644
--- a/locale/bg/gitlab.po
+++ b/locale/bg/gitlab.po
@@ -858,9 +858,27 @@ 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 ""
@@ -3483,9 +3501,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3495,6 +3510,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4745,6 +4763,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5695,12 +5716,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr "Първо"
-
-msgid "FirstPushedBy|pushed by"
-msgstr "изпращане на промени от"
-
msgid "Fixed date"
msgstr ""
@@ -6867,6 +6882,12 @@ 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 ""
@@ -8855,6 +8876,9 @@ msgstr ""
msgid "No repository"
msgstr "ÐÑма хранилище"
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8864,9 +8888,15 @@ msgstr "ÐÑма планове"
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9379,9 +9409,6 @@ msgstr ""
msgid "Pipeline"
msgstr "Схема"
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr "План за Ñхема"
@@ -10917,9 +10944,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr "Свързани подаваниÑ"
-
msgid "Related Deployed Jobs"
msgstr "Свързани внедрени задачи"
@@ -11284,6 +11308,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13135,6 +13162,9 @@ 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 ""
@@ -13531,6 +13561,9 @@ 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}."
+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 ""
@@ -14606,7 +14639,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15661,9 +15694,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16254,6 +16284,9 @@ msgstr[1] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16346,6 +16379,9 @@ 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 ""
diff --git a/locale/bn_BD/gitlab.po b/locale/bn_BD/gitlab.po
index 3096442dd44..c1b139055cc 100644
--- a/locale/bn_BD/gitlab.po
+++ b/locale/bn_BD/gitlab.po
@@ -858,9 +858,27 @@ 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 ""
@@ -3483,9 +3501,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3495,6 +3510,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4745,6 +4763,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5695,12 +5716,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr ""
-
-msgid "FirstPushedBy|pushed by"
-msgstr ""
-
msgid "Fixed date"
msgstr ""
@@ -6867,6 +6882,12 @@ 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 ""
@@ -8855,6 +8876,9 @@ msgstr ""
msgid "No repository"
msgstr ""
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8864,9 +8888,15 @@ msgstr ""
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9379,9 +9409,6 @@ msgstr ""
msgid "Pipeline"
msgstr ""
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr ""
@@ -10917,9 +10944,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11284,6 +11308,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13135,6 +13162,9 @@ 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 ""
@@ -13531,6 +13561,9 @@ 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}."
+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 ""
@@ -14606,7 +14639,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15661,9 +15694,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16254,6 +16284,9 @@ msgstr[1] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16346,6 +16379,9 @@ 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 ""
diff --git a/locale/bn_IN/gitlab.po b/locale/bn_IN/gitlab.po
index 8e220736054..8c3512497e7 100644
--- a/locale/bn_IN/gitlab.po
+++ b/locale/bn_IN/gitlab.po
@@ -858,9 +858,27 @@ 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 ""
@@ -3483,9 +3501,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3495,6 +3510,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4745,6 +4763,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5695,12 +5716,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr ""
-
-msgid "FirstPushedBy|pushed by"
-msgstr ""
-
msgid "Fixed date"
msgstr ""
@@ -6867,6 +6882,12 @@ 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 ""
@@ -8855,6 +8876,9 @@ msgstr ""
msgid "No repository"
msgstr ""
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8864,9 +8888,15 @@ msgstr ""
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9379,9 +9409,6 @@ msgstr ""
msgid "Pipeline"
msgstr ""
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr ""
@@ -10917,9 +10944,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11284,6 +11308,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13135,6 +13162,9 @@ 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 ""
@@ -13531,6 +13561,9 @@ 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}."
+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 ""
@@ -14606,7 +14639,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15661,9 +15694,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16254,6 +16284,9 @@ msgstr[1] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16346,6 +16379,9 @@ 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 ""
diff --git a/locale/ca_ES/gitlab.po b/locale/ca_ES/gitlab.po
index 7e7d6b18d6f..69c1971701f 100644
--- a/locale/ca_ES/gitlab.po
+++ b/locale/ca_ES/gitlab.po
@@ -858,9 +858,27 @@ 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 ""
@@ -3483,9 +3501,6 @@ msgstr "Registre de contenidors"
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3495,6 +3510,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4745,6 +4763,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5695,12 +5716,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr ""
-
-msgid "FirstPushedBy|pushed by"
-msgstr ""
-
msgid "Fixed date"
msgstr ""
@@ -6867,6 +6882,12 @@ msgstr ""
msgid "IP Address"
msgstr "Adreça IP"
+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 "Identificador"
@@ -8855,6 +8876,9 @@ msgstr ""
msgid "No repository"
msgstr ""
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8864,9 +8888,15 @@ msgstr ""
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9379,9 +9409,6 @@ msgstr ""
msgid "Pipeline"
msgstr ""
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr ""
@@ -10917,9 +10944,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11284,6 +11308,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13135,6 +13162,9 @@ 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 ""
@@ -13531,6 +13561,9 @@ 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}."
+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 ""
@@ -14606,7 +14639,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15661,9 +15694,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16254,6 +16284,9 @@ msgstr[1] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16346,6 +16379,9 @@ 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 ""
diff --git a/locale/cs_CZ/gitlab.po b/locale/cs_CZ/gitlab.po
index 0063738574c..2e072b2a16e 100644
--- a/locale/cs_CZ/gitlab.po
+++ b/locale/cs_CZ/gitlab.po
@@ -936,9 +936,27 @@ 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 ""
@@ -3579,9 +3597,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3591,6 +3606,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4843,6 +4861,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5795,12 +5816,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr ""
-
-msgid "FirstPushedBy|pushed by"
-msgstr ""
-
msgid "Fixed date"
msgstr ""
@@ -6969,6 +6984,12 @@ 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 ""
@@ -8965,6 +8986,9 @@ msgstr ""
msgid "No repository"
msgstr ""
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8974,9 +8998,15 @@ msgstr ""
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9491,9 +9521,6 @@ msgstr ""
msgid "Pipeline"
msgstr ""
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr ""
@@ -11031,9 +11058,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11402,6 +11426,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13259,6 +13286,9 @@ 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 ""
@@ -13655,6 +13685,9 @@ 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}."
+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 ""
@@ -14734,7 +14767,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15791,9 +15824,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16410,6 +16440,9 @@ msgstr[3] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16504,6 +16537,9 @@ 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 ""
diff --git a/locale/cy_GB/gitlab.po b/locale/cy_GB/gitlab.po
index 3c65f30b0d6..24ab2e96c78 100644
--- a/locale/cy_GB/gitlab.po
+++ b/locale/cy_GB/gitlab.po
@@ -1014,9 +1014,27 @@ 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 ""
@@ -3675,9 +3693,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3687,6 +3702,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4941,6 +4959,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5895,12 +5916,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr ""
-
-msgid "FirstPushedBy|pushed by"
-msgstr ""
-
msgid "Fixed date"
msgstr ""
@@ -7071,6 +7086,12 @@ 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 ""
@@ -9075,6 +9096,9 @@ msgstr ""
msgid "No repository"
msgstr ""
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -9084,9 +9108,15 @@ msgstr ""
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9603,9 +9633,6 @@ msgstr ""
msgid "Pipeline"
msgstr ""
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr ""
@@ -11145,9 +11172,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11520,6 +11544,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13383,6 +13410,9 @@ 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 ""
@@ -13779,6 +13809,9 @@ 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}."
+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 ""
@@ -14862,7 +14895,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15921,9 +15954,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16566,6 +16596,9 @@ msgstr[5] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16662,6 +16695,9 @@ 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 ""
diff --git a/locale/da_DK/gitlab.po b/locale/da_DK/gitlab.po
index 7cca186e1af..bada56b442a 100644
--- a/locale/da_DK/gitlab.po
+++ b/locale/da_DK/gitlab.po
@@ -858,9 +858,27 @@ 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 ""
@@ -3483,9 +3501,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3495,6 +3510,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4745,6 +4763,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5695,12 +5716,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr ""
-
-msgid "FirstPushedBy|pushed by"
-msgstr ""
-
msgid "Fixed date"
msgstr ""
@@ -6867,6 +6882,12 @@ 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 ""
@@ -8855,6 +8876,9 @@ msgstr ""
msgid "No repository"
msgstr ""
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8864,9 +8888,15 @@ msgstr ""
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9379,9 +9409,6 @@ msgstr ""
msgid "Pipeline"
msgstr ""
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr ""
@@ -10917,9 +10944,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11284,6 +11308,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13135,6 +13162,9 @@ 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 ""
@@ -13531,6 +13561,9 @@ 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}."
+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 ""
@@ -14606,7 +14639,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15661,9 +15694,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16254,6 +16284,9 @@ msgstr[1] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16346,6 +16379,9 @@ 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 ""
diff --git a/locale/de/gitlab.po b/locale/de/gitlab.po
index ca3bb88a10c..daf877d3cff 100644
--- a/locale/de/gitlab.po
+++ b/locale/de/gitlab.po
@@ -858,9 +858,27 @@ msgstr "'Shared Runners' für neue Projekte aktivieren"
msgid "AdminSettings|Environment variables are protected by default"
msgstr "Umgebungsvariablen sind standardmäßig geschützt"
+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 "Gib eine Domain an, die standardmäßig für die Auto-Review-Anwendungen- und Auto-Bereitstsellungs-Phasen jedes Projekts verwendet werden soll."
+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 "Eine neu erstellte Umgebungsvariable ist standardmäßig geschützt."
@@ -3483,9 +3501,6 @@ msgstr "Container-Registry"
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-msgstr "Erstellt"
-
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:"
@@ -3495,6 +3510,9 @@ msgstr "GitLab unterstützt bis zu 3 Ebenen von Image-Namen. Die folgenden Beisp
msgid "ContainerRegistry|How to use the Container Registry"
msgstr "Wie man die Container-Registry verwendet"
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr "Erfahre mehr über"
@@ -4745,6 +4763,9 @@ msgstr "Endet am (UTC)"
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5695,12 +5716,6 @@ msgstr "Fertiggestellt"
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr "Erster"
-
-msgid "FirstPushedBy|pushed by"
-msgstr "gepusht von"
-
msgid "Fixed date"
msgstr "Fester Termin"
@@ -6867,6 +6882,12 @@ msgstr "Review"
msgid "IP Address"
msgstr "IP-Adresse"
+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 "Identifikator"
@@ -8855,6 +8876,9 @@ msgstr "Keine Pushs für den ausgewählten Zeitraum."
msgid "No repository"
msgstr "Kein Repository"
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr "Keine Runner gefunden"
@@ -8864,9 +8888,15 @@ msgstr "Keine Zeitpläne"
msgid "No start date"
msgstr ""
+msgid "No value set by top-level parent group."
+msgstr ""
+
msgid "No, directly import the existing email addresses and usernames."
msgstr "Nein, importiere die vorhandenen E-Mail-Adressen und Benutzernamen direkt."
+msgid "No, not interested right now"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -9379,9 +9409,6 @@ msgstr ""
msgid "Pipeline"
msgstr "Pipeline"
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr "Zeitplan der Pipeline"
@@ -10917,9 +10944,6 @@ msgstr ""
msgid "Registry"
msgstr "Registry"
-msgid "Related Commits"
-msgstr "Zugehörige Commits"
-
msgid "Related Deployed Jobs"
msgstr "Zugehörige Bereitstellungsjobs"
@@ -11284,6 +11308,9 @@ msgstr "Antwortmesswerte (NGINX)"
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr "Fortsetzen"
@@ -13135,6 +13162,9 @@ 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 ""
@@ -13531,6 +13561,9 @@ 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}."
+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 ""
@@ -14606,7 +14639,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15661,9 +15694,6 @@ msgstr ""
msgid "Your Groups"
msgstr "Deine Gruppen"
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr "Die Informationen zu deinem Kubernetes-Cluster auf dieser Seite können weiterhin bearbeitet werden. Es wird jedoch empfohlen, die Konfiguration zu deaktivieren und neu zu konfigurieren"
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16254,6 +16284,9 @@ msgstr[1] "Instanzen abgeschlossen"
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16346,6 +16379,9 @@ msgstr "%{metricsLinkStart} Speicherauslastung %{metricsLinkEnd} %{emphasisStart
msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage is %{emphasisStart} unchanged %{emphasisEnd} at %{memoryFrom}MB"
msgstr "%{metricsLinkStart} Speicherauslastung %{metricsLinkEnd} ist %{emphasisStart} unverändert %{emphasisEnd} bei %{memoryFrom} MB"
+msgid "mrWidget|Added to the merge train at position %{mergeTrainPosition}"
+msgstr ""
+
msgid "mrWidget|Added to the merge train by"
msgstr ""
diff --git a/locale/el_GR/gitlab.po b/locale/el_GR/gitlab.po
index 538d5406c9b..f2d8321020c 100644
--- a/locale/el_GR/gitlab.po
+++ b/locale/el_GR/gitlab.po
@@ -858,9 +858,27 @@ 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 ""
@@ -3483,9 +3501,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3495,6 +3510,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4745,6 +4763,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5695,12 +5716,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr ""
-
-msgid "FirstPushedBy|pushed by"
-msgstr ""
-
msgid "Fixed date"
msgstr ""
@@ -6867,6 +6882,12 @@ 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 ""
@@ -8855,6 +8876,9 @@ msgstr ""
msgid "No repository"
msgstr ""
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8864,9 +8888,15 @@ msgstr ""
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9379,9 +9409,6 @@ msgstr ""
msgid "Pipeline"
msgstr ""
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr ""
@@ -10917,9 +10944,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11284,6 +11308,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13135,6 +13162,9 @@ 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 ""
@@ -13531,6 +13561,9 @@ 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}."
+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 ""
@@ -14606,7 +14639,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15661,9 +15694,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16254,6 +16284,9 @@ msgstr[1] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16346,6 +16379,9 @@ 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 ""
diff --git a/locale/eo/gitlab.po b/locale/eo/gitlab.po
index 1747c758133..7960be28abd 100644
--- a/locale/eo/gitlab.po
+++ b/locale/eo/gitlab.po
@@ -858,9 +858,27 @@ 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 ""
@@ -3483,9 +3501,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3495,6 +3510,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4745,6 +4763,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5695,12 +5716,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr "Unue"
-
-msgid "FirstPushedBy|pushed by"
-msgstr "alpuÅita de"
-
msgid "Fixed date"
msgstr ""
@@ -6867,6 +6882,12 @@ 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 ""
@@ -8855,6 +8876,9 @@ msgstr ""
msgid "No repository"
msgstr "Ne estas deponejo"
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8864,9 +8888,15 @@ msgstr "Ne estas planoj"
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9379,9 +9409,6 @@ msgstr ""
msgid "Pipeline"
msgstr "Ĉenstablo"
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr "Ĉenstabla plano"
@@ -10917,9 +10944,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr "Rilataj enmetadoj"
-
msgid "Related Deployed Jobs"
msgstr "Rilataj disponigitaj taskoj"
@@ -11284,6 +11308,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13135,6 +13162,9 @@ 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 ""
@@ -13531,6 +13561,9 @@ 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}."
+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 ""
@@ -14606,7 +14639,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15661,9 +15694,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16254,6 +16284,9 @@ msgstr[1] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16346,6 +16379,9 @@ 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 ""
diff --git a/locale/es/gitlab.po b/locale/es/gitlab.po
index b6391526033..ca2c3450b4d 100644
--- a/locale/es/gitlab.po
+++ b/locale/es/gitlab.po
@@ -706,7 +706,7 @@ msgid "Add an SSH key"
msgstr "Añadir una clave SSH"
msgid "Add an issue"
-msgstr ""
+msgstr "Agregar una incidencia"
msgid "Add approvers"
msgstr "Añadir aprobadores"
@@ -858,9 +858,27 @@ msgstr "Habilitar ejecutores compartidos para los nuevos proyectos"
msgid "AdminSettings|Environment variables are protected by default"
msgstr "Las variables de entorno están protegidas por defecto"
+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 "Especifique un dominio para utilizar por defecto durante las etapas despliegue automático de cada proyecto y las de los mismos."
+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 "Cuando crea una nueva variable de entorno, se protegerá por defecto."
@@ -1714,10 +1732,10 @@ msgid "AutoDevOps|The Auto DevOps pipeline has been enabled and will be used if
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 "Automatic certificate management using %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
-msgstr ""
+msgstr "Gestión automática de los certificados utilizando %{lets_encrypt_link_start}Let's Encrypt%{lets_encrypt_link_end}"
msgid "Automatic certificate management using Let's Encrypt"
-msgstr ""
+msgstr "Gestión automática de los certificados utilizando Let's Encrypt"
msgid "Automatically marked as default internal user"
msgstr "Marcado automáticamente como usuario interno por defecto"
@@ -1988,10 +2006,10 @@ msgid "Boards"
msgstr "Tableros"
msgid "Boards|Edit board"
-msgstr ""
+msgstr "Editar tablero"
msgid "Boards|View scope"
-msgstr ""
+msgstr "Ver alcance"
msgid "Branch %{branchName} was not found in this project's repository."
msgstr "No se encontró la rama %{branchName} en el repositorio de este proyecto."
@@ -2120,10 +2138,10 @@ msgid "Branches|To avoid data loss, consider merging this branch before deleting
msgstr "Para evitar pérdida de datos, considere hacer un merge request de esta rama antes de borrarla."
msgid "Branches|To confirm, type %{branch_name_confirmation}:"
-msgstr ""
+msgstr "Para confirmar, teclee %{branch_name_confirmation}:"
msgid "Branches|To discard the local changes and overwrite the branch with the upstream version, delete it here and choose 'Update Now' above."
-msgstr ""
+msgstr "Para descartar los cambios locales y sobreescribir la rama actual en el servidor, elimínela aquí y seleccione 'Actualizar ahora' en el enlace situado la parte superior."
msgid "Branches|You’re about to permanently delete the protected branch %{branch_name}."
msgstr "Va a eliminar de forma permanente la rama protegida %{branch_name}."
@@ -2645,7 +2663,7 @@ msgid "Click any <strong>project name</strong> in the project list below to navi
msgstr "Haga clic en cualquier <strong>nombre de proyecto</strong> en la lista de proyectos que se muestra a continuación para navegar hasta el hito de proyecto correspondiente."
msgid "Click here"
-msgstr ""
+msgstr "Haga click aquí"
msgid "Click the <strong>Download</strong> button and wait for downloading to complete."
msgstr "Haga click en el botón <strong>Descargar</strong> y espere a que se complete la descarga."
@@ -2726,7 +2744,7 @@ msgid "ClusterIntegration|%{title} uninstalled successfully."
msgstr "%{title} desinstalado correctamente."
msgid "ClusterIntegration|%{title} updated successfully."
-msgstr ""
+msgstr "%{title} actualizado correctamente."
msgid "ClusterIntegration|A service token scoped to %{code}kube-system%{end_code} with %{code}cluster-admin%{end_code} privileges."
msgstr ""
@@ -3436,7 +3454,7 @@ msgid "Confirm"
msgstr "Confirmar"
msgid "Confirmation email sent to %{email}"
-msgstr ""
+msgstr "Email de confirmación enviado a %{email}"
msgid "Confirmation required"
msgstr "Se requiere confirmación"
@@ -3483,9 +3501,6 @@ msgstr "Registro de contenedores"
msgid "Container registry images"
msgstr "Imágenes del registro de contenedores"
-msgid "ContainerRegistry|Created"
-msgstr "Creado"
-
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}:"
@@ -3495,6 +3510,9 @@ msgstr "Gitlab soporta hasta 3 niveles para nombres de imágenes. Los siguientes
msgid "ContainerRegistry|How to use the Container Registry"
msgstr "Cómo utilizar el registro de contenedores"
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr "Conozca más sobre"
@@ -3988,7 +4006,7 @@ msgid "Default issue template"
msgstr "Plantilla de incidencia por defecto"
msgid "Default project deletion protection"
-msgstr ""
+msgstr "Protección por defecto de eliminación de proyectos"
msgid "Default: Directly import the Google Code email address or username"
msgstr "Por defecto: Importar directamente el nombre de usuario o la dirección de correo electrónico de Google Code"
@@ -4078,37 +4096,37 @@ msgid "Deny"
msgstr "Denegar"
msgid "Dependencies"
-msgstr ""
+msgstr "Dependencias"
msgid "Dependencies|Component"
-msgstr ""
+msgstr "Componente"
msgid "Dependencies|Component name"
-msgstr ""
+msgstr "Nombre del componente"
msgid "Dependencies|Export as JSON"
-msgstr ""
+msgstr "Exportar como JSON"
msgid "Dependencies|Job failed to generate the dependency list"
-msgstr ""
+msgstr "El trabajo ha fallado al generar la lista de dependencias"
msgid "Dependencies|Location"
-msgstr ""
+msgstr "Ubicación"
msgid "Dependencies|Packager"
-msgstr ""
+msgstr "Empaquetador"
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 ""
+msgstr "Ficheros no admitidos detectados"
msgid "Dependencies|Version"
-msgstr ""
+msgstr "Versión"
msgid "Dependency List"
-msgstr ""
+msgstr "Lista de dependencias"
msgid "Dependency Proxy"
msgstr "Proxy de dependencias"
@@ -4745,6 +4763,9 @@ 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"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr "Introduzca al menos tres caracteres para buscar"
@@ -5695,12 +5716,6 @@ msgstr "Finalizado"
msgid "First day of the week"
msgstr "Primer día de la semana"
-msgid "FirstPushedBy|First"
-msgstr "Primer"
-
-msgid "FirstPushedBy|pushed by"
-msgstr "enviado por"
-
msgid "Fixed date"
msgstr "Fecha fija"
@@ -6867,6 +6882,12 @@ msgstr "Revisión"
msgid "IP Address"
msgstr "Direccion IP"
+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 "Identificador"
@@ -8855,6 +8876,9 @@ msgstr "No hay pushes para el período de tiempo seleccionado."
msgid "No repository"
msgstr "No hay repositorio"
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr "No se encontraron ejecutores"
@@ -8864,9 +8888,15 @@ msgstr "No hay programaciones"
msgid "No start date"
msgstr "Sin fecha de inicio"
+msgid "No value set by top-level parent group."
+msgstr ""
+
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 ""
+
msgid "Node was successfully created."
msgstr "El nodo se ha creado correctamente."
@@ -9379,9 +9409,6 @@ msgstr "Código pin"
msgid "Pipeline"
msgstr "Pipeline"
-msgid "Pipeline ID (IID)"
-msgstr "ID del pipeline (IID)"
-
msgid "Pipeline Schedule"
msgstr "Programación del Pipeline"
@@ -10917,9 +10944,6 @@ msgstr "Registro"
msgid "Registry"
msgstr "Registro"
-msgid "Related Commits"
-msgstr "Cambios Relacionados"
-
msgid "Related Deployed Jobs"
msgstr "Trabajos Desplegados Relacionados"
@@ -11284,6 +11308,9 @@ msgstr "Respuesta métricas (NGINX)"
msgid "Restart Terminal"
msgstr "Reiniciar el terminal"
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr "Reanudar"
@@ -13135,6 +13162,9 @@ 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."
@@ -13531,6 +13561,9 @@ 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}."
+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."
@@ -14606,7 +14639,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15661,9 +15694,6 @@ msgstr "Sus claves GPG (%{count})"
msgid "Your Groups"
msgstr "Sus grupos"
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr "La información del cluster de Kubernetes en esta página aún se puede editar, pero se recomienda desactivarla y modificar"
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16254,6 +16284,9 @@ msgstr[1] "instancias completadas"
msgid "invalid milestone state `%{state}`"
msgstr "estado del hito invalido '%{state}'"
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr "está habilitado."
@@ -16346,6 +16379,9 @@ msgstr "Uso de %{metricsLinkStart} memoria %{metricsLinkEnd} %{emphasisStart} in
msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage is %{emphasisStart} unchanged %{emphasisEnd} at %{memoryFrom}MB"
msgstr "%{metricsLinkStart} El uso de la memoria %{metricsLinkEnd} es %{emphasisStart} sin cambios %{emphasisEnd} en %{memoryFrom}MB"
+msgid "mrWidget|Added to the merge train at position %{mergeTrainPosition}"
+msgstr ""
+
msgid "mrWidget|Added to the merge train by"
msgstr ""
diff --git a/locale/et_EE/gitlab.po b/locale/et_EE/gitlab.po
index 0733ebe4adf..f1ed6ff3630 100644
--- a/locale/et_EE/gitlab.po
+++ b/locale/et_EE/gitlab.po
@@ -858,9 +858,27 @@ 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 ""
@@ -3483,9 +3501,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3495,6 +3510,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4745,6 +4763,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5695,12 +5716,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr ""
-
-msgid "FirstPushedBy|pushed by"
-msgstr ""
-
msgid "Fixed date"
msgstr ""
@@ -6867,6 +6882,12 @@ 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 ""
@@ -8855,6 +8876,9 @@ msgstr ""
msgid "No repository"
msgstr ""
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8864,9 +8888,15 @@ msgstr ""
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9379,9 +9409,6 @@ msgstr ""
msgid "Pipeline"
msgstr ""
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr ""
@@ -10917,9 +10944,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11284,6 +11308,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13135,6 +13162,9 @@ 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 ""
@@ -13531,6 +13561,9 @@ 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}."
+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 ""
@@ -14606,7 +14639,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15661,9 +15694,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16254,6 +16284,9 @@ msgstr[1] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16346,6 +16379,9 @@ 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 ""
diff --git a/locale/fil_PH/gitlab.po b/locale/fil_PH/gitlab.po
index c705b1680fe..30b0e53ea19 100644
--- a/locale/fil_PH/gitlab.po
+++ b/locale/fil_PH/gitlab.po
@@ -858,9 +858,27 @@ 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 ""
@@ -3483,9 +3501,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3495,6 +3510,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4745,6 +4763,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5695,12 +5716,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr ""
-
-msgid "FirstPushedBy|pushed by"
-msgstr ""
-
msgid "Fixed date"
msgstr ""
@@ -6867,6 +6882,12 @@ 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 ""
@@ -8855,6 +8876,9 @@ msgstr ""
msgid "No repository"
msgstr ""
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8864,9 +8888,15 @@ msgstr ""
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9379,9 +9409,6 @@ msgstr ""
msgid "Pipeline"
msgstr ""
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr ""
@@ -10917,9 +10944,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11284,6 +11308,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13135,6 +13162,9 @@ 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 ""
@@ -13531,6 +13561,9 @@ 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}."
+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 ""
@@ -14606,7 +14639,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15661,9 +15694,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16254,6 +16284,9 @@ msgstr[1] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16346,6 +16379,9 @@ 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 ""
diff --git a/locale/fr/gitlab.po b/locale/fr/gitlab.po
index b1870856c52..12edcf96cff 100644
--- a/locale/fr/gitlab.po
+++ b/locale/fr/gitlab.po
@@ -858,9 +858,27 @@ 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 "Spécifiez un domaine à utiliser par défaut pour les étapes Auto Review Apps et Auto Deploy de chaque projet."
+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 ""
@@ -3483,9 +3501,6 @@ msgstr "Registre de conteneur"
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-msgstr "Créé"
-
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} :"
@@ -3495,6 +3510,9 @@ msgstr "GitLab prend en charge jusqu’à trois niveaux de noms d’image. Les e
msgid "ContainerRegistry|How to use the Container Registry"
msgstr "Comment utiliser le registre de conteneur"
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr "En savoir plus sur"
@@ -4745,6 +4763,9 @@ msgstr "Se termine à (UTC)"
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5695,12 +5716,6 @@ msgstr "Terminé"
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr "En premier"
-
-msgid "FirstPushedBy|pushed by"
-msgstr "poussé par"
-
msgid "Fixed date"
msgstr "Date fixée"
@@ -6867,6 +6882,12 @@ msgstr "Examiner"
msgid "IP Address"
msgstr "Adresse IP"
+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 "Identifiant"
@@ -8855,6 +8876,9 @@ msgstr "Rien n’a été poussé vers GIt durant la période sélectionnée."
msgid "No repository"
msgstr "Aucun dépôt"
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr "Aucun exécuteur trouvé"
@@ -8864,9 +8888,15 @@ msgstr "Aucune planification"
msgid "No start date"
msgstr ""
+msgid "No value set by top-level parent group."
+msgstr ""
+
msgid "No, directly import the existing email addresses and usernames."
msgstr "Non, importer directement les adresses de courriel et les noms d’utilisateur existants."
+msgid "No, not interested right now"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -9379,9 +9409,6 @@ msgstr ""
msgid "Pipeline"
msgstr "Pipeline"
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr "Planification de pipeline"
@@ -10917,9 +10944,6 @@ msgstr ""
msgid "Registry"
msgstr "Registre"
-msgid "Related Commits"
-msgstr "Commits liés"
-
msgid "Related Deployed Jobs"
msgstr "Tâches déployées liées"
@@ -11284,6 +11308,9 @@ msgstr "Métriques de réponse (nginx)"
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr "Reprendre"
@@ -13135,6 +13162,9 @@ 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 ""
@@ -13531,6 +13561,9 @@ 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}."
+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 ""
@@ -14606,7 +14639,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15661,9 +15694,6 @@ msgstr ""
msgid "Your Groups"
msgstr "Vos groupes"
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr "Vos informations de cluster Kubernetes sur cette page sont toujours modifiables, mais il est conseillé de désactiver et reconfigurer"
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16254,6 +16284,9 @@ msgstr[1] "instances terminées"
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16346,6 +16379,9 @@ msgstr "%{metricsLinkStart}L’usage mémoire%{metricsLinkEnd} %{emphasisStart}a
msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage is %{emphasisStart} unchanged %{emphasisEnd} at %{memoryFrom}MB"
msgstr "%{metricsLinkStart}L’usage mémoire%{metricsLinkEnd} %{emphasisStart}est resté stable%{emphasisEnd} à %{memoryFrom}MO"
+msgid "mrWidget|Added to the merge train at position %{mergeTrainPosition}"
+msgstr ""
+
msgid "mrWidget|Added to the merge train by"
msgstr ""
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index 0cabaeabb9a..84f785de0c2 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -4408,9 +4408,6 @@ msgstr ""
msgid "February"
msgstr ""
-msgid "Fields on this page are now uneditable, you can configure"
-msgstr ""
-
msgid "File"
msgid_plural "Files"
msgstr[0] ""
@@ -5645,7 +5642,7 @@ 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 "Kubernetes service integration has been disabled. Fields on this page are not used by GitLab, you can configure your Kubernetes clusters using the new <a href=\"%{url}\"/>Kubernetes Clusters</a> page"
msgstr ""
msgid "LFS"
@@ -9140,6 +9137,9 @@ msgstr ""
msgid "Show comments only"
msgstr ""
+msgid "Show commit description"
+msgstr ""
+
msgid "Show complete raw log"
msgstr ""
@@ -9942,9 +9942,6 @@ 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 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 ""
@@ -9999,7 +9996,7 @@ 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>."
+msgid "The instance-level Kubernetes service integration is disabled. Your data has been migrated to an <a href=\"%{url}\"/>instance-level cluster</a>."
msgstr ""
msgid "The invitation could not be accepted."
@@ -10278,9 +10275,6 @@ 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 commit is part of merge request %{link_to_merge_request}. Comments created here will be created in the context of that merge request."
msgstr ""
diff --git a/locale/gl_ES/gitlab.po b/locale/gl_ES/gitlab.po
index 647ec18bd1e..880d0f2e9a9 100644
--- a/locale/gl_ES/gitlab.po
+++ b/locale/gl_ES/gitlab.po
@@ -858,9 +858,27 @@ 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 ""
@@ -3483,9 +3501,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3495,6 +3510,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4745,6 +4763,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5695,12 +5716,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr ""
-
-msgid "FirstPushedBy|pushed by"
-msgstr ""
-
msgid "Fixed date"
msgstr ""
@@ -6867,6 +6882,12 @@ 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 ""
@@ -8855,6 +8876,9 @@ msgstr ""
msgid "No repository"
msgstr ""
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8864,9 +8888,15 @@ msgstr ""
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9379,9 +9409,6 @@ msgstr ""
msgid "Pipeline"
msgstr ""
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr ""
@@ -10917,9 +10944,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11284,6 +11308,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13135,6 +13162,9 @@ 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 ""
@@ -13531,6 +13561,9 @@ 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}."
+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 ""
@@ -14606,7 +14639,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15661,9 +15694,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16254,6 +16284,9 @@ msgstr[1] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16346,6 +16379,9 @@ 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 ""
diff --git a/locale/he_IL/gitlab.po b/locale/he_IL/gitlab.po
index 5ae83a3e4d3..dcfe3ceb8a3 100644
--- a/locale/he_IL/gitlab.po
+++ b/locale/he_IL/gitlab.po
@@ -936,9 +936,27 @@ 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 ""
@@ -3579,9 +3597,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3591,6 +3606,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4843,6 +4861,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5795,12 +5816,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr ""
-
-msgid "FirstPushedBy|pushed by"
-msgstr ""
-
msgid "Fixed date"
msgstr ""
@@ -6969,6 +6984,12 @@ 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 ""
@@ -8965,6 +8986,9 @@ msgstr ""
msgid "No repository"
msgstr ""
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8974,9 +8998,15 @@ msgstr ""
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9491,9 +9521,6 @@ msgstr ""
msgid "Pipeline"
msgstr ""
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr ""
@@ -11031,9 +11058,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11402,6 +11426,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13259,6 +13286,9 @@ 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 ""
@@ -13655,6 +13685,9 @@ 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}."
+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 ""
@@ -14734,7 +14767,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15791,9 +15824,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16410,6 +16440,9 @@ msgstr[3] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16504,6 +16537,9 @@ 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 ""
diff --git a/locale/hi_IN/gitlab.po b/locale/hi_IN/gitlab.po
index f1c03c61435..76b060f25c3 100644
--- a/locale/hi_IN/gitlab.po
+++ b/locale/hi_IN/gitlab.po
@@ -858,9 +858,27 @@ 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 ""
@@ -3483,9 +3501,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3495,6 +3510,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4745,6 +4763,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5695,12 +5716,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr ""
-
-msgid "FirstPushedBy|pushed by"
-msgstr ""
-
msgid "Fixed date"
msgstr ""
@@ -6867,6 +6882,12 @@ 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 ""
@@ -8855,6 +8876,9 @@ msgstr ""
msgid "No repository"
msgstr ""
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8864,9 +8888,15 @@ msgstr ""
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9379,9 +9409,6 @@ msgstr ""
msgid "Pipeline"
msgstr ""
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr ""
@@ -10917,9 +10944,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11284,6 +11308,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13135,6 +13162,9 @@ 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 ""
@@ -13531,6 +13561,9 @@ 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}."
+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 ""
@@ -14606,7 +14639,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15661,9 +15694,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16254,6 +16284,9 @@ msgstr[1] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16346,6 +16379,9 @@ 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 ""
diff --git a/locale/hr_HR/gitlab.po b/locale/hr_HR/gitlab.po
index 6d81a3b7447..ae4a40dd8f7 100644
--- a/locale/hr_HR/gitlab.po
+++ b/locale/hr_HR/gitlab.po
@@ -897,9 +897,27 @@ 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 ""
@@ -3531,9 +3549,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3543,6 +3558,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4794,6 +4812,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5745,12 +5766,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr ""
-
-msgid "FirstPushedBy|pushed by"
-msgstr ""
-
msgid "Fixed date"
msgstr ""
@@ -6918,6 +6933,12 @@ 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 ""
@@ -8910,6 +8931,9 @@ msgstr ""
msgid "No repository"
msgstr ""
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8919,9 +8943,15 @@ msgstr ""
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9435,9 +9465,6 @@ msgstr ""
msgid "Pipeline"
msgstr ""
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr ""
@@ -10974,9 +11001,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11343,6 +11367,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13197,6 +13224,9 @@ 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 ""
@@ -13593,6 +13623,9 @@ 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}."
+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 ""
@@ -14670,7 +14703,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15726,9 +15759,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16332,6 +16362,9 @@ msgstr[2] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16425,6 +16458,9 @@ 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 ""
diff --git a/locale/hu_HU/gitlab.po b/locale/hu_HU/gitlab.po
index d2a8e28c75a..131782290b2 100644
--- a/locale/hu_HU/gitlab.po
+++ b/locale/hu_HU/gitlab.po
@@ -858,9 +858,27 @@ 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 ""
@@ -3483,9 +3501,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3495,6 +3510,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4745,6 +4763,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5695,12 +5716,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr ""
-
-msgid "FirstPushedBy|pushed by"
-msgstr ""
-
msgid "Fixed date"
msgstr ""
@@ -6867,6 +6882,12 @@ 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 ""
@@ -8855,6 +8876,9 @@ msgstr ""
msgid "No repository"
msgstr ""
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8864,9 +8888,15 @@ msgstr ""
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9379,9 +9409,6 @@ msgstr ""
msgid "Pipeline"
msgstr ""
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr ""
@@ -10917,9 +10944,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11284,6 +11308,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13135,6 +13162,9 @@ 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 ""
@@ -13531,6 +13561,9 @@ 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}."
+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 ""
@@ -14606,7 +14639,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15661,9 +15694,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16254,6 +16284,9 @@ msgstr[1] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16346,6 +16379,9 @@ 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 ""
diff --git a/locale/id_ID/gitlab.po b/locale/id_ID/gitlab.po
index 5c7497673dd..f1680909623 100644
--- a/locale/id_ID/gitlab.po
+++ b/locale/id_ID/gitlab.po
@@ -819,9 +819,27 @@ 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 ""
@@ -3435,9 +3453,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3447,6 +3462,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4696,6 +4714,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5645,12 +5666,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr ""
-
-msgid "FirstPushedBy|pushed by"
-msgstr ""
-
msgid "Fixed date"
msgstr ""
@@ -6816,6 +6831,12 @@ 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 ""
@@ -8800,6 +8821,9 @@ msgstr ""
msgid "No repository"
msgstr ""
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8809,9 +8833,15 @@ msgstr ""
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9323,9 +9353,6 @@ msgstr ""
msgid "Pipeline"
msgstr ""
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr ""
@@ -10860,9 +10887,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11225,6 +11249,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13073,6 +13100,9 @@ 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 ""
@@ -13469,6 +13499,9 @@ 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}."
+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 ""
@@ -14542,7 +14575,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15596,9 +15629,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16176,6 +16206,9 @@ msgstr[0] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16267,6 +16300,9 @@ 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 ""
diff --git a/locale/it/gitlab.po b/locale/it/gitlab.po
index 48902ba3969..02fa65dfa10 100644
--- a/locale/it/gitlab.po
+++ b/locale/it/gitlab.po
@@ -858,9 +858,27 @@ 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 ""
@@ -3483,9 +3501,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3495,6 +3510,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4745,6 +4763,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5695,12 +5716,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr "Primo"
-
-msgid "FirstPushedBy|pushed by"
-msgstr "Push di"
-
msgid "Fixed date"
msgstr ""
@@ -6867,6 +6882,12 @@ 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 ""
@@ -8855,6 +8876,9 @@ msgstr ""
msgid "No repository"
msgstr "Nessuna Repository"
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8864,9 +8888,15 @@ msgstr "Nessuna pianificazione"
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9379,9 +9409,6 @@ msgstr ""
msgid "Pipeline"
msgstr "Pipeline"
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr "Pianificazione Pipeline"
@@ -10917,9 +10944,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr "Commit correlati"
-
msgid "Related Deployed Jobs"
msgstr "Attività di Rilascio Correlate"
@@ -11284,6 +11308,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13135,6 +13162,9 @@ 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 ""
@@ -13531,6 +13561,9 @@ 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}."
+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 ""
@@ -14606,7 +14639,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15661,9 +15694,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16254,6 +16284,9 @@ msgstr[1] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16346,6 +16379,9 @@ 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 ""
diff --git a/locale/ja/gitlab.po b/locale/ja/gitlab.po
index a8bea017870..8964d2081bf 100644
--- a/locale/ja/gitlab.po
+++ b/locale/ja/gitlab.po
@@ -270,7 +270,7 @@ msgid "%{text} is available"
msgstr "%{text} ãŒåˆ©ç”¨ã§ãã¾ã™ã€‚"
msgid "%{title} %{operator} %{threshold}"
-msgstr ""
+msgstr "%{title} %{operator} %{threshold}"
msgid "%{title} changes"
msgstr "%{title} ã®å¤‰æ›´"
@@ -819,9 +819,27 @@ msgstr "æ–°ã—ã„プロジェクトã§å…±æœ‰ Runner を有効ã«ã™ã‚‹"
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 "ã™ã¹ã¦ã®ãƒ—ロジェクトã®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 ""
+
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr "環境変数ã®æ–°è¦ä½œæˆæ™‚ã«ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§ä¿è­·ã•ã‚Œã¾ã™"
@@ -959,7 +977,7 @@ msgid "All users must have a name."
msgstr "ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«åå‰ãŒå¿…è¦ã§ã™ã€‚"
msgid "Allow \"%{group_name}\" to sign you in"
-msgstr ""
+msgstr "%{group_name} ã«ã‚µã‚¤ãƒ³ã‚¤ãƒ³ã‚’許å¯"
msgid "Allow commits from members who can merge to the target branch."
msgstr "ターゲットブランãƒã«ãƒžãƒ¼ã‚¸ã§ãるメンãƒãƒ¼ã‹ã‚‰ã®ã‚³ãƒŸãƒƒãƒˆã‚’許å¯ã—ã¾ã™ã€‚"
@@ -1473,7 +1491,7 @@ msgid "Are you sure you want to unlock %{path_lock_path}?"
msgstr "%{path_lock_path} ã®ãƒ­ãƒƒã‚¯ã‚’解除ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ"
msgid "Are you sure you want to unsubscribe from the %{type}: %{link_to_noteable_text}?"
-msgstr ""
+msgstr "%{type}: %{link_to_noteable_text} ã®è³¼èª­ã‚’解除ã—ã¦ã‚ˆã‚ã—ã„ã§ã™ã‹ï¼Ÿ"
msgid "Are you sure?"
msgstr "本当ã«ã‚ˆã‚ã—ã„ã§ã™ã‹ï¼Ÿ"
@@ -2379,7 +2397,7 @@ msgid "Checking branch availability..."
msgstr "ブランãƒãŒåˆ©ç”¨å¯èƒ½ã‹ç¢ºèªã—ã¦ã„ã¾ã™â€¦"
msgid "Checking username availability..."
-msgstr "ユーザーåãŒåˆ©ç”¨å¯èƒ½ã‹ç¢ºèªã—ã¦ã„ã¾ã™..."
+msgstr ""
msgid "Cherry-pick this commit"
msgstr "ã“ã®ã‚³ãƒŸãƒƒãƒˆã‚’ãƒã‚§ãƒªãƒ¼ãƒ”ック"
@@ -3435,9 +3453,6 @@ msgstr "コンテナレジストリ"
msgid "Container registry images"
msgstr "コンテナレジストリã®ã‚¤ãƒ¡ãƒ¼ã‚¸"
-msgid "ContainerRegistry|Created"
-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} を使用ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™:"
@@ -3447,6 +3462,9 @@ msgstr "GitLab ã§ã¯ã€æœ€å¤§ 3 ã¤ã®ãƒ¬ãƒ™ãƒ«ã®ã‚¤ãƒ¡ãƒ¼ã‚¸åをサãƒãƒ¼ãƒ
msgid "ContainerRegistry|How to use the Container Registry"
msgstr "コンテナレジストリ使用方法"
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr "詳細ã«ã¤ã„ã¦"
@@ -4696,6 +4714,9 @@ msgstr "終了時刻 (UTC)"
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr "å°‘ãªãã¨ã‚‚3文字以上ã§æ¤œç´¢ã—ã¦ãã ã•ã„"
@@ -5645,12 +5666,6 @@ msgstr "完了"
msgid "First day of the week"
msgstr "一週間ã®é–‹å§‹æ›œæ—¥"
-msgid "FirstPushedBy|First"
-msgstr "åˆå›ž"
-
-msgid "FirstPushedBy|pushed by"
-msgstr "プッシュã—ãŸäºº"
-
msgid "Fixed date"
msgstr ""
@@ -6816,6 +6831,12 @@ msgstr "レビュー"
msgid "IP Address"
msgstr "IP アドレス"
+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 "識別å­"
@@ -8800,6 +8821,9 @@ msgstr "é¸æŠžã—ãŸæœŸé–“ã«ãƒ—ッシュã¯ã‚ã‚Šã¾ã›ã‚“。"
msgid "No repository"
msgstr "リãƒã‚¸ãƒˆãƒªãŒã‚ã‚Šã¾ã›ã‚“"
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr "Runner ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
@@ -8809,9 +8833,15 @@ msgstr "スケジュールãªã—"
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9323,9 +9353,6 @@ msgstr ""
msgid "Pipeline"
msgstr "パイプライン"
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr "パイプラインスケジュール"
@@ -10860,9 +10887,6 @@ msgstr ""
msgid "Registry"
msgstr "レジストリ"
-msgid "Related Commits"
-msgstr "関連ã™ã‚‹ã‚³ãƒŸãƒƒãƒˆ"
-
msgid "Related Deployed Jobs"
msgstr "関連ã™ã‚‹ãƒ‡ãƒ—ロイ済ジョブ"
@@ -11225,6 +11249,9 @@ msgstr "レスãƒãƒ³ã‚¹ãƒ¡ãƒˆãƒªã‚¯ã‚¹ (NGINX)"
msgid "Restart Terminal"
msgstr "ターミナルをå†èµ·å‹•"
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr "å†é–‹"
@@ -11821,7 +11848,7 @@ msgid "Service URL"
msgstr "サービス URL"
msgid "Session duration (minutes)"
-msgstr ""
+msgstr "セッション期間 (分)"
msgid "Session expiration, projects limit and attachment size."
msgstr "セッションã®æœ‰åŠ¹æœŸé™ã€ãƒ—ロジェクトã®ä¸Šé™ã€æ·»ä»˜ãƒ•ã‚¡ã‚¤ãƒ«ã®ã‚µã‚¤ã‚º"
@@ -12134,13 +12161,13 @@ msgid "SnippetsEmptyState|There are no snippets to show."
msgstr "表示ã™ã‚‹ã‚¹ãƒ‹ãƒšãƒƒãƒˆã¯ã‚ã‚Šã¾ã›ã‚“。"
msgid "SnippetsEmptyState|They can be either public or private."
-msgstr ""
+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 this %{issueType} at the same time you did. The description has been updated and you will need to make your changes again."
-msgstr ""
+msgstr "ã‚ãªãŸã®ç·¨é›†ã¨åŒæ™‚ã«èª°ã‹ãŒã“ã® %{issueType} を編集ã—ãŸãŸã‚ã€èª¬æ˜ŽãŒæ›´æ–°ã•ã‚Œã¾ã—ãŸã€‚ã‚‚ã†ä¸€åº¦ç·¨é›†ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚"
msgid "Someone edited this merge request at the same time you did. Please refresh the page to see changes."
msgstr ""
@@ -12605,7 +12632,7 @@ msgid "SubscriptionTable|GitLab allows you to continue using your subscription e
msgstr ""
msgid "SubscriptionTable|GitLab.com %{planName} %{suffix}"
-msgstr ""
+msgstr "GitLab.com %{planName} %{suffix}"
msgid "SubscriptionTable|Last invoice"
msgstr ""
@@ -13073,6 +13100,9 @@ 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 ""
@@ -13440,7 +13470,7 @@ 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 ""
@@ -13469,6 +13499,9 @@ 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}."
+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 ""
@@ -13946,7 +13979,7 @@ msgid "Todo was successfully marked as done."
msgstr ""
msgid "Todos"
-msgstr ""
+msgstr "Todo"
msgid "Toggle Sidebar"
msgstr "サイドãƒãƒ¼ã‚’切り替ãˆ"
@@ -13997,7 +14030,7 @@ msgid "Too many changes to show."
msgstr ""
msgid "Topics"
-msgstr ""
+msgstr "トピック"
msgid "Total"
msgstr ""
@@ -14090,13 +14123,13 @@ msgid "Trigger variables:"
msgstr "トリガー変数:"
msgid "Trigger was created successfully."
-msgstr ""
+msgstr "トリガーã¯æ­£å¸¸ã«ä½œæˆã•ã‚Œã¾ã—ãŸã€‚"
msgid "Trigger was re-assigned."
msgstr ""
msgid "Trigger was successfully updated."
-msgstr ""
+msgstr "トリガーã¯æ­£å¸¸ã«æ›´æ–°ã•ã‚Œã¾ã—ãŸã€‚"
msgid "Triggerer"
msgstr "トリガー"
@@ -14542,7 +14575,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -14726,7 +14759,7 @@ msgid "UserProfile|This user hasn't contributed to any projects"
msgstr ""
msgid "UserProfile|View all"
-msgstr ""
+msgstr "ã™ã¹ã¦è¡¨ç¤º"
msgid "UserProfile|View user in admin area"
msgstr ""
@@ -14849,7 +14882,7 @@ msgid "View eligible approvers"
msgstr ""
msgid "View epics list"
-msgstr ""
+msgstr "エピックリストを表示"
msgid "View file @ "
msgstr "ファイルを表示 @ "
@@ -15411,7 +15444,7 @@ msgid "You cannot write to this read-only GitLab instance."
msgstr "ã“ã®èª­ã¿å–り専用 GitLab インスタンスã«ã¯æ›¸ã込むã“ã¨ãŒã§ãã¾ã›ã‚“。"
msgid "You could not create a new trigger."
-msgstr ""
+msgstr "æ–°ã—ã„トリガーを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
msgid "You could not take ownership of trigger."
msgstr ""
@@ -15596,9 +15629,6 @@ msgstr ""
msgid "Your Groups"
msgstr "所属グループ"
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã® Kubernetes クラスター情報ã¯ç·¨é›†å¯èƒ½ã§ã™ãŒã€ç„¡åŠ¹ã«ã—ã¦å†è¨­å®šã™ã‚‹ã“ã¨ã‚’推奨ã—ã¾ã™"
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16176,6 +16206,9 @@ msgstr[0] "インスタンスãŒå®Œäº†ã—ã¾ã—ãŸ"
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16195,7 +16228,7 @@ msgid "is out of the hierarchy of the Group owning the template"
msgstr ""
msgid "issue"
-msgstr ""
+msgstr "課題"
msgid "issue boards"
msgstr "課題ボード"
@@ -16267,6 +16300,9 @@ msgstr "%{metricsLinkStart} メモリ %{metricsLinkEnd} 使用率㌠%{memoryFro
msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage is %{emphasisStart} unchanged %{emphasisEnd} at %{memoryFrom}MB"
msgstr "%{metricsLinkStart} メモリ %{metricsLinkEnd} 使用率㯠%{memoryFrom} MB㧠%{emphasisStart} 変化ãªã— %{emphasisEnd}"
+msgid "mrWidget|Added to the merge train at position %{mergeTrainPosition}"
+msgstr ""
+
msgid "mrWidget|Added to the merge train by"
msgstr ""
diff --git a/locale/ka_GE/gitlab.po b/locale/ka_GE/gitlab.po
index 2fe4fbc9d55..5510c93d891 100644
--- a/locale/ka_GE/gitlab.po
+++ b/locale/ka_GE/gitlab.po
@@ -858,9 +858,27 @@ 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 ""
@@ -3483,9 +3501,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3495,6 +3510,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4745,6 +4763,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5695,12 +5716,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr ""
-
-msgid "FirstPushedBy|pushed by"
-msgstr ""
-
msgid "Fixed date"
msgstr ""
@@ -6867,6 +6882,12 @@ 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 ""
@@ -8855,6 +8876,9 @@ msgstr ""
msgid "No repository"
msgstr ""
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8864,9 +8888,15 @@ msgstr ""
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9379,9 +9409,6 @@ msgstr ""
msgid "Pipeline"
msgstr ""
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr ""
@@ -10917,9 +10944,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11284,6 +11308,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13135,6 +13162,9 @@ 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 ""
@@ -13531,6 +13561,9 @@ 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}."
+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 ""
@@ -14606,7 +14639,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15661,9 +15694,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16254,6 +16284,9 @@ msgstr[1] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16346,6 +16379,9 @@ 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 ""
diff --git a/locale/ko/gitlab.po b/locale/ko/gitlab.po
index a9b1d2f2f40..e9ae48c0a96 100644
--- a/locale/ko/gitlab.po
+++ b/locale/ko/gitlab.po
@@ -16,13 +16,13 @@ msgstr ""
"PO-Revision-Date: 2019-06-14 19:52\n"
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 " 그리고"
@@ -61,7 +61,7 @@ msgstr "%dê°œì˜ ì»¤ë°‹"
msgid "%d contribution"
msgid_plural "%d contributions"
-msgstr[0] ""
+msgstr[0] "%d 기여"
msgid "%d exporter"
msgid_plural "%d exporters"
@@ -101,7 +101,7 @@ msgstr[0] "%d 측정치"
msgid "%d more comment"
msgid_plural "%d more comments"
-msgstr[0] ""
+msgstr[0] "%d 댓글 ë” ë³´ê¸°"
msgid "%d staged change"
msgid_plural "%d staged changes"
@@ -129,10 +129,10 @@ msgstr ""
msgid "%{count} approval required from %{name}"
msgid_plural "%{count} approvals required from %{name}"
-msgstr[0] ""
+msgstr[0] "%{name}ì—게서 %{count} ê±´ì— ëŒ€í•œ 승ì¸ì„ 요청받ìŒ"
msgid "%{count} approvals from %{name}"
-msgstr ""
+msgstr "%{name}께서 %{count} ê±´ì˜ ìŠ¹ì¸"
msgid "%{count} more"
msgstr "%{count} ê°œ ë”보기"
@@ -141,7 +141,7 @@ msgid "%{count} more assignees"
msgstr "%{count}ëª…ì˜ ë‹´ë‹¹ìž"
msgid "%{count} of %{required} approvals from %{name}"
-msgstr ""
+msgstr "%{name}ë‹˜ì´ %{required} 중 %{count} 승ì¸"
msgid "%{count} of %{total}"
msgstr "%{total} 중 %{count}"
@@ -819,9 +819,27 @@ 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 "새 환경 변수를 작성할 ë•Œ 기본ì ìœ¼ë¡œ 보호ë©ë‹ˆë‹¤."
@@ -3435,9 +3453,6 @@ msgstr "컨테ì´ë„ˆ 레지스트리"
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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} 를 사용해야 합니다."
@@ -3447,6 +3462,9 @@ msgstr "GitLabì€ ì´ë¯¸ì§€ ì´ë¦„ì— ìµœëŒ€ 3 ë ˆë²¨ì„ ì§€ì›í•©ë‹ˆë‹¤. 다ìŒ
msgid "ContainerRegistry|How to use the Container Registry"
msgstr "컨테ì´ë„ˆ 레지스트리를 사용 하는 방법"
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr "ë” ì•Œì•„ë³´ê¸°"
@@ -4696,6 +4714,9 @@ msgstr "(UTC)ì— ì¢…ë£Œë©ë‹ˆë‹¤"
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5645,12 +5666,6 @@ msgstr "완료"
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr "처ìŒ"
-
-msgid "FirstPushedBy|pushed by"
-msgstr "푸시한 사용ìž"
-
msgid "Fixed date"
msgstr "수정 날짜"
@@ -6816,6 +6831,12 @@ msgstr "리뷰"
msgid "IP Address"
msgstr "IP 주소"
+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 "ì‹ë³„ìž"
@@ -8800,6 +8821,9 @@ msgstr "ì„ íƒí•œ 기간 ë™ì•ˆ 푸시하지 않습니다."
msgid "No repository"
msgstr "저장소 ì—†ìŒ"
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr "Runners ì—†ìŒ"
@@ -8809,9 +8833,15 @@ msgstr "ì¼ì • ì—†ìŒ"
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9323,9 +9353,6 @@ msgstr ""
msgid "Pipeline"
msgstr "파ì´í”„ë¼ì¸"
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr "파ì´í”„ë¼ì¸ 스케쥴"
@@ -10860,9 +10887,6 @@ msgstr ""
msgid "Registry"
msgstr "레지스트리"
-msgid "Related Commits"
-msgstr "관련 커밋"
-
msgid "Related Deployed Jobs"
msgstr "관련 ë°°í¬ ëœ ìž‘ì—…"
@@ -11225,6 +11249,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr "재개"
@@ -13073,6 +13100,9 @@ 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 ""
@@ -13469,6 +13499,9 @@ 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}."
+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 ""
@@ -14542,7 +14575,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15596,9 +15629,6 @@ msgstr ""
msgid "Your Groups"
msgstr "ë‚˜ì˜ ê·¸ë£¹ë“¤"
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr "ì´ íŽ˜ì´ì§€ì—ì„œ Kubernetes í´ëŸ¬ìŠ¤í„° 정보를 계ì†í•´ì„œ 편집할 수 있지만, 비활성화 하거나 재설정하는 ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤."
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16176,6 +16206,9 @@ msgstr[0] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16267,6 +16300,9 @@ msgstr "%{metricsLinkStart} 메모리 사용률 %{metricsLinkEnd} ì´ %{memoryFr
msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage is %{emphasisStart} unchanged %{emphasisEnd} at %{memoryFrom}MB"
msgstr "%{metricsLinkStart} 메모리 사용률 %{metricsLinkEnd} ì´ %{memoryFrom}MB ì—ì„œ %{emphasisStart} 변하지 않았습니다. %{emphasisEnd}"
+msgid "mrWidget|Added to the merge train at position %{mergeTrainPosition}"
+msgstr ""
+
msgid "mrWidget|Added to the merge train by"
msgstr ""
diff --git a/locale/mn_MN/gitlab.po b/locale/mn_MN/gitlab.po
index ba9868f8fd2..3e127d662ab 100644
--- a/locale/mn_MN/gitlab.po
+++ b/locale/mn_MN/gitlab.po
@@ -858,9 +858,27 @@ 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 ""
@@ -3483,9 +3501,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3495,6 +3510,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4745,6 +4763,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5695,12 +5716,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr ""
-
-msgid "FirstPushedBy|pushed by"
-msgstr ""
-
msgid "Fixed date"
msgstr ""
@@ -6867,6 +6882,12 @@ 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 ""
@@ -8855,6 +8876,9 @@ msgstr ""
msgid "No repository"
msgstr ""
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8864,9 +8888,15 @@ msgstr ""
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9379,9 +9409,6 @@ msgstr ""
msgid "Pipeline"
msgstr ""
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr ""
@@ -10917,9 +10944,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11284,6 +11308,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13135,6 +13162,9 @@ 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 ""
@@ -13531,6 +13561,9 @@ 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}."
+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 ""
@@ -14606,7 +14639,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15661,9 +15694,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16254,6 +16284,9 @@ msgstr[1] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16346,6 +16379,9 @@ 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 ""
diff --git a/locale/nb_NO/gitlab.po b/locale/nb_NO/gitlab.po
index b818109b50b..1a65c08fd32 100644
--- a/locale/nb_NO/gitlab.po
+++ b/locale/nb_NO/gitlab.po
@@ -858,9 +858,27 @@ 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 ""
@@ -3483,9 +3501,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3495,6 +3510,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4745,6 +4763,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5695,12 +5716,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr ""
-
-msgid "FirstPushedBy|pushed by"
-msgstr ""
-
msgid "Fixed date"
msgstr ""
@@ -6867,6 +6882,12 @@ 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 ""
@@ -8855,6 +8876,9 @@ msgstr ""
msgid "No repository"
msgstr ""
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8864,9 +8888,15 @@ msgstr ""
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9379,9 +9409,6 @@ msgstr ""
msgid "Pipeline"
msgstr ""
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr ""
@@ -10917,9 +10944,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11284,6 +11308,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13135,6 +13162,9 @@ 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 ""
@@ -13531,6 +13561,9 @@ 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}."
+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 ""
@@ -14606,7 +14639,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15661,9 +15694,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16254,6 +16284,9 @@ msgstr[1] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16346,6 +16379,9 @@ 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 ""
diff --git a/locale/nl_NL/gitlab.po b/locale/nl_NL/gitlab.po
index 8a3a8cf3af6..a21a659f33d 100644
--- a/locale/nl_NL/gitlab.po
+++ b/locale/nl_NL/gitlab.po
@@ -858,9 +858,27 @@ 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 ""
@@ -3483,9 +3501,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3495,6 +3510,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4745,6 +4763,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5695,12 +5716,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr ""
-
-msgid "FirstPushedBy|pushed by"
-msgstr ""
-
msgid "Fixed date"
msgstr ""
@@ -6867,6 +6882,12 @@ 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 ""
@@ -8855,6 +8876,9 @@ msgstr ""
msgid "No repository"
msgstr ""
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8864,9 +8888,15 @@ msgstr ""
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9379,9 +9409,6 @@ msgstr ""
msgid "Pipeline"
msgstr ""
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr ""
@@ -10917,9 +10944,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11284,6 +11308,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13135,6 +13162,9 @@ 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 ""
@@ -13531,6 +13561,9 @@ 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}."
+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 ""
@@ -14606,7 +14639,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15661,9 +15694,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16254,6 +16284,9 @@ msgstr[1] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16346,6 +16379,9 @@ 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 ""
diff --git a/locale/pa_IN/gitlab.po b/locale/pa_IN/gitlab.po
index cf3724e3ad1..f24100b1dc5 100644
--- a/locale/pa_IN/gitlab.po
+++ b/locale/pa_IN/gitlab.po
@@ -858,9 +858,27 @@ 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 ""
@@ -3483,9 +3501,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3495,6 +3510,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4745,6 +4763,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5695,12 +5716,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr ""
-
-msgid "FirstPushedBy|pushed by"
-msgstr ""
-
msgid "Fixed date"
msgstr ""
@@ -6867,6 +6882,12 @@ 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 ""
@@ -8855,6 +8876,9 @@ msgstr ""
msgid "No repository"
msgstr ""
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8864,9 +8888,15 @@ msgstr ""
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9379,9 +9409,6 @@ msgstr ""
msgid "Pipeline"
msgstr ""
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr ""
@@ -10917,9 +10944,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11284,6 +11308,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13135,6 +13162,9 @@ 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 ""
@@ -13531,6 +13561,9 @@ 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}."
+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 ""
@@ -14606,7 +14639,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15661,9 +15694,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16254,6 +16284,9 @@ msgstr[1] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16346,6 +16379,9 @@ 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 ""
diff --git a/locale/pl_PL/gitlab.po b/locale/pl_PL/gitlab.po
index eee5d9cd8c3..00fa4c3f03c 100644
--- a/locale/pl_PL/gitlab.po
+++ b/locale/pl_PL/gitlab.po
@@ -936,9 +936,27 @@ 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 ""
@@ -3579,9 +3597,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3591,6 +3606,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4843,6 +4861,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5795,12 +5816,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr ""
-
-msgid "FirstPushedBy|pushed by"
-msgstr ""
-
msgid "Fixed date"
msgstr ""
@@ -6969,6 +6984,12 @@ 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 ""
@@ -8965,6 +8986,9 @@ msgstr ""
msgid "No repository"
msgstr ""
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8974,9 +8998,15 @@ msgstr ""
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9491,9 +9521,6 @@ msgstr ""
msgid "Pipeline"
msgstr ""
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr ""
@@ -11031,9 +11058,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11402,6 +11426,9 @@ msgstr "Metryki odpowiedzi (NGINX)"
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13259,6 +13286,9 @@ 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 ""
@@ -13655,6 +13685,9 @@ 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}."
+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 ""
@@ -14734,7 +14767,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15791,9 +15824,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16410,6 +16440,9 @@ msgstr[3] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16504,6 +16537,9 @@ 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 ""
diff --git a/locale/pt_BR/gitlab.po b/locale/pt_BR/gitlab.po
index 54a81af63d9..b5dab7c6379 100644
--- a/locale/pt_BR/gitlab.po
+++ b/locale/pt_BR/gitlab.po
@@ -858,9 +858,27 @@ msgstr "Ativar runners compartilhados para 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 ""
+
+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 "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 ""
+
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."
@@ -3483,9 +3501,6 @@ msgstr "Container Registry"
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-msgstr "Criado"
-
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}:"
@@ -3495,6 +3510,9 @@ msgstr "Gitlab suporta até três níveis de nomes de imagens. Os exemplos a seg
msgid "ContainerRegistry|How to use the Container Registry"
msgstr "Como usar o Container Registry"
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr "Leia mais sobre"
@@ -3550,7 +3568,7 @@ msgid "Contribution"
msgstr "Contribuições"
msgid "Contribution Analytics"
-msgstr "Gráficos de contribuição"
+msgstr "Análise de contribuição"
msgid "Contribution Charts"
msgstr "Gráficos de contribuição"
@@ -4745,6 +4763,9 @@ msgstr "Termina em (UTC)"
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5004,7 +5025,7 @@ msgid "Error Reporting and Logging"
msgstr "Relatório e registro de erros"
msgid "Error Tracking"
-msgstr "Acompanhamento de erros"
+msgstr "Rastreamento de erros"
msgid "Error creating a new path"
msgstr "Erro ao criar um novo caminho"
@@ -5695,12 +5716,6 @@ msgstr "Finalizado"
msgid "First day of the week"
msgstr "Primeiro dia da semana"
-msgid "FirstPushedBy|First"
-msgstr "Primeiro"
-
-msgid "FirstPushedBy|pushed by"
-msgstr "publicado por"
-
msgid "Fixed date"
msgstr "Data fixa"
@@ -6269,7 +6284,7 @@ msgid "Git LFS is not enabled on this GitLab server, contact your admin."
msgstr "Git LFS não está habilitado neste servidor GitLab, contate seu administrador."
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 ""
+msgstr "Objetos Git de LFS serão sincronizados em espelhos de pull se o LFS for %{docs_link_start}ativado para o projeto%{docs_link_end}. Eles <strong>não</strong> serão sincronizados em espelhos de push."
msgid "Git global setup"
msgstr "Configuração global do Git"
@@ -6867,6 +6882,12 @@ msgstr "Revisar"
msgid "IP Address"
msgstr "Endereço IP"
+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 "Identificador"
@@ -7069,7 +7090,7 @@ msgid "Include the username in the URL if required: <code>https://username@gitla
msgstr "Inclua o nome de usuário no URL, se necessário: <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 "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 ""
@@ -7413,7 +7434,7 @@ msgid "Job is stuck. Check runners."
msgstr "A tarefa travou. Verifique os runners."
msgid "Job traces and artifacts"
-msgstr ""
+msgstr "Rastreamento e artefatos de tarefas"
msgid "Job was retried"
msgstr ""
@@ -7545,7 +7566,7 @@ msgid "LFS"
msgstr "LFS"
msgid "LFS objects"
-msgstr ""
+msgstr "Objetos LFS"
msgid "LFSStatus|Disabled"
msgstr "Desabilitado"
@@ -8855,6 +8876,9 @@ msgstr "Nenhum push para o período de tempo selecionado."
msgid "No repository"
msgstr "Nenhum repositório"
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr "Nenhum runner encontrado"
@@ -8864,9 +8888,15 @@ msgstr "Nenhum agendamento"
msgid "No start date"
msgstr ""
+msgid "No value set by top-level parent group."
+msgstr ""
+
msgid "No, directly import the existing email addresses and usernames."
msgstr "Não, importe diretamente os endereços de e-mail e nomes de usuários existentes."
+msgid "No, not interested right now"
+msgstr ""
+
msgid "Node was successfully created."
msgstr ""
@@ -9060,10 +9090,10 @@ msgid "Once imported, repositories can be mirrored over SSH. Read more %{link_st
msgstr "Uma vez importados, os repositórios podem ser espelhados por SSH. Leia mais %{link_start}aqui%{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 "Uma vez removido, o relacionamento do fork não pode ser restaurando e você não poderá mais enviar merge requests para o repositório original."
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 "Quando o arquivo exportado estiver pronto, você receberá um e-mail de notificação com um link para download ou poderá fazer o download a partir desta página."
msgid "One more item"
msgid_plural "%d more items"
@@ -9379,9 +9409,6 @@ msgstr ""
msgid "Pipeline"
msgstr "Pipeline"
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr "Agendamento da Pipeline"
@@ -10917,9 +10944,6 @@ msgstr ""
msgid "Registry"
msgstr "Container Registry"
-msgid "Related Commits"
-msgstr "Commits Relacionados"
-
msgid "Related Deployed Jobs"
msgstr "Tarefas Implantadas Relacionadas"
@@ -10987,7 +11011,7 @@ msgid "Remove due date"
msgstr ""
msgid "Remove fork relationship"
-msgstr ""
+msgstr "Remover relacionamento de fork"
msgid "Remove group"
msgstr "Remover grupo"
@@ -11284,6 +11308,9 @@ msgstr "Métricas de resposta (NGINX)"
msgid "Restart Terminal"
msgstr "Reiniciar terminal"
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr "Continuar"
@@ -13109,10 +13136,10 @@ msgid "The file has been successfully deleted."
msgstr ""
msgid "The following items will NOT be exported:"
-msgstr ""
+msgstr "Os seguintes itens NÃO serão exportados:"
msgid "The following items will be exported:"
-msgstr ""
+msgstr "Os seguintes itens serão exportados:"
msgid "The fork relationship has been removed."
msgstr "O relacionamento como fork foi removido."
@@ -13135,6 +13162,9 @@ 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."
@@ -13211,7 +13241,7 @@ 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 ""
+msgstr "O projeto pode ser acessado por qualquer pessoa, independentemente da autenticação."
msgid "The project can be accessed without any authentication."
msgstr "O projeto pode ser acessado sem a necessidade de autenticação."
@@ -13531,6 +13561,9 @@ 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}."
+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 ""
@@ -13694,7 +13727,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 "Isto irá remover o relacionamento de fork para o projeto de origem"
msgid "Those emails automatically become issues (with the comments becoming the email conversation) listed here."
msgstr "Esses e-mails se tornam automaticamente issues (com os comentários se tornando a conversa por e-mail) listados aqui."
@@ -14112,19 +14145,19 @@ msgid "TransferGroup|You don't have enough permissions."
msgstr ""
msgid "TransferProject|Cannot move project"
-msgstr ""
+msgstr "Não é possível mover o projeto"
msgid "TransferProject|Please select a new namespace for your project."
-msgstr ""
+msgstr "Por favor, selecione um novo namespace para o seu projeto."
msgid "TransferProject|Project cannot be transferred, because tags are present in its container registry"
-msgstr ""
+msgstr "O projeto não pode ser transferido porque as tags estão presentes em seu container registry"
msgid "TransferProject|Project with same name or path in target namespace already exists"
-msgstr ""
+msgstr "Um projeto com o mesmo nome ou caminho no namespace de destino já existe"
msgid "TransferProject|Transfer failed, please contact an admin."
-msgstr ""
+msgstr "A transferência falhou, por favor contate um administrador."
msgid "Tree"
msgstr ""
@@ -14606,7 +14639,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15590,7 +15623,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 "Você precisará atualizar seus repositórios locais para apontar para a nova localização."
msgid "You will not get any notifications via email"
msgstr "Você não será notificado por email"
@@ -15661,9 +15694,6 @@ msgstr ""
msgid "Your Groups"
msgstr "Seus Grupos"
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr "As informações do cluster do Kubernetes nesta página ainda são editáveis, mas é recomendado que você desative e reconfigure"
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16254,6 +16284,9 @@ msgstr[1] "instâncias completas"
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16346,6 +16379,9 @@ msgstr "%{metricsLinkStart} Memória %{metricsLinkEnd} uso %{emphasisStart} aume
msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage is %{emphasisStart} unchanged %{emphasisEnd} at %{memoryFrom}MB"
msgstr "%{metricsLinkStart} Memória %{metricsLinkEnd} uso é %{emphasisStart} inalterado %{emphasisEnd} em %{memoryFrom}MB"
+msgid "mrWidget|Added to the merge train at position %{mergeTrainPosition}"
+msgstr ""
+
msgid "mrWidget|Added to the merge train by"
msgstr ""
diff --git a/locale/pt_PT/gitlab.po b/locale/pt_PT/gitlab.po
index aa680827bec..c9921faf129 100644
--- a/locale/pt_PT/gitlab.po
+++ b/locale/pt_PT/gitlab.po
@@ -192,7 +192,7 @@ 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 gerenciares 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 gerires e colaborares 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 ""
@@ -237,7 +237,7 @@ msgid "%{name}'s avatar"
msgstr "Avatar de %{name}"
msgid "%{number_commits_behind} commits behind %{default_branch}, %{number_commits_ahead} commits ahead"
-msgstr ""
+msgstr "%{number_commits_behind} envios atrás %{default_branch}, %{number_commits_ahead} envios à frente"
msgid "%{openOrClose} %{noteable}"
msgstr "%{openOrClose} %{noteable}"
@@ -271,8 +271,8 @@ msgstr "%{state} épicos"
msgid "%{strong_start}%{branch_count}%{strong_end} Branch"
msgid_plural "%{strong_start}%{branch_count}%{strong_end} Branches"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%{strong_start}%{branch_count}%{strong_end} Ramo"
+msgstr[1] "%{strong_start}%{branch_count}%{strong_end} Ramos"
msgid "%{strong_start}%{commit_count}%{strong_end} Commit"
msgid_plural "%{strong_start}%{commit_count}%{strong_end} Commits"
@@ -544,7 +544,7 @@ 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 "Um novo ramo será criado no teu fork e um novo pedido de mesclagem será iniciado."
+msgstr "Um novo ramo será criado na tua bifurcação e um novo pedido de mesclagem será iniciado."
msgid "A new impersonation token has been created."
msgstr "Um novo token de representação foi criado."
@@ -733,7 +733,7 @@ msgid "Add italic text"
msgstr "Adicionar texto em itálico"
msgid "Add label(s)"
-msgstr "Adicionar rótulo(s)"
+msgstr "Adicionar etiqueta(s)"
msgid "Add license"
msgstr "Adicionar licença"
@@ -858,9 +858,27 @@ msgstr "Ativar runners 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 ""
+
+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 "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 ""
+
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."
@@ -1017,7 +1035,7 @@ msgid "Allow projects within this group to use Git LFS"
msgstr "Permitir que projetos dentro deste grupo usem o Git LFS"
msgid "Allow public access to pipelines and job details, including output logs and artifacts"
-msgstr "Permitir acesso público às pipelines e detalhes do trabalho, incluindo registos de saída e artefatos"
+msgstr "Permitir acesso público às pipelines e detalhes do trabalho, incluindo registos de saída e artefactos"
msgid "Allow rendering of PlantUML diagrams in Asciidoc documents."
msgstr "Permitir renderização de diagramas PlantUML em documentos Asciidoc."
@@ -1032,7 +1050,7 @@ msgid "Allow users to register any application to use GitLab as an OAuth provide
msgstr "Permitir que os utilizadores se registem a qualquer aplicação para usar o GitLab como um fornecedor OAuth"
msgid "Allow users to request access"
-msgstr "Permitir que os utilizadores solicitem acesso"
+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."
@@ -1041,7 +1059,7 @@ msgid "Allowed to fail"
msgstr "Permissão para falhar"
msgid "Allows you to add and manage Kubernetes clusters."
-msgstr "Permite -te adicionar e gerenciar clusters do Kubernetes."
+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\""
@@ -1110,7 +1128,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 detectar as chaves do host"
+msgstr "Ocorreu um erro ao detetar as chaves do host"
msgid "An error occurred while disabling Service Desk."
msgstr "Ocorreu um erro ao desativar a Central de Serviços."
@@ -1131,7 +1149,7 @@ msgid "An error occurred while fetching folder content."
msgstr ""
msgid "An error occurred while fetching label colors."
-msgstr "Ocorreu um erro ao buscar as cores dos rótulos."
+msgstr "Ocorreu um erro ao buscar as cores dos etiquetas."
msgid "An error occurred while fetching markdown preview"
msgstr "Ocorreu um erro ao buscar a pré-visualização do markdown"
@@ -1179,7 +1197,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 iniciar bloqueios de caminho"
+msgstr "Ocorreu um erro ao começar bloqueios de caminho"
msgid "An error occurred while loading chart data"
msgstr "Ocorreu um erro ao carregar os dados do gráfico"
@@ -1532,10 +1550,10 @@ msgid "Are you sure? This will invalidate your registered applications and U2F d
msgstr ""
msgid "Artifact ID"
-msgstr "ID do Artefato"
+msgstr "ID do Artefacto"
msgid "Artifacts"
-msgstr "Artefatos"
+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 ""
@@ -1574,10 +1592,10 @@ msgid "Assign labels"
msgstr ""
msgid "Assign milestone"
-msgstr ""
+msgstr "Atribuir objetivo"
msgid "Assign some issues to this milestone."
-msgstr ""
+msgstr "Atribuir alguns problemas para este objetivo."
msgid "Assign to"
msgstr ""
@@ -1616,7 +1634,7 @@ msgid "Attach a file"
msgstr ""
msgid "Attach a file by drag &amp; drop or %{upload_link}"
-msgstr ""
+msgstr "Anexar um ficheiro ao arrastar &amp; soltar ou %{upload_link}"
msgid "Attaching a file"
msgid_plural "Attaching %d files"
@@ -1864,7 +1882,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 rótulo de revisão automático e um disparador de repositório no Bamboo."
+msgstr "Deves configurar um 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"
@@ -1927,7 +1945,7 @@ 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 gerenciar 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 facturação de %{parent_billing_page_link}."
msgid "BillingPlans|Upgrade"
msgstr "Atualizar"
@@ -2012,10 +2030,10 @@ msgid "Branch not loaded - %{branchId}"
msgstr ""
msgid "BranchSwitcherPlaceholder|Search branches"
-msgstr ""
+msgstr "Procurar por ramos"
msgid "BranchSwitcherTitle|Switch branch"
-msgstr ""
+msgstr "Mudar de ramo"
msgid "Branches"
msgstr "Ramos"
@@ -2060,7 +2078,7 @@ msgid "Branches|Filter by branch name"
msgstr "Filtrar por nome de ramo"
msgid "Branches|Merged into %{default_branch}"
-msgstr ""
+msgstr "Mesclados para %{default_branch}"
msgid "Branches|New branch"
msgstr "Novo ramo"
@@ -2075,31 +2093,31 @@ 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"
msgid "Branches|Overview"
-msgstr ""
+msgstr "Visão Geral"
msgid "Branches|Protected branches can be managed in %{project_settings_link}."
-msgstr ""
+msgstr "Ramos protegidos podem ser geridos em %{project_settings_link}."
msgid "Branches|Show active branches"
-msgstr ""
+msgstr "Mostrar ramos ativos"
msgid "Branches|Show all branches"
-msgstr ""
+msgstr "Mostrar todos os ramos"
msgid "Branches|Show more active branches"
-msgstr ""
+msgstr "Mostrar mais ramos ativos"
msgid "Branches|Show more stale branches"
msgstr "Mostrar mais ramos obsoletos"
msgid "Branches|Show overview of the branches"
-msgstr ""
+msgstr "Mostrar visão geral dos ramos"
msgid "Branches|Show stale branches"
msgstr "Mostrar os ramos obsoletos"
msgid "Branches|Sort by"
-msgstr ""
+msgstr "Ordernar por"
msgid "Branches|Stale"
msgstr "Obsoleto"
@@ -2114,19 +2132,19 @@ msgid "Branches|The default branch cannot be deleted"
msgstr "O ramo padrão não pode ser apagado"
msgid "Branches|This branch hasn’t been merged into %{default_branch}."
-msgstr ""
+msgstr "Este ramo não foi mesclado para '%{default_branch}'."
msgid "Branches|To avoid data loss, consider merging this branch before deleting it."
-msgstr ""
+msgstr "Para evitar a perda de dados, considera mesclar este ramo antes de eliminá-lo."
msgid "Branches|To confirm, type %{branch_name_confirmation}:"
-msgstr ""
+msgstr "Para confirmar, digita %{branch_name_confirmation}:"
msgid "Branches|To discard the local changes and overwrite the branch with the upstream version, delete it here and choose 'Update Now' above."
-msgstr ""
+msgstr "Para rejeitar as alterações locais e sobrescrever a ramificação com a versão upstream, apaga-o aqui e escolhe \"Atualizar Agora\" em cima."
msgid "Branches|You’re about to permanently delete the protected branch %{branch_name}."
-msgstr ""
+msgstr "Estás prestes a apagar, permanentemente, o ramo protegido %{branch_name}."
msgid "Branches|diverged from upstream"
msgstr "divergiu da upstream"
@@ -2135,10 +2153,10 @@ msgid "Branches|merged"
msgstr "mesclado"
msgid "Branches|project settings"
-msgstr ""
+msgstr "definições do projeto"
msgid "Branches|protected"
-msgstr ""
+msgstr "protegido"
msgid "Broadcast Message was successfully created."
msgstr ""
@@ -2198,7 +2216,7 @@ msgid "By default, all projects and groups will use the global notifications set
msgstr "Por padrão, todos os projetos e grupos usarão as definições globais de notificações."
msgid "ByAuthor|by"
-msgstr ""
+msgstr "por"
msgid "CHANGELOG"
msgstr ""
@@ -2234,46 +2252,46 @@ msgid "CI/CD settings"
msgstr ""
msgid "CICD|Auto DevOps"
-msgstr ""
+msgstr "Auto DevOps"
msgid "CICD|Auto DevOps will automatically build, test, and deploy your application based on a predefined Continuous Integration and Delivery configuration."
-msgstr ""
+msgstr "O Auto DevOps irá compilar, testar e implantar, a tua aplicação com base na configuração predefinida de Integração e Entrega Contínua."
msgid "CICD|Automatic deployment to staging, manual deployment to production"
-msgstr ""
+msgstr "Implantação automática da preparação, implementação manual para a produção"
msgid "CICD|Continuous deployment to production"
-msgstr ""
+msgstr "Implantação contínua para produção"
msgid "CICD|Continuous deployment to production using timed incremental rollout"
-msgstr ""
+msgstr "Desenvolvimento contínuo para a produção ao usar o lançamento incremental cronometrado"
msgid "CICD|Default to Auto DevOps pipeline"
-msgstr ""
+msgstr "Padrão para o pipeline de Auto DevOps"
msgid "CICD|Default to Auto DevOps pipeline for all projects"
-msgstr ""
+msgstr "Padrão para o pipeline deAuto DevOps para todos os projetos"
msgid "CICD|Deployment strategy"
-msgstr ""
+msgstr "Estratégia de implantação"
msgid "CICD|Jobs"
-msgstr ""
+msgstr "Trabalhos"
msgid "CICD|Learn more about Auto DevOps"
-msgstr ""
+msgstr "Aprender mais sobre Auto DevOps"
msgid "CICD|The Auto DevOps pipeline will run if no alternative CI configuration file is found."
-msgstr ""
+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 ""
+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|group enabled"
-msgstr ""
+msgstr "group ativado"
msgid "CICD|instance enabled"
-msgstr ""
+msgstr "instância ativada"
msgid "CONTRIBUTING"
msgstr ""
@@ -2318,7 +2336,7 @@ msgid "Cannot modify managed Kubernetes cluster"
msgstr ""
msgid "Cannot refer to a group milestone by an internal id!"
-msgstr ""
+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 ""
@@ -2369,19 +2387,19 @@ msgid "Change your password or recover your current one"
msgstr ""
msgid "ChangeTypeActionLabel|Pick into branch"
-msgstr ""
+msgstr "Escolher no ramo"
msgid "ChangeTypeActionLabel|Revert in branch"
-msgstr ""
+msgstr "Reverter no ramo"
msgid "ChangeTypeAction|Cherry-pick"
-msgstr ""
+msgstr "Cherry-pick"
msgid "ChangeTypeAction|Revert"
-msgstr ""
+msgstr "Reverter"
msgid "ChangeTypeAction|This will create a new commit in order to revert the existing changes."
-msgstr ""
+msgstr "Isto irá criar um envio para reverter as alterações existentes."
msgid "Changes"
msgstr ""
@@ -2486,142 +2504,142 @@ msgid "Choose your merge method, options, checks, and set up a default merge req
msgstr ""
msgid "CiStatusLabel|canceled"
-msgstr ""
+msgstr "cancelado"
msgid "CiStatusLabel|created"
-msgstr ""
+msgstr "criado"
msgid "CiStatusLabel|delayed"
-msgstr ""
+msgstr "atrasado"
msgid "CiStatusLabel|failed"
-msgstr ""
+msgstr "falhou"
msgid "CiStatusLabel|manual action"
-msgstr ""
+msgstr "ação manual"
msgid "CiStatusLabel|passed"
-msgstr ""
+msgstr "passou"
msgid "CiStatusLabel|passed with warnings"
-msgstr ""
+msgstr "passou com avisos"
msgid "CiStatusLabel|pending"
-msgstr ""
+msgstr "pendente"
msgid "CiStatusLabel|preparing"
-msgstr ""
+msgstr "a preparar"
msgid "CiStatusLabel|skipped"
-msgstr ""
+msgstr "ignorado"
msgid "CiStatusLabel|waiting for delayed job"
-msgstr ""
+msgstr "a aguardar trabalho atrasado"
msgid "CiStatusLabel|waiting for manual action"
-msgstr ""
+msgstr "a aguardar ação manual"
msgid "CiStatusText|blocked"
-msgstr ""
+msgstr "bloqueado"
msgid "CiStatusText|canceled"
-msgstr ""
+msgstr "cancelado"
msgid "CiStatusText|created"
-msgstr ""
+msgstr "criado"
msgid "CiStatusText|delayed"
-msgstr ""
+msgstr "atrasado"
msgid "CiStatusText|failed"
-msgstr ""
+msgstr "falhou"
msgid "CiStatusText|manual"
-msgstr ""
+msgstr "manual"
msgid "CiStatusText|passed"
-msgstr ""
+msgstr "passou"
msgid "CiStatusText|pending"
-msgstr ""
+msgstr "pendente"
msgid "CiStatusText|preparing"
-msgstr ""
+msgstr "preparação"
msgid "CiStatusText|skipped"
-msgstr ""
+msgstr "ignorado"
msgid "CiStatus|running"
-msgstr ""
+msgstr "em execução"
msgid "CiVariables|Cannot use Masked Variable with current value"
-msgstr ""
+msgstr "Não podes usar a Variável Mascarada com o valor atual"
msgid "CiVariables|Input variable key"
-msgstr ""
+msgstr "Chave da variável de entrada"
msgid "CiVariables|Input variable value"
-msgstr ""
+msgstr "Valor da variável de entrada"
msgid "CiVariables|Key"
-msgstr ""
+msgstr "Chave"
msgid "CiVariables|Masked"
-msgstr ""
+msgstr "Mascarado"
msgid "CiVariables|Remove variable row"
-msgstr ""
+msgstr "Remover linha da variável"
msgid "CiVariables|Scope"
-msgstr ""
+msgstr "Alcance"
msgid "CiVariables|State"
-msgstr ""
+msgstr "Estado"
msgid "CiVariables|Type"
-msgstr ""
+msgstr "Tipo"
msgid "CiVariables|Value"
-msgstr ""
+msgstr "Valor"
msgid "CiVariable|* (All environments)"
-msgstr ""
+msgstr "* (Todos os ambientes)"
msgid "CiVariable|All environments"
-msgstr ""
+msgstr "Todos os ambientes"
msgid "CiVariable|Create wildcard"
-msgstr ""
+msgstr "Criar caractere especial"
msgid "CiVariable|Error occurred while saving variables"
-msgstr ""
+msgstr "Ocorreu um erro ao guardar as variáveis"
msgid "CiVariable|Masked"
-msgstr ""
+msgstr "Mascarado"
msgid "CiVariable|New environment"
-msgstr ""
+msgstr "Novo ambiente"
msgid "CiVariable|Protected"
-msgstr ""
+msgstr "Protegido"
msgid "CiVariable|Search environments"
-msgstr ""
+msgstr "Pesquisar ambientes"
msgid "CiVariable|Toggle masked"
-msgstr ""
+msgstr "Alternar mascarado"
msgid "CiVariable|Toggle protected"
-msgstr ""
+msgstr "Alternar protegido"
msgid "CiVariable|Validation failed"
-msgstr ""
+msgstr "Falha na validação"
msgid "Classification Label (optional)"
msgstr ""
msgid "ClassificationLabelUnavailable|is unavailable: %{reason}"
-msgstr ""
+msgstr "está indisponível: %{reason}"
msgid "Clear"
msgstr ""
@@ -2642,7 +2660,7 @@ msgid "Clears weight."
msgstr ""
msgid "Click any <strong>project name</strong> in the project list below to navigate to the project milestone."
-msgstr ""
+msgstr "Clica em qualquer <strong>nome de projeto</strong> na lista a seguir para navegar para o objetivo do projeto."
msgid "Click here"
msgstr ""
@@ -2651,7 +2669,7 @@ msgid "Click the <strong>Download</strong> button and wait for downloading to co
msgstr ""
msgid "Click the <strong>Promote</strong> button in the top right corner to promote it to a group milestone."
-msgstr ""
+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 ""
@@ -2699,7 +2717,7 @@ msgid "Close epic"
msgstr ""
msgid "Close milestone"
-msgstr ""
+msgstr "Fechar objetivo"
msgid "Close sidebar"
msgstr ""
@@ -2711,214 +2729,214 @@ msgid "Closed issues"
msgstr ""
msgid "ClusterIntegration| %{custom_domain_start}More information%{custom_domain_end}."
-msgstr ""
+msgstr "%{custom_domain_start}Mais informações%{custom_domain_end}."
msgid "ClusterIntegration| can be used instead of a custom domain."
-msgstr ""
+msgstr "pode ser usado em vez de um domínio personalizado."
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 "é o ambiente padrão do escopo deste cluster. Isto significa que todos os trabalhos, independentemente do seu ambiente, vai usar este cluster. %{environment_scope_start}Mais informações%{environment_scope_end}"
msgid "ClusterIntegration|%{appList} was successfully installed on your Kubernetes cluster"
-msgstr ""
+msgstr "%{appList} foi instalado com sucesso no teu cluster Kubernetes"
msgid "ClusterIntegration|%{title} uninstalled successfully."
-msgstr ""
+msgstr "%{title} desinstalado com sucesso."
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 ""
+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 ""
+msgstr "API URL"
msgid "ClusterIntegration|API URL should be a valid http/https url."
-msgstr ""
+msgstr "API URL deve ser válido, http/https url."
msgid "ClusterIntegration|Add Kubernetes cluster"
-msgstr ""
+msgstr "Adicionar cluster Kubernetes"
msgid "ClusterIntegration|Add a Kubernetes cluster integration"
-msgstr ""
+msgstr "Adicionar uma integração de cluster Kubernetes"
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 ""
+msgstr "Adicionar um cluster de Kubernetes ao teu grupo, automaticamente, irá compartilhar, o cluster em todos os teus projetos. Utiliza aplicações de análise, implementa as tuas aplicações, e executa facilmente os teus pipelines para todos os projetos que utilizam o mesmo cluster."
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 "Adicionar um cluster de Kubernetes, irá compartilhar, automaticamente, o cluster em todos os projetos. Utiliza aplicações de análise, implementa as tuas aplicações, e executa facilmente os teus pipelines para todos os projetos que utilizam o mesmo cluster."
msgid "ClusterIntegration|Adding an integration to your group will share the cluster across all your projects."
-msgstr ""
+msgstr "Adicionar uma integração ao teu grupo compartilhará o cluster em todos os teus projetos."
msgid "ClusterIntegration|Adding an integration will share the cluster across all projects."
-msgstr ""
+msgstr "Adicionar uma integração compartilhará o cluster em todos os projetos."
msgid "ClusterIntegration|Advanced options on this Kubernetes cluster's integration"
-msgstr ""
+msgstr "Opções avançadas na integração deste cluster de Kubernetes"
msgid "ClusterIntegration|All data will be deleted and cannot be restored."
-msgstr ""
+msgstr "Todos os dados serão apagados e não podem ser restaurados."
msgid "ClusterIntegration|Allow GitLab to manage namespace and service accounts for this cluster."
-msgstr ""
+msgstr "Permitir que o GitLab gerêncie contas de espaço de nome e de serviço para este cluster."
msgid "ClusterIntegration|Alternatively"
-msgstr ""
+msgstr "Alternativamente"
msgid "ClusterIntegration|An error occurred when trying to contact the Google Cloud API. Please try again later."
-msgstr ""
+msgstr "Ocorreu um erro ao tentar contactar o Google Cloud API. Por favor, tenta novamente, mais tarde."
msgid "ClusterIntegration|An error occurred while trying to fetch project zones: %{error}"
-msgstr ""
+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 ""
+msgstr "Ocorreu um erro ao tentar buscar teus projetos: %{error}"
msgid "ClusterIntegration|An error occurred while trying to fetch zone machine types: %{error}"
-msgstr ""
+msgstr "Ocorreu um erro ao tentar buscar as máquinas da zona: %{error}"
msgid "ClusterIntegration|Any running pipelines will be canceled."
-msgstr ""
+msgstr "Quaisquer pipelines em execução serão cancelados."
msgid "ClusterIntegration|Applications"
-msgstr ""
+msgstr "Aplicações"
msgid "ClusterIntegration|Apply for credit"
-msgstr ""
+msgstr "Aplicar crédito"
msgid "ClusterIntegration|Are you sure you want to remove this Kubernetes cluster's integration? This will not delete your actual Kubernetes cluster."
-msgstr ""
+msgstr "Tens a certeza de que desejas remover esta integração de cluster de Kubernetes? Isto não irá apagar o teu cluster de Kubernetes real."
msgid "ClusterIntegration|Base domain"
-msgstr ""
+msgstr "Domínio base"
msgid "ClusterIntegration|CA Certificate"
-msgstr ""
+msgstr "Certificado CA"
msgid "ClusterIntegration|Cert-Manager"
-msgstr ""
+msgstr "Gestor de Certificados"
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 "O Gestor de Certificados é um controlador de gestão de certificados nativo do Kubernetes, que ajuda na emissão de certificados. A instalação no teu cluster, emitirá um certificado por %{letsEncrypt} e garantirá, que os certificados sejam válidos e atualizados."
msgid "ClusterIntegration|Certificate Authority bundle (PEM format)"
-msgstr ""
+msgstr "Pacote de Autoridade de Certificados (formato PEM)"
msgid "ClusterIntegration|Choose which applications to install on your Kubernetes cluster. Helm Tiller is required to install any of the following applications."
-msgstr ""
+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 ""
+msgstr "Escolhe qual dos teus ambientes usarás este cluster."
msgid "ClusterIntegration|Cluster health"
-msgstr ""
+msgstr " Integridade de cluster"
msgid "ClusterIntegration|Cluster name is required."
-msgstr ""
+msgstr "O nome do cluster é obrigatório."
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 "Os clusters são utilizados ao selecionar o antepassado mais próximo com um contexto de ambiente correspondente. Por exemplo, os clusters de projeto substituirão os clusters de grupo."
msgid "ClusterIntegration|Copy API URL"
-msgstr ""
+msgstr " Copiar URL da API"
msgid "ClusterIntegration|Copy CA Certificate"
-msgstr ""
+msgstr "Copiar Certificado CA"
msgid "ClusterIntegration|Copy Ingress Endpoint to clipboard"
-msgstr ""
+msgstr "Copiar Ponto Final do Ingress para a área de transferência"
msgid "ClusterIntegration|Copy Jupyter Hostname to clipboard"
-msgstr ""
+msgstr "Copiar o Nome de Anfitrião de Jupyter para a área de transferência"
msgid "ClusterIntegration|Copy Knative Endpoint to clipboard"
-msgstr ""
+msgstr "Copiar o Nome de Anfitrião de Knative para a área de transferência"
msgid "ClusterIntegration|Copy Kubernetes cluster name"
-msgstr ""
+msgstr "Copiar o nome do cluster de Kubernetes"
msgid "ClusterIntegration|Copy Service Token"
-msgstr ""
+msgstr "Copiar Token de Serviço"
msgid "ClusterIntegration|Create Kubernetes cluster"
-msgstr ""
+msgstr "Criar cluster de Kubernetes"
msgid "ClusterIntegration|Did you know?"
-msgstr ""
+msgstr "Sabias que?"
msgid "ClusterIntegration|Enable or disable GitLab's connection to your Kubernetes cluster."
-msgstr ""
+msgstr "Ativar ou desativar a conexão do GitLab com o teu cluster de Kubernetes."
msgid "ClusterIntegration|Enable this setting if using role-based access control (RBAC)."
-msgstr ""
+msgstr "Ativar esta definição, se ao usar o controlo de acesso baseado em funções (RBAC)."
msgid "ClusterIntegration|Enter the details for your Kubernetes cluster"
-msgstr ""
+msgstr " Insere os detalhes do teu cluster do Kubernetes"
msgid "ClusterIntegration|Environment scope"
-msgstr ""
+msgstr "Alcance de ambiente"
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 ""
+msgstr "Cada nova conta do Google Cloud Platform (GCP) recebe $300 em crédito após %{sign_up_link}. Em parceria com o Google, o GitLab pode oferecer $200 adicionais, para contas de GCP novas e existentes para começarem a usar o Google Kubernetes Engine Integration do GitLab."
msgid "ClusterIntegration|Failed to configure Google Kubernetes Engine Cluster: %{message}"
-msgstr ""
+msgstr "Falha ao configurar o Google Kubernetes Engine Cluster: %{message}"
msgid "ClusterIntegration|Failed to request to Google Cloud Platform: %{message}"
-msgstr ""
+msgstr "Falha ao pedir ao Google Cloud Platform: %{message}"
msgid "ClusterIntegration|Failed to run Kubeclient: %{message}"
-msgstr ""
+msgstr "Falha ao executar o Kubeclient: %{message}"
msgid "ClusterIntegration|Fetching machine types"
-msgstr ""
+msgstr "A buscar máquinas"
msgid "ClusterIntegration|Fetching projects"
-msgstr ""
+msgstr "A buscar projetos"
msgid "ClusterIntegration|Fetching zones"
-msgstr ""
+msgstr "A buscar zonas"
msgid "ClusterIntegration|GitLab Integration"
-msgstr ""
+msgstr "Integração GitLab"
msgid "ClusterIntegration|GitLab Runner"
-msgstr ""
+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 "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."
msgid "ClusterIntegration|GitLab-managed cluster"
-msgstr ""
+msgstr "Cluster do GitLab-managed"
msgid "ClusterIntegration|Google Cloud Platform project"
-msgstr ""
+msgstr "Projeto Google Cloud Platform"
msgid "ClusterIntegration|Google Kubernetes Engine"
-msgstr ""
+msgstr " Google Kubernetes Engine"
msgid "ClusterIntegration|Google Kubernetes Engine project"
-msgstr ""
+msgstr " Projeto do Google Kubernetes Engine"
msgid "ClusterIntegration|Group cluster"
-msgstr ""
+msgstr "Cluster de grupo"
msgid "ClusterIntegration|Helm Tiller"
-msgstr ""
+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 "O Helm simplifica a instalação e a gestão de aplicações do Kubernetes. O Tiller é executado dentro do Kubernetes Cluster e gerência os lançamentos dos teus gráficos."
msgid "ClusterIntegration|Hide"
-msgstr ""
+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 ""
+msgstr "Se estás a configurar múltiplos clusters e está a usar 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 ""
+msgstr "Para visualizar a saúde do cluster, deves primeiro instalar o Prometheus abaixo."
msgid "ClusterIntegration|Ingress"
msgstr ""
@@ -3137,7 +3155,7 @@ msgid "ClusterIntegration|Something went wrong while uninstalling %{title}"
msgstr ""
msgid "ClusterIntegration|Something went wrong while updating Knative domain name."
-msgstr ""
+msgstr "Algo deu errado 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 ""
@@ -3483,9 +3501,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3495,6 +3510,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -3502,7 +3520,7 @@ 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 ""
+msgstr "Após autenticares-te, podes criar e enviar uma imagem de recipiente ao usar os comandos comuns de %{build} e %{push}"
msgid "ContainerRegistry|Remove repository"
msgstr ""
@@ -3625,7 +3643,7 @@ msgid "Copy file path to clipboard"
msgstr ""
msgid "Copy labels and milestone from %{source_issuable_reference}."
-msgstr ""
+msgstr "Copiar etiquetas e objetivo de %{source_issuable_reference}."
msgid "Copy labels and milestone from other issue or merge request in this project"
msgstr ""
@@ -3739,7 +3757,7 @@ msgid "Create group"
msgstr ""
msgid "Create group label"
-msgstr "Criar rótulo do grupo"
+msgstr "Criar etiqueta do grupo"
msgid "Create lists from labels. Issues with that label appear in that list."
msgstr ""
@@ -3751,7 +3769,7 @@ msgid "Create merge request and branch"
msgstr ""
msgid "Create milestone"
-msgstr ""
+msgstr "Criar objetivo"
msgid "Create new branch"
msgstr ""
@@ -3772,7 +3790,7 @@ msgid "Create new..."
msgstr ""
msgid "Create project label"
-msgstr "Criar rótulo do projeto"
+msgstr "Criar etiqueta do projeto"
msgid "Create your first page"
msgstr ""
@@ -3805,10 +3823,10 @@ msgid "Created issue %{issueLink} at %{projectLink}"
msgstr ""
msgid "Created merge request %{mergeRequestLink}"
-msgstr ""
+msgstr "Pedido de mesclagem criado %{mergeRequestLink}"
msgid "Created merge request %{mergeRequestLink} at %{projectLink}"
-msgstr ""
+msgstr "Pedido de mesclagem criado %{mergeRequestLink} em %{projectLink}"
msgid "Created on"
msgstr ""
@@ -3901,7 +3919,7 @@ msgid "CycleAnalyticsStage|Review"
msgstr ""
msgid "CycleAnalyticsStage|Staging"
-msgstr ""
+msgstr "Preparação"
msgid "CycleAnalyticsStage|Test"
msgstr ""
@@ -4524,7 +4542,7 @@ msgid "Edit Label"
msgstr ""
msgid "Edit Milestone"
-msgstr ""
+msgstr "Editar Objetivo"
msgid "Edit Password"
msgstr ""
@@ -4745,6 +4763,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -4842,7 +4863,7 @@ msgid "Environments|Environments"
msgstr ""
msgid "Environments|Environments are places where code gets deployed, such as staging or production."
-msgstr ""
+msgstr "Os Ambientes são lugares onde o código é implantado, como preparação ou produção."
msgid "Environments|Job"
msgstr ""
@@ -4920,7 +4941,7 @@ msgid "Environments|This action will run the job defined by %{name} for commit %
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 ""
+msgstr "Esta ação executará o trabalho definido pela preparação para enviar %{commit_id}, colocar o ambiente, numa versão anterior. Podes revertê-lo, novamente, ao implementar a versão mais recente da tua aplicação. Tens a certeza de que desejas continuar?"
msgid "Environments|Updated"
msgstr ""
@@ -4983,13 +5004,13 @@ msgid "Epics|Something went wrong while fetching child epics."
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 ""
+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."
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 ""
+msgstr "Para agendar o teu épico da data de %{epicDateType}, com base em objetivos, atribui um objetivo com uma data de %{epicDateType} para qualquer problema no épico."
msgid "Epics|due"
msgstr ""
@@ -5097,13 +5118,13 @@ msgid "Error saving label update."
msgstr ""
msgid "Error updating %{issuableType}"
-msgstr ""
+msgstr "Erro ao atualizar %{issuableType}"
msgid "Error updating status for all todos."
-msgstr ""
+msgstr "Erro ao atualizar estado para todas as tarefas."
msgid "Error updating todo status."
-msgstr ""
+msgstr "Erro ao atualizar o estado do \"a fazer\"."
msgid "Error uploading file"
msgstr ""
@@ -5130,7 +5151,7 @@ msgid "ErrorTracking|Active"
msgstr ""
msgid "ErrorTracking|After adding your Auth Token, use the 'Connect' button to load projects"
-msgstr ""
+msgstr "Depois de adicionares as tuas Tokens de Autenticação, usa o botão 'Conectar' para carregar projetos"
msgid "ErrorTracking|Auth Token"
msgstr ""
@@ -5442,7 +5463,7 @@ msgid "Failed to upgrade."
msgstr ""
msgid "Failed to upload object map file"
-msgstr ""
+msgstr "Falha ao enviar o ficheiro de mapeamento de objeto"
msgid "Failure"
msgstr ""
@@ -5615,7 +5636,7 @@ msgid "File templates"
msgstr ""
msgid "File upload error."
-msgstr ""
+msgstr "Erro ao enviar o ficheiro."
msgid "Files"
msgstr ""
@@ -5642,7 +5663,7 @@ msgid "Filter by commit message"
msgstr ""
msgid "Filter by milestone name"
-msgstr ""
+msgstr "Filtrar por nome de objetivo"
msgid "Filter by two-factor authentication"
msgstr ""
@@ -5695,12 +5716,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr ""
-
-msgid "FirstPushedBy|pushed by"
-msgstr ""
-
msgid "Fixed date"
msgstr ""
@@ -5831,7 +5846,7 @@ msgid "From merge request merge until deploy to production"
msgstr ""
msgid "From milestones:"
-msgstr ""
+msgstr "De objetivos:"
msgid "From the Kubernetes cluster details view, install Runner from the applications list"
msgstr ""
@@ -6329,7 +6344,7 @@ 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 ""
+msgstr "O GitLab executará um trabalho em segundo plano que produzirá CSVs com pseudónimos da base de dados do GitLab que serão enviados no diretório de armazenamento de objetos configurados."
msgid "GitLab.com import"
msgstr ""
@@ -6611,7 +6626,7 @@ msgid "GroupSettings|The Auto DevOps pipeline will run if no alternative CI conf
msgstr ""
msgid "GroupSettings|There was a problem updating Auto DevOps pipeline: %{error_messages}."
-msgstr ""
+msgstr "Houve um problema de atualização da pipeline Auto DevOps: %{error_messages}."
msgid "GroupSettings|This setting is applied on %{ancestor_group} and has been overridden on this subgroup."
msgstr ""
@@ -6867,6 +6882,12 @@ 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 ""
@@ -6958,7 +6979,7 @@ msgid "Import members from another project"
msgstr ""
msgid "Import multiple repositories by uploading a manifest file."
-msgstr ""
+msgstr "Importar vários repositórios ao enviar um ficheiro de manifesto."
msgid "Import project"
msgstr ""
@@ -7027,7 +7048,7 @@ msgid "ImportProjects|The repository could not be created."
msgstr ""
msgid "ImportProjects|Updating the imported projects failed"
-msgstr ""
+msgstr "Falhou a atualização dos projetos importados"
msgid "Improve Issue boards"
msgstr ""
@@ -7093,7 +7114,7 @@ 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 "Informar os utilizadores sem enviar as chaves SSH que não podem empurrar através de SSH até que um seja adicionado"
msgid "Information about additional Pages templates and how to install them can be found in our %{pages_getting_started_guide}."
msgstr ""
@@ -7563,7 +7584,7 @@ msgid "Label actions dropdown"
msgstr ""
msgid "Label lists show all issues with the selected label."
-msgstr "Listas de rótulos que mostram todos os problemas com o rótulo selecionado."
+msgstr "Listas de etiquetas que mostram todos os problemas com o etiqueta selecionado."
msgid "Label was created"
msgstr ""
@@ -7685,7 +7706,7 @@ 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 ""
+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 ""
@@ -8194,10 +8215,10 @@ msgid "MergeRequests|Failed to squash. Should be done manually."
msgstr ""
msgid "MergeRequests|Jump to next unresolved discussion"
-msgstr ""
+msgstr "Ir para a próxima discussão não resolvida"
msgid "MergeRequests|Reply..."
-msgstr ""
+msgstr "Responder..."
msgid "MergeRequests|Resolve this discussion in a new issue"
msgstr ""
@@ -8218,37 +8239,37 @@ msgid "MergeRequests|View replaced file @ %{commitId}"
msgstr ""
msgid "MergeRequests|commented on commit %{commitLink}"
-msgstr ""
+msgstr "comentou no envio %{commitLink}"
msgid "MergeRequests|started a discussion"
-msgstr ""
+msgstr "iniciou uma discussão"
msgid "MergeRequests|started a discussion on %{linkStart}an old version of the diff%{linkEnd}"
-msgstr ""
+msgstr "iniciou uma discussão sobre %{linkStart}uma versão antiga do diff%{linkEnd}"
msgid "MergeRequests|started a discussion on %{linkStart}the diff%{linkEnd}"
-msgstr ""
+msgstr " iniciou uma discussão sobre %{linkStart}o diff%{linkEnd}"
msgid "MergeRequests|started a discussion on an outdated change in commit %{linkStart}%{commitId}%{linkEnd}"
-msgstr ""
+msgstr "iniciou uma discussão sobre uma alteração desatualizada no commit %{linkStart}%{commitId}%{linkEnd}"
msgid "MergeRequests|started a discussion on commit %{linkStart}%{commitId}%{linkEnd}"
-msgstr ""
+msgstr "iniciou uma discussão sobre uma alteração desatualizada no commit %{linkStart}%{commitId}%{linkEnd}"
msgid "MergeRequest| %{paragraphStart}changed the description %{descriptionChangedTimes} times %{timeDifferenceMinutes}%{paragraphEnd}"
-msgstr ""
+msgstr "%{paragraphStart}alterou a descrição %{descriptionChangedTimes} vezes %{timeDifferenceMinutes}%{paragraphEnd}"
msgid "MergeRequest|Error dismissing suggestion popover. Please try again."
msgstr ""
msgid "MergeRequest|Error loading full diff. Please try again."
-msgstr ""
+msgstr "Erro ao carregar o diff completo. Por favor, tenta novamente."
msgid "MergeRequest|Filter files or search with %{modifier_key}+p"
msgstr ""
msgid "MergeRequest|No files found"
-msgstr ""
+msgstr "Nenhum ficheiro encontrado"
msgid "Merged"
msgstr ""
@@ -8389,46 +8410,46 @@ msgid "Migration successful."
msgstr ""
msgid "Milestone"
-msgstr ""
+msgstr "Objetivo"
msgid "Milestone lists not available with your current license"
-msgstr ""
+msgstr "Não está disponível as listas de objetivos com a tua licença atual"
msgid "Milestone lists show all issues from the selected milestone."
-msgstr ""
+msgstr "As listas de objetivos mostram todos os problemas do objetivo selecionado."
msgid "Milestones"
-msgstr ""
+msgstr "Objetivos"
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 ""
+msgstr "Estás prestes a apagar, permanentemente, o objetivo%{milestoneTitle} e removê-lo de %{issuesWithCount} e %{mergeRequestsWithCount}. Uma vez apagado, não será possível desfazer ou recuperar."
msgid "Milestones| You’re about to permanently delete the milestone %{milestoneTitle}. This milestone is not currently used in any issues or merge requests."
-msgstr ""
+msgstr "Estás prestes a apagar, permanentemente, o objetivo %{milestoneTitle}. Este objetivo não é, atualmente, usado em nenhum problema ou pedidos de mesclagem."
msgid "Milestones|Delete milestone"
-msgstr ""
+msgstr "Apagar objetivo"
msgid "Milestones|Delete milestone %{milestoneTitle}?"
-msgstr ""
+msgstr "Apagar objetivo %{milestoneTitle}?"
msgid "Milestones|Failed to delete milestone %{milestoneTitle}"
-msgstr ""
+msgstr "Falha ao apagar o objetivo %{milestoneTitle}"
msgid "Milestones|Milestone %{milestoneTitle} was not found"
-msgstr ""
+msgstr "O objetivo %{milestoneTitle} não foi encontrado"
msgid "Milestones|Promote %{milestoneTitle} to group milestone?"
-msgstr ""
+msgstr "Promover %{milestoneTitle} para objetivo de grupo?"
msgid "Milestones|Promote Milestone"
-msgstr ""
+msgstr "Promover Objetivo"
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 ""
+msgstr "Esta ação não pode ser revertida."
msgid "Minimum capacity to be available before we schedule more mirrors preemptively."
msgstr ""
@@ -8631,7 +8652,7 @@ msgid "New Label"
msgstr ""
msgid "New Milestone"
-msgstr ""
+msgstr "Novo Objetivo"
msgid "New Pages Domain"
msgstr ""
@@ -8688,7 +8709,7 @@ msgid "New merge request"
msgstr ""
msgid "New milestone"
-msgstr ""
+msgstr "Novo objetivo"
msgid "New password"
msgstr ""
@@ -8832,10 +8853,10 @@ msgid "No messages were logged"
msgstr ""
msgid "No milestones to show"
-msgstr ""
+msgstr "Nenhum objetivo para mostrar"
msgid "No other labels with such name or description"
-msgstr "Nenhuns outros rótulos com tal nome ou descrição"
+msgstr "Nenhuns outros etiquetas com tal nome ou descrição"
msgid "No parent group"
msgstr ""
@@ -8855,6 +8876,9 @@ msgstr ""
msgid "No repository"
msgstr ""
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8864,9 +8888,15 @@ msgstr ""
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9379,9 +9409,6 @@ msgstr ""
msgid "Pipeline"
msgstr ""
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr ""
@@ -9920,7 +9947,7 @@ msgid "Profiles|Commit email"
msgstr ""
msgid "Profiles|Connect"
-msgstr ""
+msgstr "Conectar"
msgid "Profiles|Connected Accounts"
msgstr ""
@@ -9947,7 +9974,7 @@ msgid "Profiles|Deleting an account has the following effects:"
msgstr ""
msgid "Profiles|Disconnect"
-msgstr ""
+msgstr "Desconectar"
msgid "Profiles|Do not show on profile"
msgstr ""
@@ -10079,7 +10106,7 @@ msgid "Profiles|Update username"
msgstr ""
msgid "Profiles|Upload new avatar"
-msgstr ""
+msgstr "Enviar novo avatar"
msgid "Profiles|Use a private email - %{email}"
msgstr ""
@@ -10100,7 +10127,7 @@ msgid "Profiles|What's your status?"
msgstr ""
msgid "Profiles|Who you represent or work for"
-msgstr ""
+msgstr "Para quem representas ou trabalhas"
msgid "Profiles|You can change your avatar here"
msgstr ""
@@ -10112,10 +10139,10 @@ msgid "Profiles|You can set your current timezone here"
msgstr ""
msgid "Profiles|You can upload your avatar here"
-msgstr ""
+msgstr "Podes enviar o teu avatar aqui"
msgid "Profiles|You can upload your avatar here or change it at %{gravatar_link}"
-msgstr ""
+msgstr "Podes enviar o teu avatar aqui ou alterá-lo em %{gravatar_link}"
msgid "Profiles|You don't have access to delete this user."
msgstr ""
@@ -10610,10 +10637,10 @@ msgid "Promote"
msgstr ""
msgid "Promote these project milestones into a group milestone."
-msgstr ""
+msgstr "Promove estes objetivos de projeto num objetivo de grupo."
msgid "Promote to Group Milestone"
-msgstr ""
+msgstr "Promover para Objetivo de Grupo"
msgid "Promote to group label"
msgstr ""
@@ -10631,7 +10658,7 @@ 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 ""
+msgstr "Os épicos permitem que gerencies o teu portefólio de projetos com mais eficiência e com menos esforço ao localizar grupos de problemas que compartilham um tema, entre projetos e objetivos."
msgid "Promotions|This feature is locked."
msgstr ""
@@ -10640,7 +10667,7 @@ msgid "Promotions|Upgrade plan"
msgstr ""
msgid "Prompt users to upload SSH keys"
-msgstr ""
+msgstr "Solicitar que os utilizadores enviem chaves SSH"
msgid "Protected"
msgstr ""
@@ -10917,9 +10944,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11059,7 +11083,7 @@ msgid "Reopen epic"
msgstr ""
msgid "Reopen milestone"
-msgstr ""
+msgstr "Reabrir objetivo"
msgid "Repair authentication"
msgstr ""
@@ -11284,6 +11308,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -11329,7 +11356,7 @@ msgid "Reviewing"
msgstr ""
msgid "Reviewing (merge request !%{mergeRequestId})"
-msgstr ""
+msgstr "A rever (pedido de mesclagem !%{mergeRequestId})"
msgid "Revoke"
msgstr ""
@@ -11560,7 +11587,7 @@ msgid "Search merge requests"
msgstr ""
msgid "Search milestones"
-msgstr ""
+msgstr "Pesquisar objetivos"
msgid "Search or filter results..."
msgstr ""
@@ -12354,13 +12381,13 @@ msgid "SortOptions|Manual"
msgstr ""
msgid "SortOptions|Milestone due date"
-msgstr ""
+msgstr "Data de vencimento do objetivo"
msgid "SortOptions|Milestone due later"
-msgstr ""
+msgstr "Objetivo que finalizam mais tarde"
msgid "SortOptions|Milestone due soon"
-msgstr ""
+msgstr "Objetivo que finaliza em breve"
msgid "SortOptions|More weight"
msgstr ""
@@ -12519,7 +12546,7 @@ msgid "Start Web Terminal"
msgstr ""
msgid "Start a %{new_merge_request} with these changes"
-msgstr ""
+msgstr "Iniciar um %{new_merge_request} a partir destas alterações"
msgid "Start a new merge request"
msgstr ""
@@ -13079,7 +13106,7 @@ msgid "The character highlighter helps you keep the subject line to %{titleLengt
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 "O estágio de codificação mostra a hora do primeiro envio para criar o pedido de mesclagem. Os dados serão adicionados, automaticamente,, assim que criares o teu primeiro pedido de mesclagem."
+msgstr "A fase de codificação mostra a hora do primeiro envio para criar o pedido de mesclagem. Os dados serão adicionados, automaticamente,, assim que criares o teu primeiro pedido de mesclagem."
msgid "The collection of events added to the data gathered for that stage."
msgstr ""
@@ -13135,6 +13162,9 @@ 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 ""
@@ -13148,7 +13178,7 @@ 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 ""
+msgstr "A etapa do problema mostra o tempo necessário para criar um problema para atribuir o problema a um objetivo ou adicionar o problema a uma lista no teu Painel de Problemas. Começa a criar problemas para ver os dados desta etapa."
msgid "The license was removed. GitLab has fallen back on the previous license."
msgstr ""
@@ -13229,7 +13259,7 @@ 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 ""
+msgstr "A coleta de dados do pseudomizador está desativada. Quando ativado, o GitLab executará um trabalho em segundo produzir que produzirá CSVs com pseudónimo da base de dados do GitLab que serão enviados no diretório de armazenamento de objetos configurados."
msgid "The remote mirror took to long to complete."
msgstr ""
@@ -13274,7 +13304,7 @@ 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 ""
+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"
msgstr ""
@@ -13346,7 +13376,7 @@ msgid "There are no issues to show"
msgstr ""
msgid "There are no labels yet"
-msgstr "Não há ainda rótulos"
+msgstr "Não há ainda etiquetas"
msgid "There are no open issues"
msgstr ""
@@ -13531,6 +13561,9 @@ 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}."
+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 ""
@@ -13959,7 +13992,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 "Para mover ou copiar todo um projeto do GitLab de outra instalação do GitLab para este, navega até a página de definições do projeto original, gera um ficheiro de exportação e envia-o aqui."
msgid "To only use CI/CD features for an external repository, choose <strong>CI/CD for external repo</strong>."
msgstr ""
@@ -14085,7 +14118,7 @@ msgid "Track activity with Contribution Analytics."
msgstr ""
msgid "Track groups of issues that share a theme, across projects and milestones"
-msgstr ""
+msgstr "Acompanhar grupos de problemas que compartilham um tema, através de projetos e objetivos"
msgid "Track time with quick actions"
msgstr ""
@@ -14382,7 +14415,7 @@ msgid "Updated %{updated_at} by %{updated_by}"
msgstr ""
msgid "Updating"
-msgstr ""
+msgstr "A atualizar"
msgid "Upgrade plan to unlock Canary Deployments feature"
msgstr ""
@@ -14409,31 +14442,31 @@ msgid "Upgrade your plan to improve Merge Requests."
msgstr ""
msgid "Upload <code>GoogleCodeProjectHosting.json</code> here:"
-msgstr ""
+msgstr "Enviar <code>GoogleCodeProjectHosting.json</code> aqui:"
msgid "Upload CSV file"
-msgstr ""
+msgstr "Enviar ficheiro CSV"
msgid "Upload New File"
-msgstr ""
+msgstr "Enviar Novo Ficheiro"
msgid "Upload a certificate for your domain with all intermediates"
-msgstr ""
+msgstr "Enviar um certificado para o teu domínio com todos os intermediários"
msgid "Upload a private key for your certificate"
-msgstr ""
+msgstr "Enviar uma chave privada do teu certificado"
msgid "Upload file"
-msgstr ""
+msgstr "Enviar ficheiro"
msgid "Upload file does not exist"
msgstr ""
msgid "Upload object map"
-msgstr ""
+msgstr "Enviar mapa de objetos"
msgid "UploadLink|click to upload"
-msgstr ""
+msgstr "clica para enviar"
msgid "Uploaded on"
msgstr ""
@@ -14523,7 +14556,7 @@ msgid "Use an one time password authenticator on your mobile device or computer
msgstr ""
msgid "Use group milestones to manage issues from multiple projects in the same milestone."
-msgstr ""
+msgstr "Utiliza o grupo de objetivos para gerir problemas de vários projetos no mesmo objetivo."
msgid "Use one line per URI"
msgstr ""
@@ -14606,7 +14639,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -14802,7 +14835,7 @@ msgid "UserProfile|You haven't created any personal projects."
msgstr ""
msgid "UserProfile|You haven't created any snippets."
-msgstr "UserProfile|Não criaste nenhuns fragmentos."
+msgstr "UserProfileNão criaste nenhuns fragmentos."
msgid "UserProfile|Your projects can be available publicly, internally, or privately, at your choice."
msgstr ""
@@ -15326,7 +15359,7 @@ msgid "Write access allowed"
msgstr ""
msgid "Write milestone description..."
-msgstr ""
+msgstr "Escreve a descrição do objetivo..."
msgid "Wrong extern UID provided. Make sure Auth0 is configured correctly."
msgstr ""
@@ -15401,7 +15434,7 @@ msgid "You can also test your %{gitlab_ci_yml} in %{lint_link_start}CI Lint%{lin
msgstr "Também podes testar o teu %{gitlab_ci_yml} em %{lint_link_start}CI Lint%{lint_link_end}"
msgid "You can also upload existing files from your computer using the instructions below."
-msgstr ""
+msgstr "Também podes enviar ficheiros existentes do teu computador ao usar as instruções abaixo."
msgid "You can create files directly in GitLab using one of the following options."
msgstr ""
@@ -15488,7 +15521,7 @@ 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 ""
+msgstr "Não tens permissão para executar o Terminal de Web. Por favor, contacta um administrador de projeto."
msgid "You do not have the correct permissions to override the settings from the LDAP group sync."
msgstr ""
@@ -15661,9 +15694,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16254,6 +16284,9 @@ msgstr[1] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16346,6 +16379,9 @@ 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 ""
@@ -16455,7 +16491,7 @@ msgid "mrWidget|No approval required"
msgstr ""
msgid "mrWidget|No approval required; you can still approve"
-msgstr ""
+msgstr "Nenhuma aprovação necessária; ainda podes aprovar"
msgid "mrWidget|Open in Web IDE"
msgstr ""
diff --git a/locale/ro_RO/gitlab.po b/locale/ro_RO/gitlab.po
index 4055a0fe933..3d77b1552b4 100644
--- a/locale/ro_RO/gitlab.po
+++ b/locale/ro_RO/gitlab.po
@@ -897,9 +897,27 @@ 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 ""
@@ -3531,9 +3549,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3543,6 +3558,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4794,6 +4812,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5745,12 +5766,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr ""
-
-msgid "FirstPushedBy|pushed by"
-msgstr ""
-
msgid "Fixed date"
msgstr ""
@@ -6918,6 +6933,12 @@ 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 ""
@@ -8910,6 +8931,9 @@ msgstr ""
msgid "No repository"
msgstr ""
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8919,9 +8943,15 @@ msgstr ""
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9435,9 +9465,6 @@ msgstr ""
msgid "Pipeline"
msgstr ""
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr ""
@@ -10974,9 +11001,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11343,6 +11367,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13197,6 +13224,9 @@ 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 ""
@@ -13593,6 +13623,9 @@ 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}."
+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 ""
@@ -14670,7 +14703,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15726,9 +15759,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16332,6 +16362,9 @@ msgstr[2] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16425,6 +16458,9 @@ 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 ""
diff --git a/locale/ru/gitlab.po b/locale/ru/gitlab.po
index 68ce5b4d64d..521c7ea6203 100644
--- a/locale/ru/gitlab.po
+++ b/locale/ru/gitlab.po
@@ -936,9 +936,27 @@ 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 "Укажите домен, который будет иÑпользоватьÑÑ Ð¿Ð¾ умолчанию Ð´Ð»Ñ Ð²Ñех проектов в Auto Review приложениÑÑ… и ÑтадиÑÑ… 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 ""
+
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr "При Ñоздании новой переменной Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ð¾Ð½Ð° будет защищена по умолчанию."
@@ -3579,9 +3597,6 @@ msgstr "РееÑÑ‚Ñ€ Контейнеров"
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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}:"
@@ -3591,6 +3606,9 @@ msgstr "GitLab поддерживает до трех уровней имён о
msgid "ContainerRegistry|How to use the Container Registry"
msgstr "Как иÑпользовать РееÑÑ‚Ñ€ Контейнеров"
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr "Узнайте больше"
@@ -4843,6 +4861,9 @@ msgstr "ЗаканчиваетÑÑ Ð² (UTC)"
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5795,12 +5816,6 @@ msgstr "Завершено"
msgid "First day of the week"
msgstr "Первый день недели"
-msgid "FirstPushedBy|First"
-msgstr "Первый"
-
-msgid "FirstPushedBy|pushed by"
-msgstr "отправлено автором"
-
msgid "Fixed date"
msgstr ""
@@ -6969,6 +6984,12 @@ 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 "Идентификатор"
@@ -8965,6 +8986,9 @@ msgstr ""
msgid "No repository"
msgstr "Ðет репозиториÑ"
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8974,9 +8998,15 @@ msgstr "Ðет раÑпиÑаний"
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9491,9 +9521,6 @@ msgstr ""
msgid "Pipeline"
msgstr "Ð¡Ð±Ð¾Ñ€Ð¾Ñ‡Ð½Ð°Ñ Ð»Ð¸Ð½Ð¸Ñ"
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr "РаÑпиÑание Сборочной Линии"
@@ -11031,9 +11058,6 @@ msgstr ""
msgid "Registry"
msgstr "РееÑÑ‚Ñ€"
-msgid "Related Commits"
-msgstr "СвÑзанные коммиты"
-
msgid "Related Deployed Jobs"
msgstr "СвÑзанные Ð—Ð°Ð´Ð°Ð½Ð¸Ñ Ð Ð°Ð·Ð²ÐµÑ€Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ"
@@ -11402,6 +11426,9 @@ msgstr "Метрики откликов (NGINX)"
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr "Продолжить"
@@ -13259,6 +13286,9 @@ 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 ""
@@ -13655,6 +13685,9 @@ 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}."
+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 ""
@@ -14734,7 +14767,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15791,9 +15824,6 @@ msgstr ""
msgid "Your Groups"
msgstr "Ваши Группы"
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ Вашем Kubernetes клаÑтере на Ñтой Ñтранице по-прежнему доÑтупна Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ, но мы рекомендуем вам отключить его перед переконфигурированием"
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16410,6 +16440,9 @@ msgstr[3] "завершенные ÑкземплÑры"
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16504,6 +16537,9 @@ 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 ""
diff --git a/locale/sk_SK/gitlab.po b/locale/sk_SK/gitlab.po
index 7bb9f36a887..763bb4a46f8 100644
--- a/locale/sk_SK/gitlab.po
+++ b/locale/sk_SK/gitlab.po
@@ -936,9 +936,27 @@ 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 ""
@@ -3579,9 +3597,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3591,6 +3606,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4843,6 +4861,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5795,12 +5816,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr ""
-
-msgid "FirstPushedBy|pushed by"
-msgstr ""
-
msgid "Fixed date"
msgstr ""
@@ -6969,6 +6984,12 @@ 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 ""
@@ -8965,6 +8986,9 @@ msgstr ""
msgid "No repository"
msgstr ""
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8974,9 +8998,15 @@ msgstr ""
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9491,9 +9521,6 @@ msgstr ""
msgid "Pipeline"
msgstr ""
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr ""
@@ -11031,9 +11058,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11402,6 +11426,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13259,6 +13286,9 @@ 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 ""
@@ -13655,6 +13685,9 @@ 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}."
+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 ""
@@ -14734,7 +14767,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15791,9 +15824,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16410,6 +16440,9 @@ msgstr[3] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16504,6 +16537,9 @@ 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 ""
diff --git a/locale/sq_AL/gitlab.po b/locale/sq_AL/gitlab.po
index f9454822dc4..d136efa8675 100644
--- a/locale/sq_AL/gitlab.po
+++ b/locale/sq_AL/gitlab.po
@@ -858,9 +858,27 @@ 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 ""
@@ -3483,9 +3501,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3495,6 +3510,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4745,6 +4763,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5695,12 +5716,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr ""
-
-msgid "FirstPushedBy|pushed by"
-msgstr ""
-
msgid "Fixed date"
msgstr ""
@@ -6867,6 +6882,12 @@ 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 ""
@@ -8855,6 +8876,9 @@ msgstr ""
msgid "No repository"
msgstr ""
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8864,9 +8888,15 @@ msgstr ""
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9379,9 +9409,6 @@ msgstr ""
msgid "Pipeline"
msgstr ""
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr ""
@@ -10917,9 +10944,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11284,6 +11308,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13135,6 +13162,9 @@ 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 ""
@@ -13531,6 +13561,9 @@ 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}."
+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 ""
@@ -14606,7 +14639,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15661,9 +15694,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16254,6 +16284,9 @@ msgstr[1] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16346,6 +16379,9 @@ 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 ""
diff --git a/locale/sr_CS/gitlab.po b/locale/sr_CS/gitlab.po
index 1156a705653..4b89734ad03 100644
--- a/locale/sr_CS/gitlab.po
+++ b/locale/sr_CS/gitlab.po
@@ -897,9 +897,27 @@ 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 ""
@@ -3531,9 +3549,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3543,6 +3558,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4794,6 +4812,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5745,12 +5766,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr ""
-
-msgid "FirstPushedBy|pushed by"
-msgstr ""
-
msgid "Fixed date"
msgstr ""
@@ -6918,6 +6933,12 @@ 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 ""
@@ -8910,6 +8931,9 @@ msgstr ""
msgid "No repository"
msgstr ""
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8919,9 +8943,15 @@ msgstr ""
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9435,9 +9465,6 @@ msgstr ""
msgid "Pipeline"
msgstr ""
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr ""
@@ -10974,9 +11001,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11343,6 +11367,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13197,6 +13224,9 @@ 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 ""
@@ -13593,6 +13623,9 @@ 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}."
+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 ""
@@ -14670,7 +14703,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15726,9 +15759,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16332,6 +16362,9 @@ msgstr[2] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16425,6 +16458,9 @@ 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 ""
diff --git a/locale/sr_SP/gitlab.po b/locale/sr_SP/gitlab.po
index cdbb13acb65..8a796c7d2c4 100644
--- a/locale/sr_SP/gitlab.po
+++ b/locale/sr_SP/gitlab.po
@@ -897,9 +897,27 @@ 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 ""
@@ -3531,9 +3549,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3543,6 +3558,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4794,6 +4812,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5745,12 +5766,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr ""
-
-msgid "FirstPushedBy|pushed by"
-msgstr ""
-
msgid "Fixed date"
msgstr ""
@@ -6918,6 +6933,12 @@ 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 ""
@@ -8910,6 +8931,9 @@ msgstr ""
msgid "No repository"
msgstr ""
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8919,9 +8943,15 @@ msgstr ""
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9435,9 +9465,6 @@ msgstr ""
msgid "Pipeline"
msgstr ""
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr ""
@@ -10974,9 +11001,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11343,6 +11367,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13197,6 +13224,9 @@ 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 ""
@@ -13593,6 +13623,9 @@ 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}."
+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 ""
@@ -14670,7 +14703,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15726,9 +15759,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16332,6 +16362,9 @@ msgstr[2] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16425,6 +16458,9 @@ 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 ""
diff --git a/locale/sv_SE/gitlab.po b/locale/sv_SE/gitlab.po
index 059ac54c5b3..5fc6478d022 100644
--- a/locale/sv_SE/gitlab.po
+++ b/locale/sv_SE/gitlab.po
@@ -858,9 +858,27 @@ 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 ""
@@ -3483,9 +3501,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3495,6 +3510,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4745,6 +4763,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5695,12 +5716,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr ""
-
-msgid "FirstPushedBy|pushed by"
-msgstr ""
-
msgid "Fixed date"
msgstr ""
@@ -6867,6 +6882,12 @@ 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 ""
@@ -8855,6 +8876,9 @@ msgstr ""
msgid "No repository"
msgstr ""
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8864,9 +8888,15 @@ msgstr ""
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9379,9 +9409,6 @@ msgstr ""
msgid "Pipeline"
msgstr ""
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr ""
@@ -10917,9 +10944,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11284,6 +11308,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13135,6 +13162,9 @@ 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 ""
@@ -13531,6 +13561,9 @@ 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}."
+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 ""
@@ -14606,7 +14639,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15661,9 +15694,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16254,6 +16284,9 @@ msgstr[1] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16346,6 +16379,9 @@ 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 ""
diff --git a/locale/sw_KE/gitlab.po b/locale/sw_KE/gitlab.po
index 8d2bfb693fc..3b0ac677db7 100644
--- a/locale/sw_KE/gitlab.po
+++ b/locale/sw_KE/gitlab.po
@@ -858,9 +858,27 @@ 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 ""
@@ -3483,9 +3501,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3495,6 +3510,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4745,6 +4763,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5695,12 +5716,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr ""
-
-msgid "FirstPushedBy|pushed by"
-msgstr ""
-
msgid "Fixed date"
msgstr ""
@@ -6867,6 +6882,12 @@ 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 ""
@@ -8855,6 +8876,9 @@ msgstr ""
msgid "No repository"
msgstr ""
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8864,9 +8888,15 @@ msgstr ""
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9379,9 +9409,6 @@ msgstr ""
msgid "Pipeline"
msgstr ""
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr ""
@@ -10917,9 +10944,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11284,6 +11308,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13135,6 +13162,9 @@ 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 ""
@@ -13531,6 +13561,9 @@ 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}."
+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 ""
@@ -14606,7 +14639,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15661,9 +15694,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16254,6 +16284,9 @@ msgstr[1] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16346,6 +16379,9 @@ 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 ""
diff --git a/locale/tr_TR/gitlab.po b/locale/tr_TR/gitlab.po
index 18def601116..a35ff0ce09f 100644
--- a/locale/tr_TR/gitlab.po
+++ b/locale/tr_TR/gitlab.po
@@ -858,9 +858,27 @@ msgstr "Yeni projeler için paylaşılan çalıştırıcıları etkinleştir"
msgid "AdminSettings|Environment variables are protected by default"
msgstr "Ortam değişkenleri öntanımlı olarak korunur"
+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 "Her projenin Otomatik İnceleme Uygulamaları ve Otomatik Dağıtma aşamaları için varsayılan olarak kullanılacak bir etki alanı belirleyin."
+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 "Yeni bir ortam değişkeni oluştururken, öntanımlı olarak korunacaktır."
@@ -3483,9 +3501,6 @@ msgstr "Kapsayıcı Kaydı"
msgid "Container registry images"
msgstr "Kapsayıcı kaydı resimleri"
-msgid "ContainerRegistry|Created"
-msgstr "OluÅŸturuldu:"
-
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 ""
@@ -3495,6 +3510,9 @@ msgstr "GitLab, 3 seviyeye kadar görüntü isimlerini destekler. Aşağıdaki g
msgid "ContainerRegistry|How to use the Container Registry"
msgstr "Kapsayıcı Kaydı nasıl kullanılır?"
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr "Hakkında daha fazlasını öğren"
@@ -4745,6 +4763,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr "Aramak için en az üç karakter girin"
@@ -5695,12 +5716,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr "Ä°lk"
-
-msgid "FirstPushedBy|pushed by"
-msgstr "Tarafından yollandı:"
-
msgid "Fixed date"
msgstr "Düzeltilme zamanı"
@@ -6867,6 +6882,12 @@ msgstr "Ä°ncele"
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 ""
@@ -8855,6 +8876,9 @@ msgstr ""
msgid "No repository"
msgstr ""
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8864,9 +8888,15 @@ msgstr ""
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9379,9 +9409,6 @@ msgstr ""
msgid "Pipeline"
msgstr ""
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr ""
@@ -10917,9 +10944,6 @@ msgstr ""
msgid "Registry"
msgstr "Kayıt Defteri"
-msgid "Related Commits"
-msgstr ""
-
msgid "Related Deployed Jobs"
msgstr ""
@@ -11284,6 +11308,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13135,6 +13162,9 @@ 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 ""
@@ -13531,6 +13561,9 @@ 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}."
+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 ""
@@ -14606,7 +14639,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15661,9 +15694,6 @@ msgstr ""
msgid "Your Groups"
msgstr "Gruplarınız"
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16254,6 +16284,9 @@ msgstr[1] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16346,6 +16379,9 @@ 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 ""
diff --git a/locale/uk/gitlab.po b/locale/uk/gitlab.po
index 21c49e5c6f9..b802c6fa323 100644
--- a/locale/uk/gitlab.po
+++ b/locale/uk/gitlab.po
@@ -936,9 +936,27 @@ msgstr "Увімкнути загальні runner'и Ð´Ð»Ñ Ð½Ð¾Ð²Ð¸Ñ… прое
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 "Вкажіть домен, Ñкий буде викориÑтовуватиÑÑ Ð² проекті за замовчуваннÑм Ð´Ð»Ñ Ñтадій 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 ""
+
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr "При Ñтворенні нової змінної Ñередовища вона буде захищена за замовчуваннÑм."
@@ -3538,7 +3556,7 @@ msgid "Confirmation required"
msgstr "Ðеобхідне підтвердженнÑ"
msgid "Congratulations! You have enabled Two-factor Authentication!"
-msgstr ""
+msgstr "Вітаємо! Ви увімкнули двофакторну автентифікацію!"
msgid "Connect"
msgstr "Підключити"
@@ -3579,9 +3597,6 @@ msgstr "РеєÑÑ‚Ñ€ Контейнерів"
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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}:"
@@ -3591,6 +3606,9 @@ msgstr "GitLab підтримує до 3 рівнів імен образів. Ð
msgid "ContainerRegistry|How to use the Container Registry"
msgstr "Як викориÑтовувати РеєÑÑ‚Ñ€ Контейнерів"
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr "ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ про"
@@ -4457,7 +4475,7 @@ msgid "Disable shared Runners"
msgstr "Вимкнути загальні Runner'и"
msgid "Disable two-factor authentication"
-msgstr ""
+msgstr "Вимкнути двофакторну автентифікацію"
msgid "Disabled"
msgstr "Вимкнено"
@@ -4843,6 +4861,9 @@ msgstr "ЗавершуєтьÑÑ Ð¾ (за Грінвічем)"
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5795,12 +5816,6 @@ msgstr "Завершено"
msgid "First day of the week"
msgstr "Перший день тижнÑ"
-msgid "FirstPushedBy|First"
-msgstr "Перший"
-
-msgid "FirstPushedBy|pushed by"
-msgstr "відправлено"
-
msgid "Fixed date"
msgstr "Дата виправленнÑ"
@@ -6306,10 +6321,10 @@ msgid "Geo|The URL defined on the primary node that secondary nodes should use t
msgstr "URL-адреÑа, визначена на оÑновному вузлі, Ñку викориÑтовують вторинні вузли, щоб зв'ÑзатиÑÑ Ð· ним. Повертає \"url\", Ñкщо не вÑтановлено"
msgid "Geo|The database is currently %{db_lag} behind the primary node."
-msgstr ""
+msgstr "База даних зараз %{db_lag} позаду оÑновного вузла."
msgid "Geo|The node is currently %{minutes_behind} behind the primary node."
-msgstr ""
+msgstr "Вузол зараз %{minutes_behind} позаду оÑновного вузла."
msgid "Geo|This is a primary node"
msgstr "Це — первинний вузол"
@@ -6318,7 +6333,7 @@ msgid "Geo|Tracking entry for project (%{project_id}) was successfully removed."
msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð²Ñ–Ð´ÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ñƒ (%{project_id}) уÑпішно видалено."
msgid "Geo|Tracking entry for upload (%{type}/%{id}) was successfully removed."
-msgstr ""
+msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð²Ñ–Ð´ÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ (%{type}/%{id}) було уÑпішно видалено."
msgid "Geo|Tracking entry will be removed. Are you sure?"
msgstr "Буде видалено Ð·Ð°Ð¿Ð¸Ñ Ð¿Ñ€Ð¾ відÑтеженнÑ. Ви впевнені?"
@@ -6969,6 +6984,12 @@ msgstr "ОглÑд"
msgid "IP Address"
msgstr "IP-адреÑа"
+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 "Ідентифікатор"
@@ -7096,7 +7117,7 @@ msgid "Import tasks"
msgstr ""
msgid "Import tasks from Phabricator into issues"
-msgstr ""
+msgstr "Імпортувати задачі (tasks) із Phabricator Ñк задачі"
msgid "Import timed out. Import took longer than %{import_jobs_expiration} seconds"
msgstr ""
@@ -8965,6 +8986,9 @@ msgstr "Ðемає відправок (push) за вказаний період
msgid "No repository"
msgstr "Ðемає репозиторію"
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr "Runner'ів не знайдено"
@@ -8974,9 +8998,15 @@ msgstr "Ðемає розкладів"
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9474,13 +9504,13 @@ msgid "Personal project creation is not allowed. Please contact your administrat
msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿ÐµÑ€Ñональних проектів не дозволено. Будь лаÑка, звернітьÑÑ Ð´Ð¾ Ñвого адмініÑтратор із питаннÑми"
msgid "Phabricator Server Import"
-msgstr ""
+msgstr "Ð†Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ñ‚Ñ Ñ–Ð· Ñерверу Phabricator"
msgid "Phabricator Server URL"
-msgstr ""
+msgstr "URL-адреÑа Ñерверу Phabricator"
msgid "Phabricator Tasks"
-msgstr ""
+msgstr "Задачі Phabricator"
msgid "Pick a name"
msgstr "Виберіть ім'Ñ"
@@ -9491,9 +9521,6 @@ msgstr "PIN-код"
msgid "Pipeline"
msgstr "Конвеєр"
-msgid "Pipeline ID (IID)"
-msgstr "Ідентифікатор конвеєра (IID)"
-
msgid "Pipeline Schedule"
msgstr "Розклад Конвеєра"
@@ -11014,7 +11041,7 @@ msgid "Register U2F device"
msgstr "ЗареєÑтрувати приÑтрій U2F"
msgid "Register Universal Two-Factor (U2F) Device"
-msgstr ""
+msgstr "ЗареєÑтрувати універÑальний двофакторний приÑтрій (U2F)"
msgid "Register and see your runners for this group."
msgstr "ЗареєÑтруйте Ñ– переглÑдайте ваші Runner’и Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— групи."
@@ -11031,9 +11058,6 @@ msgstr "РеєÑтраціÑ"
msgid "Registry"
msgstr "РеєÑÑ‚Ñ€"
-msgid "Related Commits"
-msgstr "Пов'Ñзані Коміти"
-
msgid "Related Deployed Jobs"
msgstr "Пов’Ñзані розгорнуті Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ (Jobs)"
@@ -11402,6 +11426,9 @@ msgstr "Метрики відповідей (NGINX)"
msgid "Restart Terminal"
msgstr "ПерезапуÑтити термінал"
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr "Продовжити"
@@ -13259,6 +13286,9 @@ 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 ""
@@ -13335,7 +13365,7 @@ 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 ""
+msgstr "ДоÑтуп до проекту Ñ” в будь-кого, незалежно від автентифікації."
msgid "The project can be accessed without any authentication."
msgstr "ДоÑтуп до проекту можливий без будь-Ñкої перевірки автентичноÑÑ‚Ñ–."
@@ -13410,7 +13440,7 @@ 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 ""
+msgstr "Унікальний ідентифікатор Ð´Ð»Ñ Geo вузла. Має задовольнÑти \"geo_node_name\", Ñкщо воно вÑтановлено в gitlab.rb, інакше має задовольнÑти \"external_url\""
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."
@@ -13434,7 +13464,7 @@ msgid "The user map is a mapping of the FogBugz users that participated on your
msgstr "Мапа кориÑтувачів — це правила Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувачів FogBugz, Ñкі приймали учаÑÑ‚ÑŒ у ваших проектах до Gitlab (зокрема Ñ—Ñ… імен та Ð°Ð´Ñ€ÐµÑ ÐµÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð¾Ñ— пошти). Ви можете вноÑити зміни шлÑхом Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– нижче."
msgid "The user-facing URL of the Geo node."
-msgstr ""
+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."
@@ -13655,6 +13685,9 @@ 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}."
+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 ""
@@ -14324,13 +14357,13 @@ msgid "Twitter"
msgstr "Twitter"
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 "Двофакторну автентифікацію було вимкнено Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ кориÑтувача"
@@ -14342,7 +14375,7 @@ 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 "U2F працює лише з веб-Ñайтами з підтримкою HTTPS. Ð”Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð±Ñ–Ð»ÑŒÑˆ детальної інформації звернітьÑÑ Ð´Ð¾ адмініÑтратора."
@@ -14645,7 +14678,7 @@ msgid "Use Service Desk to connect with your users (e.g. to offer customer suppo
msgstr "ВикориÑтовуйте Service Desk Ð´Ð»Ñ Ð·Ð²â€™Ñзку з вашими кориÑтувачами (наприклад, щоб запропонувати клієнтÑьку підтримку) через електронну пошту безпоÑередньо із GitLab"
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 ""
@@ -14734,7 +14767,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15624,7 +15657,7 @@ msgid "You do not have the correct permissions to override the settings from the
msgstr "У Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” необхідних прав доÑтупу, щоб перевизначити Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñинхронізації LDAP-груп."
msgid "You don't have any U2F devices registered yet."
-msgstr ""
+msgstr "У Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” жодного зареєÑтрованого U2F приÑтрою."
msgid "You don't have any active chat names."
msgstr "У Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” активних імен Ð´Ð»Ñ Ñ‡Ð°Ñ‚Ñ–Ð²."
@@ -15791,9 +15824,6 @@ msgstr "Ваші ключі GPG (%{count})"
msgid "Your Groups"
msgstr "Ваші групи"
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr "Ð†Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ ваш Kubernetes-клаÑтер вÑе ще доÑтупна Ð´Ð»Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° цій Ñторінці, але ми радимо вимкнути Ñ– повторно налаштувати"
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16410,6 +16440,9 @@ msgstr[3] "завершених інÑтанÑів"
msgid "invalid milestone state `%{state}`"
msgstr "некоректний Ñтан етапу '%{state}'"
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr "увімкнено."
@@ -16504,6 +16537,9 @@ msgstr "ВикориÑÑ‚Ð°Ð½Ð½Ñ %{metricsLinkStart} пам’ÑÑ‚Ñ– %{metricsLi
msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage is %{emphasisStart} unchanged %{emphasisEnd} at %{memoryFrom}MB"
msgstr "ВикориÑÑ‚Ð°Ð½Ð½Ñ %{metricsLinkStart} пам’ÑÑ‚Ñ– %{metricsLinkEnd} %{emphasisStart} не змінилоÑÑ %{emphasisEnd} %{memoryFrom}Мб"
+msgid "mrWidget|Added to the merge train at position %{mergeTrainPosition}"
+msgstr ""
+
msgid "mrWidget|Added to the merge train by"
msgstr ""
diff --git a/locale/zh_CN/gitlab.po b/locale/zh_CN/gitlab.po
index ae644040a5a..77064035305 100644
--- a/locale/zh_CN/gitlab.po
+++ b/locale/zh_CN/gitlab.po
@@ -819,9 +819,27 @@ msgstr "为新项目å¯ç”¨å…±äº«Runner"
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 "为æ¯ä¸ªé¡¹ç›®çš„自动审阅应用 (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 ""
+
msgid "AdminSettings|When creating a new environment variable it will be protected by default."
msgstr "创建一个新的环境å˜é‡æ—¶ï¼Œå®ƒä¼šè¢«é»˜è®¤ä¿æŠ¤ã€‚"
@@ -3435,9 +3453,6 @@ msgstr "容器镜åƒåº“"
msgid "Container registry images"
msgstr "容器镜åƒåº“é•œåƒ"
-msgid "ContainerRegistry|Created"
-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}:"
@@ -3447,6 +3462,9 @@ msgstr "GitLab 最多支æŒ3个级别的镜åƒå‘½å。以下镜åƒå称示例å
msgid "ContainerRegistry|How to use the Container Registry"
msgstr "如何使用容器镜åƒåº“"
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr "进一步了解"
@@ -4696,6 +4714,9 @@ msgstr "结æŸäºŽ(UTC)"
msgid "Enforce DNS rebinding attack protection"
msgstr "强制DNSé‡æ–°ç»‘定攻击ä¿æŠ¤"
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr "请至少输入三个字符æ‰å¯æœç´¢"
@@ -5645,12 +5666,6 @@ msgstr "已完æˆ"
msgid "First day of the week"
msgstr "æ¯å‘¨çš„起始日"
-msgid "FirstPushedBy|First"
-msgstr "首次推é€"
-
-msgid "FirstPushedBy|pushed by"
-msgstr "推é€è€…:"
-
msgid "Fixed date"
msgstr "ä¿®å¤æ—¥æœŸ"
@@ -6816,6 +6831,12 @@ msgstr "审阅"
msgid "IP Address"
msgstr "IP地å€"
+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 "身份标识"
@@ -8800,6 +8821,9 @@ msgstr "所选时间段无推é€ã€‚"
msgid "No repository"
msgstr "无仓库"
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr "未找到Runner"
@@ -8809,9 +8833,15 @@ msgstr "无计划"
msgid "No start date"
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 "Node was successfully created."
msgstr "节点已æˆåŠŸåˆ›å»ºã€‚"
@@ -9323,9 +9353,6 @@ msgstr "Pinç "
msgid "Pipeline"
msgstr "æµæ°´çº¿"
-msgid "Pipeline ID (IID)"
-msgstr "æµæ°´çº¿ID (IID)"
-
msgid "Pipeline Schedule"
msgstr "æµæ°´çº¿è®¡åˆ’"
@@ -10860,9 +10887,6 @@ msgstr "注册"
msgid "Registry"
msgstr "é•œåƒåº“"
-msgid "Related Commits"
-msgstr "相关的æ交"
-
msgid "Related Deployed Jobs"
msgstr "相关的部署作业"
@@ -11225,6 +11249,9 @@ msgstr "å“应指标(NGINX)"
msgid "Restart Terminal"
msgstr "é‡å¯ç»ˆç«¯"
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr "æ¢å¤"
@@ -13073,6 +13100,9 @@ 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 "无法接å—邀请。"
@@ -13469,6 +13499,9 @@ 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}."
+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 "此用户为“幽çµç”¨æˆ·â€ï¼Œç”¨äºŽæŒæœ‰è¢«åˆ é™¤ç”¨æˆ·çš„所有议题。该用户无法被删除。"
@@ -14542,7 +14575,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15596,9 +15629,6 @@ msgstr "您的GPG密钥 (%{count})"
msgid "Your Groups"
msgstr "您的群组"
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr "在此页é¢ä¸Šçš„Kubernetes集群信æ¯ä»å¯ç¼–辑,但建议您ç¦ç”¨å¹¶é‡æ–°é…ç½®"
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16176,6 +16206,9 @@ msgstr[0] "实例已完æˆ"
msgid "invalid milestone state `%{state}`"
msgstr "æ— æ•ˆçš„é‡Œç¨‹ç¢‘çŠ¶æ€ `%{state}`"
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr "å·²å¯ç”¨ã€‚"
@@ -16267,6 +16300,9 @@ msgstr "%{metricsLinkStart} 内存 %{metricsLinkEnd} å ç”¨ %{emphasisStart} 上
msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage is %{emphasisStart} unchanged %{emphasisEnd} at %{memoryFrom}MB"
msgstr "%{metricsLinkStart} 内存 %{metricsLinkEnd} å ç”¨ %{emphasisStart} æ— å˜åŒ– %{emphasisEnd}, ä¿æŒåœ¨ %{memoryFrom}MB"
+msgid "mrWidget|Added to the merge train at position %{mergeTrainPosition}"
+msgstr ""
+
msgid "mrWidget|Added to the merge train by"
msgstr ""
diff --git a/locale/zh_HK/gitlab.po b/locale/zh_HK/gitlab.po
index af61b64ccb9..8485e17cd0d 100644
--- a/locale/zh_HK/gitlab.po
+++ b/locale/zh_HK/gitlab.po
@@ -819,9 +819,27 @@ 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 ""
@@ -3435,9 +3453,6 @@ msgstr ""
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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 ""
@@ -3447,6 +3462,9 @@ msgstr ""
msgid "ContainerRegistry|How to use the Container Registry"
msgstr ""
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr ""
@@ -4696,6 +4714,9 @@ msgstr ""
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5645,12 +5666,6 @@ msgstr ""
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr "首次推é€"
-
-msgid "FirstPushedBy|pushed by"
-msgstr "推é€è€…:"
-
msgid "Fixed date"
msgstr ""
@@ -6816,6 +6831,12 @@ 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 ""
@@ -8800,6 +8821,9 @@ msgstr ""
msgid "No repository"
msgstr "沒有存儲庫"
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr ""
@@ -8809,9 +8833,15 @@ msgstr "沒有計劃"
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9323,9 +9353,6 @@ msgstr ""
msgid "Pipeline"
msgstr "æµæ°´ç·š"
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr "æµæ°´ç·šè¨ˆåŠƒ"
@@ -10860,9 +10887,6 @@ msgstr ""
msgid "Registry"
msgstr ""
-msgid "Related Commits"
-msgstr "相關的æ交"
-
msgid "Related Deployed Jobs"
msgstr "相關的部署作業"
@@ -11225,6 +11249,9 @@ msgstr ""
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr ""
@@ -13073,6 +13100,9 @@ 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 ""
@@ -13469,6 +13499,9 @@ 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}."
+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 ""
@@ -14542,7 +14575,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15596,9 +15629,6 @@ msgstr ""
msgid "Your Groups"
msgstr ""
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr ""
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16176,6 +16206,9 @@ msgstr[0] ""
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16267,6 +16300,9 @@ 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 ""
diff --git a/locale/zh_TW/gitlab.po b/locale/zh_TW/gitlab.po
index 435c5979172..e7be5df3c80 100644
--- a/locale/zh_TW/gitlab.po
+++ b/locale/zh_TW/gitlab.po
@@ -819,9 +819,27 @@ 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 ""
@@ -3435,9 +3453,6 @@ msgstr "容器登錄表"
msgid "Container registry images"
msgstr ""
-msgid "ContainerRegistry|Created"
-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}:"
@@ -3447,6 +3462,9 @@ msgstr "GitLab 支æ´å¤šé” 3 級的映åƒå稱。以下的映åƒç¯„例å°æ‚¨çš
msgid "ContainerRegistry|How to use the Container Registry"
msgstr "如何使用容器登錄表"
+msgid "ContainerRegistry|Last Updated"
+msgstr ""
+
msgid "ContainerRegistry|Learn more about"
msgstr "了解更多"
@@ -4696,6 +4714,9 @@ msgstr "æ–¼ (UTC) çµæŸ"
msgid "Enforce DNS rebinding attack protection"
msgstr ""
+msgid "Enter IP address range"
+msgstr ""
+
msgid "Enter at least three characters to search"
msgstr ""
@@ -5645,12 +5666,6 @@ msgstr "已完æˆ"
msgid "First day of the week"
msgstr ""
-msgid "FirstPushedBy|First"
-msgstr "第一次"
-
-msgid "FirstPushedBy|pushed by"
-msgstr "推é€è€…:"
-
msgid "Fixed date"
msgstr "修復日期"
@@ -6816,6 +6831,12 @@ msgstr "檢閱"
msgid "IP Address"
msgstr "IP ä½å€"
+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 "識別碼"
@@ -8800,6 +8821,9 @@ msgstr "é¸å–的時間範åœä¸­æ²’有推é€ã€‚"
msgid "No repository"
msgstr "找ä¸åˆ°ç‰ˆæœ¬åº«"
+msgid "No required pipeline"
+msgstr ""
+
msgid "No runners found"
msgstr "找ä¸åˆ°åŸ·è¡Œå™¨"
@@ -8809,9 +8833,15 @@ msgstr "找ä¸åˆ°æŽ’程"
msgid "No start date"
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 "Node was successfully created."
msgstr ""
@@ -9323,9 +9353,6 @@ msgstr ""
msgid "Pipeline"
msgstr "管線"
-msgid "Pipeline ID (IID)"
-msgstr ""
-
msgid "Pipeline Schedule"
msgstr "排程管線"
@@ -10860,9 +10887,6 @@ msgstr ""
msgid "Registry"
msgstr "註冊表"
-msgid "Related Commits"
-msgstr "相關æ交"
-
msgid "Related Deployed Jobs"
msgstr "相關佈署作業"
@@ -11225,6 +11249,9 @@ msgstr "回應指標 (NGINX)"
msgid "Restart Terminal"
msgstr ""
+msgid "Restrict access by IP address"
+msgstr ""
+
msgid "Resume"
msgstr "繼續"
@@ -13073,6 +13100,9 @@ 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 ""
@@ -13469,6 +13499,9 @@ 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}."
+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 ""
@@ -14542,7 +14575,7 @@ 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 memembers to a project is done through Project Settings. Click on %{emphasisStart}Settings%{emphasisEnd}."
+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}."
@@ -15596,9 +15629,6 @@ msgstr ""
msgid "Your Groups"
msgstr "你的群組"
-msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
-msgstr "您的Kuberneteså¢é›†è³‡è¨Šä»ç„¶å¯ä»¥ç·¨è¼¯ï¼Œä½†å»ºè­°æ‚¨ç¦ç”¨ä¸¦é‡æ–°è¨­å®šã€‚"
-
msgid "Your Primary Email will be used for avatar detection."
msgstr ""
@@ -16176,6 +16206,9 @@ msgstr[0] "實例完æˆ"
msgid "invalid milestone state `%{state}`"
msgstr ""
+msgid "is an invalid IP address range"
+msgstr ""
+
msgid "is enabled."
msgstr ""
@@ -16267,6 +16300,9 @@ msgstr "%{metricsLinkStart} 記憶體 %{metricsLinkEnd} 使用 %{emphasisStart}
msgid "mrWidget|%{metricsLinkStart} Memory %{metricsLinkEnd} usage is %{emphasisStart} unchanged %{emphasisEnd} at %{memoryFrom}MB"
msgstr "%{metricsLinkStart} 記憶體 %{metricsLinkEnd} 使用 %{emphasisStart} 沒有發生變化 %{emphasisEnd} 於 %{memoryFrom} MB"
+msgid "mrWidget|Added to the merge train at position %{mergeTrainPosition}"
+msgstr ""
+
msgid "mrWidget|Added to the merge train by"
msgstr ""
diff --git a/qa/README.md b/qa/README.md
index ef6f202464d..124a79a36b4 100644
--- a/qa/README.md
+++ b/qa/README.md
@@ -34,8 +34,23 @@ using `package-and-qa` manual action, to test if everything works fine.
## How can I use it?
-You can use GitLab QA to exercise tests on any live instance! For example, the
-following call would login to a local [GDK] instance and run all specs in
+You can use GitLab QA to exercise tests on any live instance! If you don't
+have an instance available you can follow the instructions below to use
+the [GitLab Development Kit (GDK)][GDK].
+This is the recommended option if you would like to contribute to the tests.
+
+### Run the end-to-end tests in a local development environment
+
+Follow the GDK instructions to [prepare](https://gitlab.com/gitlab-org/gitlab-development-kit/blob/master/doc/prepare.md)
+and [install](https://gitlab.com/gitlab-org/gitlab-development-kit/blob/master/doc/set-up-gdk.md)
+your local GitLab development environment.
+
+Once you have GDK running, switch to the `qa` directory. E.g., if you setup
+GDK to develop in the main `gitlab-ce` repo, the GitLab source code will be
+in a `gitlab` directory and so the end-to-end test code will be in `gitlab/qa`.
+
+From there you can run the tests. For example, the
+following call would login to the GDK instance and run all specs in
`qa/specs/features`:
```
diff --git a/scripts/frontend/test.js b/scripts/frontend/test.js
index dab7176f8c1..71a8bebf0f2 100755
--- a/scripts/frontend/test.js
+++ b/scripts/frontend/test.js
@@ -5,19 +5,24 @@ const { EOL } = require('os');
const program = require('commander');
const chalk = require('chalk');
+const SUCCESS_CODE = 0;
const JEST_ROUTE = 'spec/frontend';
const KARMA_ROUTE = 'spec/javascripts';
const COMMON_ARGS = ['--colors'];
-const JEST_ARGS = ['--passWithNoTests'];
-const KARMA_ARGS = ['--no-fail-on-empty-test-suite'];
-const SUCCESS_CODE = 0;
+const jestArgs = [...COMMON_ARGS, '--passWithNoTests'];
+const karmaArgs = [...COMMON_ARGS, '--no-fail-on-empty-test-suite'];
program
- .version('0.1.0')
.usage('[options] <file ...>')
.option('-p, --parallel', 'Run tests suites in parallel')
+ .option(
+ '-w, --watch',
+ 'Rerun tests when files change (tests will be run in parallel if this enabled)',
+ )
.parse(process.argv);
+const shouldParallelize = program.parallel || program.watch;
+
const isSuccess = code => code === SUCCESS_CODE;
const combineExitCodes = codes => {
@@ -31,7 +36,7 @@ const skipIfFail = fn => code => (isSuccess(code) ? fn() : code);
const endWithEOL = str => (str[str.length - 1] === '\n' ? str : `${str}${EOL}`);
const runTests = paths => {
- if (program.parallel) {
+ if (shouldParallelize) {
return Promise.all([runJest(paths), runKarma(paths)]).then(combineExitCodes);
} else {
return runJest(paths).then(skipIfFail(() => runKarma(paths)));
@@ -73,11 +78,11 @@ const spawnYarnScript = (cmd, args) => {
};
const runJest = args => {
- return spawnYarnScript('jest', [...JEST_ARGS, ...COMMON_ARGS, ...toJestArgs(args)]);
+ return spawnYarnScript('jest', [...jestArgs, ...toJestArgs(args)]);
};
const runKarma = args => {
- return spawnYarnScript('karma', [...KARMA_ARGS, ...COMMON_ARGS, ...toKarmaArgs(args)]);
+ return spawnYarnScript('karma', [...karmaArgs, ...toKarmaArgs(args)]);
};
const replacePath = to => path =>
@@ -96,6 +101,10 @@ const toKarmaArgs = paths =>
paths.reduce((acc, path) => acc.concat('-f', replacePathForKarma(path)), []);
const main = paths => {
+ if (program.watch) {
+ jestArgs.push('--watch');
+ karmaArgs.push('--single-run', 'false', '--auto-watch');
+ }
runTests(paths).then(code => {
console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');
if (isSuccess(code)) {
diff --git a/scripts/memory-static b/scripts/memory-static
new file mode 100755
index 00000000000..54f147a7a91
--- /dev/null
+++ b/scripts/memory-static
@@ -0,0 +1,20 @@
+#!/usr/bin/env ruby
+
+require_relative '../lib/gitlab/popen'
+
+full_report_filename, metrics_filename = ARGV
+abort 'usage: memory-static <full_report_filename> <metrics_filename>' unless full_report_filename && metrics_filename
+
+full_report, status = Gitlab::Popen.popen(%w(bundle exec derailed bundle:mem))
+abort 'failed to execute the benchmark' unless status.zero?
+
+File.open(full_report_filename, 'w') do |f|
+ f.write(full_report)
+end
+
+stats = /TOP: (?<total_mibs_str>.*) MiB/.match(full_report.lines.first)
+abort 'failed to process the benchmark output' unless stats
+
+File.open(metrics_filename, 'a') do |f|
+ f.puts "memory_static_total_mb #{stats[:total_mibs_str].to_f.round(1)}"
+end
diff --git a/scripts/memory-static-objects b/scripts/memory-static-objects
new file mode 100755
index 00000000000..2ad38d9717c
--- /dev/null
+++ b/scripts/memory-static-objects
@@ -0,0 +1,27 @@
+#!/usr/bin/env ruby
+
+require_relative '../lib/gitlab/popen'
+
+full_report_filename, metrics_filename = ARGV
+abort 'usage: memory-static-objects <full_report_filename> <metrics_filename>' unless full_report_filename && metrics_filename
+
+full_report, status = Gitlab::Popen.popen(%w(bundle exec derailed bundle:objects))
+abort 'failed to execute the benchmark' unless status.zero?
+
+File.open(full_report_filename, 'w') do |f|
+ f.write(full_report)
+end
+
+allocated_str = full_report.lines[1]
+retained_str = full_report.lines[2]
+allocated_stats = /Total allocated: (?<bytes>.*) bytes \((?<objects>.*) objects\)/.match(allocated_str)
+retained_stats = /Total retained: (?<bytes>.*) bytes \((?<objects>.*) objects\)/.match(retained_str)
+
+abort 'failed to process the benchmark output' unless allocated_stats && retained_stats
+
+File.open(metrics_filename, 'a') do |f|
+ f.puts "memory_static_objects_allocated_mb #{(allocated_stats[:bytes].to_f / (1024 * 1024)).round(1)}"
+ f.puts "memory_static_objects_retained_mb #{(retained_stats[:bytes].to_f / (104 * 1024)).round(1)}"
+ f.puts "memory_static_objects_allocated_items #{allocated_stats[:objects]}"
+ f.puts "memory_static_objects_retained_items #{retained_stats[:objects]}"
+end
diff --git a/spec/controllers/admin/application_settings_controller_spec.rb b/spec/controllers/admin/application_settings_controller_spec.rb
index b89348b7a7e..5ad5f9cdeea 100644
--- a/spec/controllers/admin/application_settings_controller_spec.rb
+++ b/spec/controllers/admin/application_settings_controller_spec.rb
@@ -116,6 +116,39 @@ describe Admin::ApplicationSettingsController do
end
end
end
+
+ describe 'verify panel actions' do
+ shared_examples 'renders correct panels' do
+ it 'renders correct action on error' do
+ expect_next_instance_of(ApplicationSettings::UpdateService) do |service|
+ allow(service).to receive(:execute).and_return(false)
+ end
+
+ patch action, params: { application_setting: { unused_param: true } }
+
+ expect(subject).to render_template(action)
+ end
+
+ it 'redirects to same panel on success' do
+ expect_next_instance_of(ApplicationSettings::UpdateService) do |service|
+ allow(service).to receive(:execute).and_return(true)
+ end
+
+ referer_path = public_send("#{action}_admin_application_settings_path")
+ request.env["HTTP_REFERER"] = referer_path
+
+ patch action, params: { application_setting: { unused_param: true } }
+
+ expect(subject).to redirect_to(referer_path)
+ end
+ end
+
+ (Admin::ApplicationSettingsController::VALID_SETTING_PANELS - %w(show templates geo)).each do |valid_action|
+ it_behaves_like 'renders correct panels' do
+ let(:action) { valid_action }
+ end
+ end
+ end
end
describe 'PUT #reset_registration_token' do
diff --git a/spec/controllers/projects/environments_controller_spec.rb b/spec/controllers/projects/environments_controller_spec.rb
index 9699f2952f2..4c2c6160c62 100644
--- a/spec/controllers/projects/environments_controller_spec.rb
+++ b/spec/controllers/projects/environments_controller_spec.rb
@@ -556,6 +556,19 @@ describe Projects::EnvironmentsController do
it_behaves_like 'has all dashboards'
end
end
+
+ context 'when the dashboard is intended for embedding' do
+ let(:dashboard_params) { { format: :json, embedded: true } }
+
+ it_behaves_like '200 response'
+
+ context 'when a dashboard path is provided' do
+ let(:dashboard_params) { { format: :json, dashboard: '.gitlab/dashboards/test.yml', embedded: true } }
+
+ # The dashboard path should simple be ignored.
+ it_behaves_like '200 response'
+ end
+ end
end
end
diff --git a/spec/controllers/projects/issues_controller_spec.rb b/spec/controllers/projects/issues_controller_spec.rb
index 32607fc5f56..f82e3c8c7dc 100644
--- a/spec/controllers/projects/issues_controller_spec.rb
+++ b/spec/controllers/projects/issues_controller_spec.rb
@@ -320,6 +320,90 @@ describe Projects::IssuesController do
end
end
+ describe 'PUT #reorder' do
+ let(:group) { create(:group, projects: [project]) }
+ let!(:issue1) { create(:issue, project: project, relative_position: 10) }
+ let!(:issue2) { create(:issue, project: project, relative_position: 20) }
+ let!(:issue3) { create(:issue, project: project, relative_position: 30) }
+
+ before do
+ sign_in(user)
+ end
+
+ context 'when user has access' do
+ before do
+ project.add_developer(user)
+ end
+
+ context 'with valid params' do
+ it 'reorders issues and returns a successful 200 response' do
+ reorder_issue(issue1,
+ move_after_id: issue2.id,
+ move_before_id: issue3.id,
+ group_full_path: group.full_path)
+
+ [issue1, issue2, issue3].map(&:reload)
+
+ expect(response).to have_gitlab_http_status(200)
+ expect(issue1.relative_position)
+ .to be_between(issue2.relative_position, issue3.relative_position)
+ end
+ end
+
+ context 'with invalid params' do
+ it 'returns a unprocessable entity 422 response for invalid move ids' do
+ reorder_issue(issue1, move_after_id: 99, move_before_id: 999)
+
+ expect(response).to have_gitlab_http_status(422)
+ end
+
+ it 'returns a not found 404 response for invalid issue id' do
+ reorder_issue(object_double(issue1, iid: 999),
+ move_after_id: issue2.id,
+ move_before_id: issue3.id)
+
+ expect(response).to have_gitlab_http_status(404)
+ end
+
+ it 'returns a unprocessable entity 422 response for issues not in group' do
+ another_group = create(:group)
+
+ reorder_issue(issue1,
+ move_after_id: issue2.id,
+ move_before_id: issue3.id,
+ group_full_path: another_group.full_path)
+
+ expect(response).to have_gitlab_http_status(422)
+ end
+ end
+ end
+
+ context 'with unauthorized user' do
+ before do
+ project.add_guest(user)
+ end
+
+ it 'responds with 404' do
+ reorder_issue(issue1, move_after_id: issue2.id, move_before_id: issue3.id)
+
+ expect(response).to have_gitlab_http_status(:not_found)
+ end
+ end
+
+ def reorder_issue(issue, move_after_id: nil, move_before_id: nil, group_full_path: nil)
+ put :reorder,
+ params: {
+ namespace_id: project.namespace.to_param,
+ project_id: project,
+ id: issue.iid,
+ move_after_id: move_after_id,
+ move_before_id: move_before_id,
+ group_full_path: group_full_path
+ },
+ format: :json
+ end
+ end
+
describe 'PUT #update' do
subject do
put :update,
diff --git a/spec/controllers/projects/jobs_controller_spec.rb b/spec/controllers/projects/jobs_controller_spec.rb
index 0dabe27977a..901402aa5fd 100644
--- a/spec/controllers/projects/jobs_controller_spec.rb
+++ b/spec/controllers/projects/jobs_controller_spec.rb
@@ -73,21 +73,27 @@ describe Projects::JobsController, :clean_gitlab_redis_shared_state do
end
context 'number of queries' do
+ render_views
+
before do
Ci::Build::AVAILABLE_STATUSES.each do |status|
create_job(status, status)
end
+
+ allow(Appearance).to receive(:current_without_cache)
+ .and_return(nil)
end
it 'verifies number of queries', :request_store do
- recorded = ActiveRecord::QueryRecorder.new { get_index }
- expect(recorded.count).to be_within(5).of(7)
+ expect { get_index }.not_to be_n_plus_1_query.with_threshold(3)
end
def create_job(name, status)
- pipeline = create(:ci_pipeline, project: project)
+ user = create(:user)
+ pipeline = create(:ci_pipeline, project: project, user: user)
create(:ci_build, :tags, :triggered, :artifacts,
- pipeline: pipeline, name: name, status: status)
+ pipeline: pipeline, name: name, status: status,
+ user: user)
end
end
diff --git a/spec/controllers/projects/pages_domains_controller_spec.rb b/spec/controllers/projects/pages_domains_controller_spec.rb
index ff3afd51cd8..032f4f1418f 100644
--- a/spec/controllers/projects/pages_domains_controller_spec.rb
+++ b/spec/controllers/projects/pages_domains_controller_spec.rb
@@ -15,7 +15,10 @@ describe Projects::PagesDomainsController do
end
let(:pages_domain_params) do
- build(:pages_domain, domain: 'my.otherdomain.com').slice(:key, :certificate, :domain)
+ attributes_for(:pages_domain, domain: 'my.otherdomain.com').slice(:key, :certificate, :domain).tap do |params|
+ params[:user_provided_key] = params.delete(:key)
+ params[:user_provided_certificate] = params.delete(:certificate)
+ end
end
before do
@@ -84,48 +87,59 @@ describe Projects::PagesDomainsController do
controller.instance_variable_set(:@domain, pages_domain)
end
- let(:pages_domain_params) do
- attributes_for(:pages_domain).slice(:key, :certificate)
- end
-
let(:params) do
request_params.merge(id: pages_domain.domain, pages_domain: pages_domain_params)
end
- it 'updates the domain' do
- expect(pages_domain)
- .to receive(:update)
- .with(ActionController::Parameters.new(pages_domain_params).permit!)
- .and_return(true)
+ context 'with valid params' do
+ let(:pages_domain_params) do
+ attributes_for(:pages_domain, :with_trusted_chain).slice(:key, :certificate).tap do |params|
+ params[:user_provided_key] = params.delete(:key)
+ params[:user_provided_certificate] = params.delete(:certificate)
+ end
+ end
+
+ it 'updates the domain' do
+ expect do
+ patch(:update, params: params)
+ end.to change { pages_domain.reload.certificate }.to(pages_domain_params[:user_provided_certificate])
+ end
+
+ it 'redirects to the project page' do
+ patch(:update, params: params)
- patch(:update, params: params)
+ expect(flash[:notice]).to eq 'Domain was updated'
+ expect(response).to redirect_to(project_pages_path(project))
+ end
end
- it 'redirects to the project page' do
- patch(:update, params: params)
+ context 'with key parameter' do
+ before do
+ pages_domain.update!(key: nil, certificate: nil, certificate_source: 'gitlab_provided')
+ end
- expect(flash[:notice]).to eq 'Domain was updated'
- expect(response).to redirect_to(project_pages_path(project))
+ it 'marks certificate as provided by user' do
+ expect do
+ patch(:update, params: params)
+ end.to change { pages_domain.reload.certificate_source }.from('gitlab_provided').to('user_provided')
+ end
end
context 'the domain is invalid' do
- it 'renders the edit action' do
- allow(pages_domain).to receive(:update).and_return(false)
+ let(:pages_domain_params) { { user_provided_certificate: 'blabla' } }
+ it 'renders the edit action' do
patch(:update, params: params)
expect(response).to render_template('edit')
end
end
- context 'the parameters include the domain' do
- it 'renders 400 Bad Request' do
- expect(pages_domain)
- .to receive(:update)
- .with(hash_not_including(:domain))
- .and_return(true)
-
- patch(:update, params: params.deep_merge(pages_domain: { domain: 'abc' }))
+ context 'when parameters include the domain' do
+ it 'does not update domain' do
+ expect do
+ patch(:update, params: params.deep_merge(pages_domain: { domain: 'abc' }))
+ end.not_to change { pages_domain.reload.domain }
end
end
end
diff --git a/spec/factories/pages_domains.rb b/spec/factories/pages_domains.rb
index db8384877b0..8da19a37a6a 100644
--- a/spec/factories/pages_domains.rb
+++ b/spec/factories/pages_domains.rb
@@ -180,5 +180,9 @@ Iy6oRpHaCF/2obZdIdgf9rlyz0fkqyHJc9GkioSoOhJZxEV2SgAkap8yS0sX2tJ9
ZDXgrA==
-----END CERTIFICATE-----'
end
+
+ trait :letsencrypt do
+ certificate_source { :gitlab_provided }
+ end
end
end
diff --git a/spec/fast_spec_helper.rb b/spec/fast_spec_helper.rb
index 0b5ab16ad71..91ef7653822 100644
--- a/spec/fast_spec_helper.rb
+++ b/spec/fast_spec_helper.rb
@@ -3,6 +3,7 @@ require 'bundler/setup'
ENV['GITLAB_ENV'] = 'test'
ENV['IN_MEMORY_APPLICATION_SETTINGS'] = 'true'
+require 'active_support/dependencies'
require_relative '../config/settings'
require_relative 'support/rspec'
require 'active_support/all'
diff --git a/spec/features/admin/admin_settings_spec.rb b/spec/features/admin/admin_settings_spec.rb
index 93ccb03d822..45ef5d07ff0 100644
--- a/spec/features/admin/admin_settings_spec.rb
+++ b/spec/features/admin/admin_settings_spec.rb
@@ -379,6 +379,27 @@ describe 'Admin updates settings' do
expect(page).to have_content "Application settings saved successfully"
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
+
+ expect(Gitlab::CurrentSettings.polling_interval_multiplier).to eq 5.0
+ expect(page).to have_content "Application settings saved successfully"
+ end
+
+ 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(Gitlab::CurrentSettings.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 'When pages_auto_ssl is enabled' do
before do
stub_feature_flags(pages_auto_ssl: true)
diff --git a/spec/features/projects/pages_lets_encrypt_spec.rb b/spec/features/projects/pages_lets_encrypt_spec.rb
index baa217cbe58..a5f8702302c 100644
--- a/spec/features/projects/pages_lets_encrypt_spec.rb
+++ b/spec/features/projects/pages_lets_encrypt_spec.rb
@@ -2,124 +2,119 @@
require 'spec_helper'
describe "Pages with Let's Encrypt", :https_pages_enabled do
+ include LetsEncryptHelpers
+
let(:project) { create(:project) }
let(:user) { create(:user) }
let(:role) { :maintainer }
- let(:certificate_pem) do
- <<~PEM
- -----BEGIN CERTIFICATE-----
- MIICGzCCAYSgAwIBAgIBATANBgkqhkiG9w0BAQUFADAbMRkwFwYDVQQDExB0ZXN0
- LWNlcnRpZmljYXRlMB4XDTE2MDIxMjE0MzIwMFoXDTIwMDQxMjE0MzIwMFowGzEZ
- MBcGA1UEAxMQdGVzdC1jZXJ0aWZpY2F0ZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
- gYkCgYEApL4J9L0ZxFJ1hI1LPIflAlAGvm6ZEvoT4qKU5Xf2JgU7/2geNR1qlNFa
- SvCc08Knupp5yTgmvyK/Xi09U0N82vvp4Zvr/diSc4A/RA6Mta6egLySNT438kdT
- nY2tR5feoTLwQpX0t4IMlwGQGT5h6Of2fKmDxzuwuyffcIHqLdsCAwEAAaNvMG0w
- DAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUxl9WSxBprB0z0ibJs3rXEk0+95AwCwYD
- VR0PBAQDAgXgMBEGCWCGSAGG+EIBAQQEAwIGQDAeBglghkgBhvhCAQ0EERYPeGNh
- IGNlcnRpZmljYXRlMA0GCSqGSIb3DQEBBQUAA4GBAGC4T8SlFHK0yPSa+idGLQFQ
- joZp2JHYvNlTPkRJ/J4TcXxBTJmArcQgTIuNoBtC+0A/SwdK4MfTCUY4vNWNdese
- 5A4K65Nb7Oh1AdQieTBHNXXCdyFsva9/ScfQGEl7p55a52jOPs0StPd7g64uvjlg
- YHi2yesCrOvVXt+lgPTd
- -----END CERTIFICATE-----
- PEM
- end
+ let(:certificate_pem) { attributes_for(:pages_domain)[:certificate] }
- let(:certificate_key) do
- <<~KEY
- -----BEGIN PRIVATE KEY-----
- MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKS+CfS9GcRSdYSN
- SzyH5QJQBr5umRL6E+KilOV39iYFO/9oHjUdapTRWkrwnNPCp7qaeck4Jr8iv14t
- PVNDfNr76eGb6/3YknOAP0QOjLWunoC8kjU+N/JHU52NrUeX3qEy8EKV9LeCDJcB
- kBk+Yejn9nypg8c7sLsn33CB6i3bAgMBAAECgYA2D26w80T7WZvazYr86BNMePpd
- j2mIAqx32KZHzt/lhh40J/SRtX9+Kl0Y7nBoRR5Ja9u/HkAIxNxLiUjwg9r6cpg/
- uITEF5nMt7lAk391BuI+7VOZZGbJDsq2ulPd6lO+C8Kq/PI/e4kXcIjeH6KwQsuR
- 5vrXfBZ3sQfflaiN4QJBANBt8JY2LIGQF8o89qwUpRL5vbnKQ4IzZ5+TOl4RLR7O
- AQpJ81tGuINghO7aunctb6rrcKJrxmEH1whzComybrMCQQDKV49nOBudRBAIgG4K
- EnLzsRKISUHMZSJiYTYnablof8cKw1JaQduw7zgrUlLwnroSaAGX88+Jw1f5n2Lh
- Vlg5AkBDdUGnrDLtYBCDEQYZHblrkc7ZAeCllDOWjxUV+uMqlCv8A4Ey6omvY57C
- m6I8DkWVAQx8VPtozhvHjUw80rZHAkB55HWHAM3h13axKG0htCt7klhPsZHpx6MH
- EPjGlXIT+aW2XiPmK3ZlCDcWIenE+lmtbOpI159Wpk8BGXs/s/xBAkEAlAY3ymgx
- 63BDJEwvOb2IaP8lDDxNsXx9XJNVvQbv5n15vNsLHbjslHfAhAbxnLQ1fLhUPqSi
- nNp/xedE1YxutQ==
- -----END PRIVATE KEY-----
- KEY
- end
+ let(:certificate_key) { attributes_for(:pages_domain)[:key] }
before do
allow(Gitlab.config.pages).to receive(:enabled).and_return(true)
+ stub_lets_encrypt_settings
+
project.add_role(user, role)
sign_in(user)
project.namespace.update(owner: user)
allow_any_instance_of(Project).to receive(:pages_deployed?) { true }
end
- context 'when the page_auto_ssl feature flag is enabled' do
- before do
- stub_feature_flags(pages_auto_ssl: true)
+ context 'when the auto SSL management is initially disabled' do
+ let(:domain) do
+ create(:pages_domain, auto_ssl_enabled: false, project: project)
end
- context 'when the auto SSL management is initially disabled' do
- let(:domain) do
- create(:pages_domain, auto_ssl_enabled: false, project: project)
- end
+ it 'enables auto SSL and dynamically updates the form accordingly', :js do
+ visit edit_project_pages_domain_path(project, domain)
- it 'enables auto SSL and dynamically updates the form accordingly', :js do
- visit edit_project_pages_domain_path(project, domain)
+ expect(domain.auto_ssl_enabled).to eq false
- expect(domain.auto_ssl_enabled).to eq false
+ expect(find("#pages_domain_auto_ssl_enabled", visible: false).value).to eq 'false'
+ expect(page).to have_field 'Certificate (PEM)', type: 'textarea'
+ expect(page).to have_field 'Key (PEM)', type: 'textarea'
- expect(find("#pages_domain_auto_ssl_enabled", visible: false).value).to eq 'false'
- expect(page).to have_field 'Certificate (PEM)', type: 'textarea'
- expect(page).to have_field 'Key (PEM)', type: 'textarea'
+ find('.js-auto-ssl-toggle-container .project-feature-toggle').click
- find('.js-auto-ssl-toggle-container .project-feature-toggle').click
+ expect(find("#pages_domain_auto_ssl_enabled", visible: false).value).to eq 'true'
+ expect(page).not_to have_field 'Certificate (PEM)', type: 'textarea'
+ expect(page).not_to have_field 'Key (PEM)', type: 'textarea'
- expect(find("#pages_domain_auto_ssl_enabled", visible: false).value).to eq 'true'
- expect(page).not_to have_field 'Certificate (PEM)', type: 'textarea'
- expect(page).not_to have_field 'Key (PEM)', type: 'textarea'
- expect(page).to have_content "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."
+ click_on 'Save Changes'
- click_on 'Save Changes'
+ expect(domain.reload.auto_ssl_enabled).to eq true
+ end
+ end
- expect(domain.reload.auto_ssl_enabled).to eq true
- end
+ context 'when the auto SSL management is initially enabled' do
+ let(:domain) do
+ create(:pages_domain, :letsencrypt, auto_ssl_enabled: true, project: project)
end
- context 'when the auto SSL management is initially enabled' do
- let(:domain) do
- create(:pages_domain, auto_ssl_enabled: true, project: project)
- end
+ it 'disables auto SSL and dynamically updates the form accordingly', :js do
+ visit edit_project_pages_domain_path(project, domain)
- it 'disables auto SSL and dynamically updates the form accordingly', :js do
- visit edit_project_pages_domain_path(project, domain)
+ expect(find("#pages_domain_auto_ssl_enabled", visible: false).value).to eq 'true'
+ expect(page).not_to have_field 'Certificate (PEM)', type: 'textarea'
+ expect(page).not_to have_field 'Key (PEM)', type: 'textarea'
- expect(find("#pages_domain_auto_ssl_enabled", visible: false).value).to eq 'true'
- expect(page).to have_field 'Certificate (PEM)', type: 'textarea', disabled: true
- expect(page).not_to have_field 'Key (PEM)', type: 'textarea'
+ find('.js-auto-ssl-toggle-container .project-feature-toggle').click
- find('.js-auto-ssl-toggle-container .project-feature-toggle').click
+ expect(find("#pages_domain_auto_ssl_enabled", visible: false).value).to eq 'false'
+ expect(page).to have_field 'Certificate (PEM)', type: 'textarea'
+ expect(page).to have_field 'Key (PEM)', type: 'textarea'
- expect(find("#pages_domain_auto_ssl_enabled", visible: false).value).to eq 'false'
- expect(page).to have_field 'Certificate (PEM)', type: 'textarea'
- expect(page).to have_field 'Key (PEM)', type: 'textarea'
+ fill_in 'Certificate (PEM)', with: certificate_pem
+ fill_in 'Key (PEM)', with: certificate_key
- fill_in 'Certificate (PEM)', with: certificate_pem
- fill_in 'Key (PEM)', with: certificate_key
+ click_on 'Save Changes'
- click_on 'Save Changes'
+ expect(domain.reload.auto_ssl_enabled).to eq false
+ end
+ end
- expect(domain.reload.auto_ssl_enabled).to eq false
+ shared_examples 'user sees private keys only for user provided certificate' do
+ before do
+ visit edit_project_pages_domain_path(project, domain)
+ end
+
+ shared_examples 'user do not see private key' do
+ it 'user do not see private key' do
+ expect(find_field('Key (PEM)', visible: :all, disabled: :all).value).to be_blank
+ end
+ end
+
+ context 'when auto_ssl is enabled for domain' do
+ let(:domain) { create(:pages_domain, :letsencrypt, project: project, auto_ssl_enabled: true) }
+
+ include_examples 'user do not see private key'
+ end
+
+ context 'when auto_ssl is disabled for domain' do
+ let(:domain) { create(:pages_domain, :letsencrypt, project: project) }
+
+ include_examples 'user do not see private key'
+ end
+
+ context 'when certificate is provided by user' do
+ let(:domain) { create(:pages_domain, project: project) }
+
+ it 'user sees private key' do
+ expect(find_field('Key (PEM)').value).not_to be_blank
end
end
end
- context 'when the page_auto_ssl feature flag is disabled' do
+ include_examples 'user sees private keys only for user provided certificate'
+
+ context 'when letsencrypt is disabled' do
let(:domain) do
create(:pages_domain, auto_ssl_enabled: false, project: project)
end
before do
- stub_feature_flags(pages_auto_ssl: false)
+ stub_application_setting(lets_encrypt_terms_of_service_accepted: false)
visit edit_project_pages_domain_path(project, domain)
end
@@ -127,5 +122,7 @@ describe "Pages with Let's Encrypt", :https_pages_enabled do
it "does not render the Let's Encrypt field", :js do
expect(page).not_to have_selector '.js-auto-ssl-toggle-container'
end
+
+ include_examples 'user sees private keys only for user provided certificate'
end
end
diff --git a/spec/features/projects/pages_spec.rb b/spec/features/projects/pages_spec.rb
index 9bb0ba81ef5..c4b3ddb2088 100644
--- a/spec/features/projects/pages_spec.rb
+++ b/spec/features/projects/pages_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require 'spec_helper'
-shared_examples 'pages domain editing' do
+shared_examples 'pages settings editing' do
let(:project) { create(:project) }
let(:user) { create(:user) }
let(:role) { :maintainer }
@@ -321,19 +321,15 @@ shared_examples 'pages domain editing' do
end
describe 'Pages' do
- context 'when pages_auto_ssl feature flag is disabled' do
- before do
- stub_feature_flags(pages_auto_ssl: false)
- end
+ include LetsEncryptHelpers
- include_examples 'pages domain editing'
- end
+ include_examples 'pages settings editing'
- context 'when pages_auto_ssl feature flag is enabled' do
+ context 'when letsencrypt support is enabled' do
before do
- stub_feature_flags(pages_auto_ssl: true)
+ stub_lets_encrypt_settings
end
- include_examples 'pages domain editing'
+ include_examples 'pages settings editing'
end
end
diff --git a/spec/features/users/signup_spec.rb b/spec/features/users/signup_spec.rb
index 1a9caf0ffbb..8a6901ea4e9 100644
--- a/spec/features/users/signup_spec.rb
+++ b/spec/features/users/signup_spec.rb
@@ -19,7 +19,7 @@ describe 'Signup' do
end
it 'does not show an error border if the username contains dots (.)' do
- fill_in 'new_user_username', with: 'new.user.username'
+ simulate_input('#new_user_username', 'new.user.username')
wait_for_requests
expect(find('.username')).not_to have_css '.gl-field-error-outline'
@@ -41,7 +41,14 @@ describe 'Signup' do
expect(find('.username')).to have_css '.gl-field-error-outline'
end
- it 'shows an error border if the username contains special characters' do
+ it 'shows a success border if the username is available' do
+ fill_in 'new_user_username', with: 'new-user'
+ wait_for_requests
+
+ expect(find('.username')).to have_css '.gl-field-success-outline'
+ end
+
+ it 'shows an error border if the username contains special characters' do
fill_in 'new_user_username', with: 'new$user!username'
wait_for_requests
@@ -71,7 +78,7 @@ describe 'Signup' do
expect(page).to have_content("Please create a username with only alphanumeric characters.")
end
- it 'shows an error border if the username contains emojis' do
+ it 'shows an error border if the username contains emojis' do
simulate_input('#new_user_username', 'ehsan😀')
expect(find('.username')).to have_css '.gl-field-error-outline'
@@ -82,6 +89,37 @@ describe 'Signup' do
expect(page).to have_content("Invalid input, please avoid emojis")
end
+
+ it 'shows a pending message if the username availability is being fetched' do
+ fill_in 'new_user_username', with: 'new-user'
+
+ expect(find('.username > .validation-pending')).not_to have_css '.hide'
+ end
+
+ it 'shows a success message if the username is available' do
+ fill_in 'new_user_username', with: 'new-user'
+ wait_for_requests
+
+ expect(find('.username > .validation-success')).not_to have_css '.hide'
+ end
+
+ it 'shows an error message if the username is unavailable' do
+ existing_user = create(:user)
+
+ fill_in 'new_user_username', with: existing_user.username
+ wait_for_requests
+
+ expect(find('.username > .validation-error')).not_to have_css '.hide'
+ end
+
+ it 'shows a success message if the username is corrected and then available' do
+ fill_in 'new_user_username', with: 'new-user$'
+ wait_for_requests
+ fill_in 'new_user_username', with: 'new-user'
+ wait_for_requests
+
+ expect(page).to have_content("Username is available.")
+ end
end
describe 'user\'s full name validation', :js do
diff --git a/spec/finders/notes_finder_spec.rb b/spec/finders/notes_finder_spec.rb
index 0a685152cf9..87bde4ca2f6 100644
--- a/spec/finders/notes_finder_spec.rb
+++ b/spec/finders/notes_finder_spec.rb
@@ -292,5 +292,31 @@ describe NotesFinder do
expect(subject.target).to eq(commit)
end
end
+
+ context 'target_iid' do
+ let(:issue) { create(:issue, project: project) }
+ let(:merge_request) { create(:merge_request, source_project: project, target_project: project) }
+
+ it 'finds issues by iid' do
+ iid_params = { target_type: 'issue', target_iid: issue.iid }
+ expect(described_class.new(project, user, iid_params).target).to eq(issue)
+ end
+
+ it 'finds merge requests by iid' do
+ iid_params = { target_type: 'merge_request', target_iid: merge_request.iid }
+ expect(described_class.new(project, user, iid_params).target).to eq(merge_request)
+ end
+
+ it 'returns nil if both target_id and target_iid are not given' do
+ params_without_any_id = { target_type: 'issue' }
+ expect(described_class.new(project, user, params_without_any_id).target).to be_nil
+ end
+
+ it 'prioritizes target_id over target_iid' do
+ issue2 = create(:issue, project: project)
+ iid_params = { target_type: 'issue', target_id: issue2.id, target_iid: issue.iid }
+ expect(described_class.new(project, user, iid_params).target).to eq(issue2)
+ end
+ end
end
end
diff --git a/spec/fixtures/lib/gitlab/metrics/dashboard/schemas/embedded_dashboard.json b/spec/fixtures/lib/gitlab/metrics/dashboard/schemas/embedded_dashboard.json
new file mode 100644
index 00000000000..7d2b409a0f6
--- /dev/null
+++ b/spec/fixtures/lib/gitlab/metrics/dashboard/schemas/embedded_dashboard.json
@@ -0,0 +1,13 @@
+{
+ "type": "object",
+ "required": ["panel_groups"],
+ "properties": {
+ "panel_groups": {
+ "type": "array",
+ "items": {
+ "$ref": "spec/fixtures/lib/gitlab/metrics/dashboard/schemas/embedded_panel_groups.json"
+ }
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/spec/fixtures/lib/gitlab/metrics/dashboard/schemas/embedded_panel_groups.json b/spec/fixtures/lib/gitlab/metrics/dashboard/schemas/embedded_panel_groups.json
new file mode 100644
index 00000000000..bf05c054e2f
--- /dev/null
+++ b/spec/fixtures/lib/gitlab/metrics/dashboard/schemas/embedded_panel_groups.json
@@ -0,0 +1,11 @@
+{
+ "type": "object",
+ "required": ["panels"],
+ "properties": {
+ "panels": {
+ "type": "array",
+ "items": { "$ref": "panels.json" }
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/spec/frontend/api_spec.js b/spec/frontend/api_spec.js
index 6010488d9e0..0188d12a57d 100644
--- a/spec/frontend/api_spec.js
+++ b/spec/frontend/api_spec.js
@@ -474,4 +474,27 @@ describe('Api', () => {
.catch(done.fail);
});
});
+
+ describe('projectForks', () => {
+ it('gets forked projects', done => {
+ const dummyProjectPath = 'gitlab-org/gitlab-ce';
+ const expectedUrl = `${dummyUrlRoot}/api/${dummyApiVersion}/projects/${encodeURIComponent(
+ dummyProjectPath,
+ )}/forks`;
+
+ jest.spyOn(axios, 'get');
+
+ mock.onGet(expectedUrl).replyOnce(200, ['fork']);
+
+ Api.projectForks(dummyProjectPath, { visibility: 'private' })
+ .then(({ data }) => {
+ expect(data).toEqual(['fork']);
+ expect(axios.get).toHaveBeenCalledWith(expectedUrl, {
+ params: { visibility: 'private' },
+ });
+ })
+ .then(done)
+ .catch(done.fail);
+ });
+ });
});
diff --git a/spec/frontend/repository/components/__snapshots__/last_commit_spec.js.snap b/spec/frontend/repository/components/__snapshots__/last_commit_spec.js.snap
new file mode 100644
index 00000000000..3ad6bfa9e5f
--- /dev/null
+++ b/spec/frontend/repository/components/__snapshots__/last_commit_spec.js.snap
@@ -0,0 +1,98 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Repository last commit component renders commit widget 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"
+ >
+ <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 to clipboard"
+ tooltipplacement="bottom"
+ />
+ </div>
+ </div>
+ </div>
+</div>
+`;
diff --git a/spec/frontend/repository/components/last_commit_spec.js b/spec/frontend/repository/components/last_commit_spec.js
new file mode 100644
index 00000000000..972690a60f6
--- /dev/null
+++ b/spec/frontend/repository/components/last_commit_spec.js
@@ -0,0 +1,103 @@
+import { shallowMount } from '@vue/test-utils';
+import LastCommit from '~/repository/components/last_commit.vue';
+import UserAvatarLink from '~/vue_shared/components/user_avatar/user_avatar_link.vue';
+
+let vm;
+
+function createCommitData(data = {}) {
+ return {
+ id: '123456789',
+ title: 'Commit title',
+ message: 'Commit message',
+ webUrl: 'https://test.com/commit/123',
+ authoredDate: '2019-01-01',
+ author: {
+ name: 'Test',
+ avatarUrl: 'https://test.com',
+ webUrl: 'https://test.com/test',
+ },
+ pipeline: {
+ detailedStatus: {
+ detailsPath: 'https://test.com/pipeline',
+ icon: 'failed',
+ tooltip: 'failed',
+ text: 'failed',
+ group: {},
+ },
+ },
+ ...data,
+ };
+}
+
+function factory(commit = createCommitData(), loading = false) {
+ vm = shallowMount(LastCommit, {
+ mocks: {
+ $apollo: {
+ queries: {
+ commit: {
+ loading: true,
+ },
+ },
+ },
+ },
+ });
+ vm.setData({ commit });
+ vm.vm.$apollo.queries.commit.loading = loading;
+}
+
+describe('Repository last commit component', () => {
+ afterEach(() => {
+ vm.destroy();
+ });
+
+ it.each`
+ loading | label
+ ${true} | ${'hides'}
+ ${false} | ${'shows'}
+ `('$label when $loading is true', ({ loading }) => {
+ factory(createCommitData(), loading);
+
+ expect(vm.isEmpty()).toBe(loading);
+ });
+
+ it('renders commit widget', () => {
+ factory();
+
+ expect(vm.element).toMatchSnapshot();
+ });
+
+ it('renders short commit ID', () => {
+ factory();
+
+ expect(vm.find('.label-monospace').text()).toEqual('12345678');
+ });
+
+ it('hides pipeline components when pipeline does not exist', () => {
+ factory(createCommitData({ pipeline: null }));
+
+ expect(vm.find('.js-commit-pipeline').exists()).toBe(false);
+ });
+
+ it('hides author component when author does not exist', () => {
+ factory(createCommitData({ author: null }));
+
+ expect(vm.find('.js-user-link').exists()).toBe(false);
+ expect(vm.find(UserAvatarLink).exists()).toBe(false);
+ });
+
+ it('does not render description expander when description is null', () => {
+ factory(createCommitData({ description: null }));
+
+ expect(vm.find('.text-expander').exists()).toBe(false);
+ expect(vm.find('.commit-row-description').exists()).toBe(false);
+ });
+
+ it('expands commit description when clicking expander', () => {
+ factory(createCommitData({ description: 'Test description' }));
+
+ vm.find('.text-expander').vm.$emit('click');
+
+ expect(vm.find('.commit-row-description').isVisible()).toBe(true);
+ expect(vm.find('.text-expander').classes('open')).toBe(true);
+ });
+});
diff --git a/spec/frontend/vue_shared/components/paginated_list_spec.js b/spec/frontend/vue_shared/components/paginated_list_spec.js
new file mode 100644
index 00000000000..31ac362d35f
--- /dev/null
+++ b/spec/frontend/vue_shared/components/paginated_list_spec.js
@@ -0,0 +1,56 @@
+import PaginatedList from '~/vue_shared/components/paginated_list.vue';
+import { PREV, NEXT } from '~/vue_shared/components/pagination/constants';
+import { mount } from '@vue/test-utils';
+
+describe('Pagination links component', () => {
+ let wrapper;
+ let glPaginatedList;
+
+ const template = `
+ <div class="slot" slot-scope="{ listItem }">
+ <span class="item">Item Name: {{listItem.id}}</span>
+ </div>
+ `;
+
+ const props = {
+ prevText: PREV,
+ nextText: NEXT,
+ };
+
+ beforeEach(() => {
+ wrapper = mount(PaginatedList, {
+ scopedSlots: {
+ default: template,
+ },
+ propsData: {
+ list: [{ id: 'foo' }, { id: 'bar' }],
+ props,
+ },
+ });
+
+ [glPaginatedList] = wrapper.vm.$children;
+ });
+
+ afterEach(() => {
+ wrapper.destroy();
+ });
+
+ describe('Paginated List Component', () => {
+ describe('props', () => {
+ // We test attrs and not props because we pass through to child component using v-bind:"$attrs"
+ it('should pass prevText to GitLab UI paginated list', () => {
+ expect(glPaginatedList.$attrs['prev-text']).toBe(props.prevText);
+ });
+ it('should pass nextText to GitLab UI paginated list', () => {
+ expect(glPaginatedList.$attrs['next-text']).toBe(props.nextText);
+ });
+ });
+
+ describe('rendering', () => {
+ it('it renders the gl-paginated-list', () => {
+ expect(wrapper.contains('ul.list-group')).toBe(true);
+ expect(wrapper.findAll('li.list-group-item').length).toBe(2);
+ });
+ });
+ });
+});
diff --git a/spec/graphql/types/issue_type_spec.rb b/spec/graphql/types/issue_type_spec.rb
index 210932f8488..799a8662b94 100644
--- a/spec/graphql/types/issue_type_spec.rb
+++ b/spec/graphql/types/issue_type_spec.rb
@@ -10,7 +10,10 @@ describe GitlabSchema.types['Issue'] do
it { expect(described_class.interfaces).to include(Types::Notes::NoteableType.to_graphql) }
it 'has specific fields' do
- %i[relative_position web_path web_url reference].each do |field_name|
+ fields = %i[title_html description_html relative_position web_path web_url
+ reference]
+
+ fields.each do |field_name|
expect(described_class).to have_graphql_field(field_name)
end
end
diff --git a/spec/graphql/types/label_type_spec.rb b/spec/graphql/types/label_type_spec.rb
new file mode 100644
index 00000000000..f498b32f9ed
--- /dev/null
+++ b/spec/graphql/types/label_type_spec.rb
@@ -0,0 +1,10 @@
+# frozen_string_literal: true
+require 'spec_helper'
+
+describe GitlabSchema.types['Label'] do
+ it 'has the correct fields' do
+ expected_fields = [:description, :description_html, :title, :color, :text_color]
+
+ is_expected.to have_graphql_fields(*expected_fields)
+ end
+end
diff --git a/spec/graphql/types/merge_request_type_spec.rb b/spec/graphql/types/merge_request_type_spec.rb
index fd1c782bcc5..f73bd062369 100644
--- a/spec/graphql/types/merge_request_type_spec.rb
+++ b/spec/graphql/types/merge_request_type_spec.rb
@@ -7,7 +7,20 @@ describe GitlabSchema.types['MergeRequest'] do
it { expect(described_class.interfaces).to include(Types::Notes::NoteableType.to_graphql) }
- describe 'nested head pipeline' do
- it { expect(described_class).to have_graphql_field(:head_pipeline) }
+ it 'has the expected fields' do
+ expected_fields = %w[
+ notes discussions user_permissions id iid title title_html description
+ description_html state created_at updated_at source_project target_project
+ project project_id source_project_id target_project_id source_branch
+ target_branch work_in_progress merge_when_pipeline_succeeds diff_head_sha
+ merge_commit_sha user_notes_count should_remove_source_branch
+ force_remove_source_branch merge_status in_progress_merge_commit_sha
+ 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
+ ]
+
+ is_expected.to have_graphql_fields(*expected_fields)
end
end
diff --git a/spec/graphql/types/namespace_type_spec.rb b/spec/graphql/types/namespace_type_spec.rb
index b4144cc4121..77fd590586e 100644
--- a/spec/graphql/types/namespace_type_spec.rb
+++ b/spec/graphql/types/namespace_type_spec.rb
@@ -5,5 +5,12 @@ require 'spec_helper'
describe GitlabSchema.types['Namespace'] do
it { expect(described_class.graphql_name).to eq('Namespace') }
- it { expect(described_class).to have_graphql_field(:projects) }
+ it 'has the expected fields' do
+ expected_fields = %w[
+ id name path full_name full_path description description_html visibility
+ lfs_enabled request_access_enabled projects
+ ]
+
+ is_expected.to have_graphql_fields(*expected_fields)
+ end
end
diff --git a/spec/graphql/types/notes/note_type_spec.rb b/spec/graphql/types/notes/note_type_spec.rb
index 8022b20f9dd..e8a58da4b17 100644
--- a/spec/graphql/types/notes/note_type_spec.rb
+++ b/spec/graphql/types/notes/note_type_spec.rb
@@ -5,7 +5,7 @@ describe GitlabSchema.types['Note'] do
it 'exposes the expected fields' do
expected_fields = [:id, :project, :author, :body, :created_at,
:updated_at, :discussion, :resolvable, :position, :user_permissions,
- :resolved_by, :resolved_at, :system]
+ :resolved_by, :resolved_at, :system, :body_html]
is_expected.to have_graphql_fields(*expected_fields)
end
diff --git a/spec/graphql/types/project_type_spec.rb b/spec/graphql/types/project_type_spec.rb
index cb5ac2e3cb1..69fbc72bdf5 100644
--- a/spec/graphql/types/project_type_spec.rb
+++ b/spec/graphql/types/project_type_spec.rb
@@ -7,18 +7,22 @@ describe GitlabSchema.types['Project'] do
it { expect(described_class).to require_graphql_authorizations(:read_project) }
- describe 'nested merge request' do
- it { expect(described_class).to have_graphql_field(:merge_requests) }
- it { expect(described_class).to have_graphql_field(:merge_request) }
+ it 'has the expected fields' do
+ expected_fields = %w[
+ user_permissions id full_path path name_with_namespace
+ name description description_html tag_list ssh_url_to_repo
+ http_url_to_repo web_url star_count forks_count
+ created_at last_activity_at archived visibility
+ container_registry_enabled shared_runners_enabled
+ lfs_enabled merge_requests_ff_only_enabled avatar_url
+ issues_enabled merge_requests_enabled wiki_enabled
+ snippets_enabled jobs_enabled public_jobs open_issues_count import_status
+ only_allow_merge_if_pipeline_succeeds request_access_enabled
+ only_allow_merge_if_all_discussions_are_resolved printing_merge_request_link_enabled
+ namespace group statistics repository merge_requests merge_request issues
+ issue pipelines
+ ]
+
+ is_expected.to have_graphql_fields(*expected_fields)
end
-
- describe 'nested issues' do
- it { expect(described_class).to have_graphql_field(:issues) }
- end
-
- it { is_expected.to have_graphql_field(:pipelines) }
-
- it { is_expected.to have_graphql_field(:repository) }
-
- it { is_expected.to have_graphql_field(:statistics) }
end
diff --git a/spec/javascripts/notes/components/diff_with_note_spec.js b/spec/javascripts/notes/components/diff_with_note_spec.js
index 0752bd05904..f849fe9d8bb 100644
--- a/spec/javascripts/notes/components/diff_with_note_spec.js
+++ b/spec/javascripts/notes/components/diff_with_note_spec.js
@@ -47,6 +47,19 @@ describe('diff_with_note', () => {
vm = mountComponentWithStore(Component, { props, store });
});
+ it('removes trailing "+" char', () => {
+ const richText = vm.$el.querySelectorAll('.line_holder')[4].querySelector('.line_content')
+ .textContent[0];
+
+ expect(richText).not.toEqual('+');
+ });
+
+ it('removes trailing "-" char', () => {
+ const richText = vm.$el.querySelector('#LC13').parentNode.textContent[0];
+
+ expect(richText).not.toEqual('-');
+ });
+
it('shows text diff', () => {
expect(selectors.container).toHaveClass('text-file');
expect(selectors.diffTable).toExist();
diff --git a/spec/javascripts/vue_shared/components/tooltip_on_truncate_spec.js b/spec/javascripts/vue_shared/components/tooltip_on_truncate_spec.js
index 997d84dcc42..ad8d5a53291 100644
--- a/spec/javascripts/vue_shared/components/tooltip_on_truncate_spec.js
+++ b/spec/javascripts/vue_shared/components/tooltip_on_truncate_spec.js
@@ -1,68 +1,72 @@
-import { mountComponentWithRender } from 'spec/helpers/vue_mount_component_helper';
+import { shallowMount, createLocalVue } from '@vue/test-utils';
import TooltipOnTruncate from '~/vue_shared/components/tooltip_on_truncate.vue';
const TEST_TITLE = 'lorem-ipsum-dolar-sit-amit-consectur-adipiscing-elit-sed-do';
-const CLASS_SHOW_TOOLTIP = 'js-show-tooltip';
-const STYLE_TRUNCATED = {
- display: 'inline-block',
- 'max-width': '20px',
-};
-const STYLE_NORMAL = {
- display: 'inline-block',
- 'max-width': '1000px',
-};
-
-function mountTooltipOnTruncate(options, createChildren) {
- return mountComponentWithRender(h => h(TooltipOnTruncate, options, createChildren(h)), '#app');
-}
+const STYLE_TRUNCATED = 'display: inline-block; max-width: 20px;';
+const STYLE_NORMAL = 'display: inline-block; max-width: 1000px;';
-describe('TooltipOnTruncate component', () => {
- let vm;
+const localVue = createLocalVue();
- beforeEach(() => {
- const el = document.createElement('div');
- el.id = 'app';
- document.body.appendChild(el);
- });
+const createElementWithStyle = (style, content) => `<a href="#" style="${style}">${content}</a>`;
+
+describe('TooltipOnTruncate component', () => {
+ let wrapper;
+
+ const createComponent = ({ propsData, ...options } = {}) => {
+ wrapper = shallowMount(localVue.extend(TooltipOnTruncate), {
+ localVue,
+ sync: false,
+ attachToDocument: true,
+ propsData: {
+ title: TEST_TITLE,
+ ...propsData,
+ },
+ ...options,
+ });
+ };
afterEach(() => {
- vm.$destroy();
+ wrapper.destroy();
});
+ const hasTooltip = () => wrapper.classes('js-show-tooltip');
+
describe('with default target', () => {
it('renders tooltip if truncated', done => {
- const options = {
- style: STYLE_TRUNCATED,
- props: {
- title: TEST_TITLE,
+ createComponent({
+ attrs: {
+ style: STYLE_TRUNCATED,
},
- };
-
- vm = mountTooltipOnTruncate(options, () => [TEST_TITLE]);
+ slots: {
+ default: [TEST_TITLE],
+ },
+ });
- vm.$nextTick()
+ wrapper.vm
+ .$nextTick()
.then(() => {
- expect(vm.$el).toHaveClass(CLASS_SHOW_TOOLTIP);
- expect(vm.$el).toHaveData('original-title', TEST_TITLE);
- expect(vm.$el).toHaveData('placement', 'top');
+ expect(hasTooltip()).toBe(true);
+ expect(wrapper.attributes('data-original-title')).toEqual(TEST_TITLE);
+ expect(wrapper.attributes('data-placement')).toEqual('top');
})
.then(done)
.catch(done.fail);
});
it('does not render tooltip if normal', done => {
- const options = {
- style: STYLE_NORMAL,
- props: {
- title: TEST_TITLE,
+ createComponent({
+ attrs: {
+ style: STYLE_NORMAL,
},
- };
-
- vm = mountTooltipOnTruncate(options, () => [TEST_TITLE]);
+ slots: {
+ default: [TEST_TITLE],
+ },
+ });
- vm.$nextTick()
+ wrapper.vm
+ .$nextTick()
.then(() => {
- expect(vm.$el).not.toHaveClass(CLASS_SHOW_TOOLTIP);
+ expect(hasTooltip()).toBe(false);
})
.then(done)
.catch(done.fail);
@@ -71,37 +75,41 @@ describe('TooltipOnTruncate component', () => {
describe('with child target', () => {
it('renders tooltip if truncated', done => {
- const options = {
- style: STYLE_NORMAL,
- props: {
- title: TEST_TITLE,
+ createComponent({
+ attrs: {
+ style: STYLE_NORMAL,
+ },
+ propsData: {
truncateTarget: 'child',
},
- };
-
- vm = mountTooltipOnTruncate(options, h => [h('a', { style: STYLE_TRUNCATED }, TEST_TITLE)]);
+ slots: {
+ default: createElementWithStyle(STYLE_TRUNCATED, TEST_TITLE),
+ },
+ });
- vm.$nextTick()
+ wrapper.vm
+ .$nextTick()
.then(() => {
- expect(vm.$el).toHaveClass(CLASS_SHOW_TOOLTIP);
+ expect(hasTooltip()).toBe(true);
})
.then(done)
.catch(done.fail);
});
it('does not render tooltip if normal', done => {
- const options = {
- props: {
- title: TEST_TITLE,
+ createComponent({
+ propsData: {
truncateTarget: 'child',
},
- };
-
- vm = mountTooltipOnTruncate(options, h => [h('a', { style: STYLE_NORMAL }, TEST_TITLE)]);
+ slots: {
+ default: createElementWithStyle(STYLE_NORMAL, TEST_TITLE),
+ },
+ });
- vm.$nextTick()
+ wrapper.vm
+ .$nextTick()
.then(() => {
- expect(vm.$el).not.toHaveClass(CLASS_SHOW_TOOLTIP);
+ expect(hasTooltip()).toBe(false);
})
.then(done)
.catch(done.fail);
@@ -110,22 +118,25 @@ describe('TooltipOnTruncate component', () => {
describe('with fn target', () => {
it('renders tooltip if truncated', done => {
- const options = {
- style: STYLE_NORMAL,
- props: {
- title: TEST_TITLE,
+ createComponent({
+ attrs: {
+ style: STYLE_NORMAL,
+ },
+ propsData: {
truncateTarget: el => el.childNodes[1],
},
- };
-
- vm = mountTooltipOnTruncate(options, h => [
- h('a', { style: STYLE_NORMAL }, TEST_TITLE),
- h('span', { style: STYLE_TRUNCATED }, TEST_TITLE),
- ]);
+ slots: {
+ default: [
+ createElementWithStyle('', TEST_TITLE),
+ createElementWithStyle(STYLE_TRUNCATED, TEST_TITLE),
+ ],
+ },
+ });
- vm.$nextTick()
+ wrapper.vm
+ .$nextTick()
.then(() => {
- expect(vm.$el).toHaveClass(CLASS_SHOW_TOOLTIP);
+ expect(hasTooltip()).toBe(true);
})
.then(done)
.catch(done.fail);
@@ -134,20 +145,25 @@ describe('TooltipOnTruncate component', () => {
describe('placement', () => {
it('sets data-placement when tooltip is rendered', done => {
- const options = {
- props: {
- title: TEST_TITLE,
- truncateTarget: 'child',
- placement: 'bottom',
- },
- };
+ const placement = 'bottom';
- vm = mountTooltipOnTruncate(options, h => [h('a', { style: STYLE_TRUNCATED }, TEST_TITLE)]);
+ createComponent({
+ propsData: {
+ placement,
+ },
+ attrs: {
+ style: STYLE_TRUNCATED,
+ },
+ slots: {
+ default: TEST_TITLE,
+ },
+ });
- vm.$nextTick()
+ wrapper.vm
+ .$nextTick()
.then(() => {
- expect(vm.$el).toHaveClass(CLASS_SHOW_TOOLTIP);
- expect(vm.$el).toHaveData('placement', options.props.placement);
+ expect(hasTooltip()).toBe(true);
+ expect(wrapper.attributes('data-placement')).toEqual(placement);
})
.then(done)
.catch(done.fail);
diff --git a/spec/lib/banzai/filter/relative_link_filter_spec.rb b/spec/lib/banzai/filter/relative_link_filter_spec.rb
index dad0a5535c0..8ff971114d6 100644
--- a/spec/lib/banzai/filter/relative_link_filter_spec.rb
+++ b/spec/lib/banzai/filter/relative_link_filter_spec.rb
@@ -101,6 +101,13 @@ describe Banzai::Filter::RelativeLinkFilter do
.to eq "/#{project_path}/blob/#{ref}/doc/api/README.md"
end
+ it 'does not modify relative URLs in system notes' do
+ path = "#{project_path}/merge_requests/1/diffs"
+ doc = filter(link(path), system_note: true)
+
+ expect(doc.at_css('a')['href']).to eq path
+ end
+
it 'ignores absolute URLs with two leading slashes' do
doc = filter(link('//doc/api/README.md'))
expect(doc.at_css('a')['href']).to eq '//doc/api/README.md'
diff --git a/spec/lib/gitaly/server_spec.rb b/spec/lib/gitaly/server_spec.rb
index 292ab870dad..34bd43cb3ab 100644
--- a/spec/lib/gitaly/server_spec.rb
+++ b/spec/lib/gitaly/server_spec.rb
@@ -47,6 +47,12 @@ describe Gitaly::Server do
end
end
+ describe "#filesystem_type" do
+ subject { server.filesystem_type }
+
+ it { is_expected.to be_present }
+ end
+
describe 'request memoization' do
context 'when requesting multiple properties', :request_store do
it 'uses memoization for the info request' do
diff --git a/spec/lib/gitlab/database/migration_helpers_spec.rb b/spec/lib/gitlab/database/migration_helpers_spec.rb
index 1e4c4c38f74..3cf3d032bf4 100644
--- a/spec/lib/gitlab/database/migration_helpers_spec.rb
+++ b/spec/lib/gitlab/database/migration_helpers_spec.rb
@@ -461,9 +461,9 @@ describe Gitlab::Database::MigrationHelpers do
end
it 'updates all the rows in a table' do
- model.update_column_in_batches(:projects, :import_error, 'foo')
+ model.update_column_in_batches(:projects, :description_html, 'foo')
- expect(Project.where(import_error: 'foo').count).to eq(5)
+ expect(Project.where(description_html: 'foo').count).to eq(5)
end
it 'updates boolean values correctly' do
diff --git a/spec/lib/gitlab/graphql/markdown_field/resolver_spec.rb b/spec/lib/gitlab/graphql/markdown_field/resolver_spec.rb
new file mode 100644
index 00000000000..b95bcdef188
--- /dev/null
+++ b/spec/lib/gitlab/graphql/markdown_field/resolver_spec.rb
@@ -0,0 +1,33 @@
+# frozen_string_literal: true
+require 'spec_helper'
+
+describe Gitlab::Graphql::MarkdownField::Resolver do
+ include Gitlab::Routing
+ let(:resolver) { described_class.new(:note) }
+
+ describe '#proc' do
+ let(:project) { create(:project, :public) }
+ let(:issue) { create(:issue, project: project) }
+ let(:note) do
+ create(:note,
+ note: "Referencing #{issue.to_reference(full: true)}")
+ end
+
+ it 'renders markdown correctly' do
+ expect(resolver.proc.call(note, {}, {})).to include(issue_path(issue))
+ end
+
+ context 'when the issue is not publicly accessible' do
+ let(:project) { create(:project, :private) }
+
+ it 'hides the references from users that are not allowed to see the reference' do
+ expect(resolver.proc.call(note, {}, {})).not_to include(issue_path(issue))
+ end
+
+ it 'shows the reference to users that are allowed to see it' do
+ expect(resolver.proc.call(note, {}, { current_user: project.owner }))
+ .to include(issue_path(issue))
+ end
+ end
+ end
+end
diff --git a/spec/lib/gitlab/graphql/markdown_field_spec.rb b/spec/lib/gitlab/graphql/markdown_field_spec.rb
new file mode 100644
index 00000000000..a8566aa8e1c
--- /dev/null
+++ b/spec/lib/gitlab/graphql/markdown_field_spec.rb
@@ -0,0 +1,55 @@
+# frozen_string_literal: true
+require 'spec_helper'
+
+describe Gitlab::Graphql::MarkdownField do
+ describe '.markdown_field' do
+ it 'creates the field with some default attributes' do
+ field = class_with_markdown_field(:test_html, null: true, method: :hello).fields['testHtml']
+
+ expect(field.name).to eq('testHtml')
+ expect(field.description).to eq('The GitLab Flavored Markdown rendering of `hello`')
+ expect(field.type).to eq(GraphQL::STRING_TYPE)
+ expect(field.to_graphql.complexity).to eq(5)
+ end
+
+ context 'developer warnings' do
+ let(:expected_error) { /Only `method` is allowed to specify the markdown field/ }
+
+ it 'raises when passing a resolver' do
+ expect { class_with_markdown_field(:test_html, null: true, resolver: 'not really') }
+ .to raise_error(expected_error)
+ end
+
+ it 'raises when passing a resolve block' do
+ expect { class_with_markdown_field(:test_html, null: true, resolve: -> (_, _, _) { 'not really' } ) }
+ .to raise_error(expected_error)
+ end
+ end
+
+ context 'resolving markdown' do
+ let(:note) { build(:note, note: '# Markdown!') }
+ let(:thing_with_markdown) { double('markdown thing', object: note) }
+ let(:expected_markdown) { '<h1 data-sourcepos="1:1-1:11" dir="auto">Markdown!</h1>' }
+
+ it 'renders markdown from the same property as the field name without the `_html` suffix' do
+ field = class_with_markdown_field(:note_html, null: false).fields['noteHtml']
+
+ expect(field.to_graphql.resolve(thing_with_markdown, {}, {})).to eq(expected_markdown)
+ end
+
+ it 'renders markdown from a specific property when a `method` argument is passed' do
+ field = class_with_markdown_field(:test_html, null: false, method: :note).fields['testHtml']
+
+ expect(field.to_graphql.resolve(thing_with_markdown, {}, {})).to eq(expected_markdown)
+ end
+ end
+ end
+
+ def class_with_markdown_field(name, **args)
+ Class.new(GraphQL::Schema::Object) do
+ prepend Gitlab::Graphql::MarkdownField
+
+ markdown_field name, **args
+ end
+ end
+end
diff --git a/spec/lib/gitlab/json_cache_spec.rb b/spec/lib/gitlab/json_cache_spec.rb
index b82c09af306..c6a6042c65c 100644
--- a/spec/lib/gitlab/json_cache_spec.rb
+++ b/spec/lib/gitlab/json_cache_spec.rb
@@ -106,6 +106,16 @@ describe Gitlab::JsonCache do
expect(cache.read(key)).to be_nil
end
+ context 'when the cached value is a boolean' do
+ it 'parses the cached value' do
+ allow(backend).to receive(:read)
+ .with(expanded_key)
+ .and_return(true)
+
+ expect(cache.read(key, BroadcastMessage)).to eq(true)
+ end
+ end
+
context 'when the cached value is a hash' do
it 'parses the cached value' do
allow(backend).to receive(:read)
diff --git a/spec/lib/gitlab/metrics/dashboard/dynamic_dashboard_service_spec.rb b/spec/lib/gitlab/metrics/dashboard/dynamic_dashboard_service_spec.rb
new file mode 100644
index 00000000000..eecd257b38d
--- /dev/null
+++ b/spec/lib/gitlab/metrics/dashboard/dynamic_dashboard_service_spec.rb
@@ -0,0 +1,30 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Metrics::Dashboard::DynamicDashboardService, :use_clean_rails_memory_store_caching do
+ include MetricsDashboardHelpers
+
+ set(:project) { build(:project) }
+ set(:environment) { create(:environment, project: project) }
+
+ describe '#get_dashboard' do
+ let(:service_params) { [project, nil, { environment: environment, dashboard_path: nil }] }
+ let(:service_call) { described_class.new(*service_params).get_dashboard }
+
+ it_behaves_like 'valid embedded dashboard service response'
+
+ it 'caches the unprocessed dashboard for subsequent calls' do
+ expect(YAML).to receive(:safe_load).once.and_call_original
+
+ described_class.new(*service_params).get_dashboard
+ described_class.new(*service_params).get_dashboard
+ end
+
+ context 'when called with a non-system dashboard' do
+ let(:dashboard_path) { 'garbage/dashboard/path' }
+
+ it_behaves_like 'valid embedded dashboard service response'
+ end
+ end
+end
diff --git a/spec/lib/gitlab/metrics/dashboard/finder_spec.rb b/spec/lib/gitlab/metrics/dashboard/finder_spec.rb
index 29fe1ae8d9c..b9a5ee9c2b3 100644
--- a/spec/lib/gitlab/metrics/dashboard/finder_spec.rb
+++ b/spec/lib/gitlab/metrics/dashboard/finder_spec.rb
@@ -11,7 +11,7 @@ describe Gitlab::Metrics::Dashboard::Finder, :use_clean_rails_memory_store_cachi
describe '.find' do
let(:dashboard_path) { '.gitlab/dashboards/test.yml' }
- let(:service_call) { described_class.find(project, nil, environment, dashboard_path) }
+ let(:service_call) { described_class.find(project, nil, environment, dashboard_path: dashboard_path) }
it_behaves_like 'misconfigured dashboard service response', :not_found
@@ -45,6 +45,12 @@ describe Gitlab::Metrics::Dashboard::Finder, :use_clean_rails_memory_store_cachi
it_behaves_like 'valid dashboard service response'
end
+
+ context 'when the dashboard is expected to be embedded' do
+ let(:service_call) { described_class.find(project, nil, environment, dashboard_path: nil, embedded: true) }
+
+ it_behaves_like 'valid embedded dashboard service response'
+ end
end
describe '.find_all_paths' do
diff --git a/spec/lib/gitlab/usage_data_spec.rb b/spec/lib/gitlab/usage_data_spec.rb
index e44463dd767..67d49a30825 100644
--- a/spec/lib/gitlab/usage_data_spec.rb
+++ b/spec/lib/gitlab/usage_data_spec.rb
@@ -54,6 +54,7 @@ describe Gitlab::UsageData do
gitlab_shared_runners_enabled
gitlab_pages
git
+ gitaly
database
avg_cycle_analytics
web_ide_commits
@@ -205,6 +206,10 @@ describe Gitlab::UsageData do
expect(subject[:git][:version]).to eq(Gitlab::Git.version)
expect(subject[:database][:adapter]).to eq(Gitlab::Database.adapter_name)
expect(subject[:database][:version]).to eq(Gitlab::Database.version)
+ expect(subject[:gitaly][:version]).to be_present
+ expect(subject[:gitaly][:servers]).to be >= 1
+ expect(subject[:gitaly][:filesystems]).to be_an(Array)
+ expect(subject[:gitaly][:filesystems].first).to be_a(String)
end
end
diff --git a/spec/lib/gitlab_spec.rb b/spec/lib/gitlab_spec.rb
index e075904b0cc..82b0e819063 100644
--- a/spec/lib/gitlab_spec.rb
+++ b/spec/lib/gitlab_spec.rb
@@ -97,14 +97,42 @@ describe Gitlab do
end
describe '.ee?' do
+ before do
+ described_class.instance_variable_set(:@is_ee, nil)
+ end
+
+ after do
+ described_class.instance_variable_set(:@is_ee, nil)
+ end
+
it 'returns true when using Enterprise Edition' do
- stub_const('License', Class.new)
+ root = Pathname.new('dummy')
+ license_path = double(:path, exist?: true)
+
+ allow(described_class)
+ .to receive(:root)
+ .and_return(root)
+
+ allow(root)
+ .to receive(:join)
+ .with('ee/app/models/license.rb')
+ .and_return(license_path)
expect(described_class.ee?).to eq(true)
end
it 'returns false when using Community Edition' do
- hide_const('License')
+ root = double(:path)
+ license_path = double(:path, exists?: false)
+
+ 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)
expect(described_class.ee?).to eq(false)
end
diff --git a/spec/migrations/migrate_legacy_managed_clusters_to_unmanaged_spec.rb b/spec/migrations/migrate_legacy_managed_clusters_to_unmanaged_spec.rb
new file mode 100644
index 00000000000..93426f1f273
--- /dev/null
+++ b/spec/migrations/migrate_legacy_managed_clusters_to_unmanaged_spec.rb
@@ -0,0 +1,55 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+require Rails.root.join('db', 'post_migrate', '20190606163724_migrate_legacy_managed_clusters_to_unmanaged.rb')
+
+describe MigrateLegacyManagedClustersToUnmanaged, :migration do
+ let(:cluster_type) { 'project_type' }
+ let(:created_at) { 1.hour.ago }
+
+ let!(:cluster) do
+ table(:clusters).create!(
+ name: 'cluster',
+ cluster_type: described_class::Cluster.cluster_types[cluster_type],
+ managed: true,
+ created_at: created_at
+ )
+ end
+
+ it 'marks the cluster as unmanaged' do
+ migrate!
+ expect(cluster.reload).not_to be_managed
+ end
+
+ context 'cluster is not project type' do
+ let(:cluster_type) { 'group_type' }
+
+ it 'does not update the cluster' do
+ migrate!
+ expect(cluster.reload).to be_managed
+ end
+ end
+
+ context 'cluster has a kubernetes namespace associated' do
+ before do
+ table(:clusters_kubernetes_namespaces).create!(
+ cluster_id: cluster.id,
+ namespace: 'namespace'
+ )
+ end
+
+ it 'does not update the cluster' do
+ migrate!
+ expect(cluster.reload).to be_managed
+ end
+ end
+
+ context 'cluster was recently created' do
+ let(:created_at) { 2.minutes.ago }
+
+ it 'does not update the cluster' do
+ migrate!
+ expect(cluster.reload).to be_managed
+ end
+ end
+end
diff --git a/spec/migrations/migrate_managed_clusters_with_no_token_to_unmanaged_spec.rb b/spec/migrations/migrate_managed_clusters_with_no_token_to_unmanaged_spec.rb
new file mode 100644
index 00000000000..b73bd16cb60
--- /dev/null
+++ b/spec/migrations/migrate_managed_clusters_with_no_token_to_unmanaged_spec.rb
@@ -0,0 +1,59 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+require Rails.root.join('db', 'post_migrate', '20190613231640_migrate_managed_clusters_with_no_token_to_unmanaged.rb')
+
+describe MigrateManagedClustersWithNoTokenToUnmanaged, :migration do
+ let(:cluster_type) { 'project_type' }
+ let(:created_at) { Date.new(2018, 11, 1).midnight }
+
+ let!(:cluster) do
+ table(:clusters).create!(
+ name: 'cluster',
+ cluster_type: described_class::Cluster.cluster_types[cluster_type],
+ managed: true,
+ created_at: created_at
+ )
+ end
+
+ let!(:kubernetes_namespace) do
+ table(:clusters_kubernetes_namespaces).create!(
+ cluster_id: cluster.id,
+ namespace: 'namespace'
+ )
+ end
+
+ it 'marks the cluster as unmanaged' do
+ migrate!
+ expect(cluster.reload).not_to be_managed
+ end
+
+ context 'cluster is not project type' do
+ let(:cluster_type) { 'group_type' }
+
+ it 'does not update the cluster' do
+ migrate!
+ expect(cluster.reload).to be_managed
+ end
+ end
+
+ context 'kubernetes namespace has a service account token' do
+ before do
+ kubernetes_namespace.update!(encrypted_service_account_token: "TOKEN")
+ end
+
+ it 'does not update the cluster' do
+ migrate!
+ expect(cluster.reload).to be_managed
+ end
+ end
+
+ context 'cluster was created after the cutoff' do
+ let(:created_at) { Date.new(2019, 1, 1).midnight }
+
+ it 'does not update the cluster' do
+ migrate!
+ expect(cluster.reload).to be_managed
+ end
+ end
+end
diff --git a/spec/models/clusters/platforms/kubernetes_spec.rb b/spec/models/clusters/platforms/kubernetes_spec.rb
index 1fb3a8de808..0fa5d031736 100644
--- a/spec/models/clusters/platforms/kubernetes_spec.rb
+++ b/spec/models/clusters/platforms/kubernetes_spec.rb
@@ -281,14 +281,14 @@ describe Clusters::Platforms::Kubernetes, :use_clean_rails_memory_store_caching
it_behaves_like 'setting variables'
- it 'sets KUBE_TOKEN' do
- expect(subject).to include(
+ it 'does not set KUBE_TOKEN' do
+ expect(subject).not_to include(
{ key: 'KUBE_TOKEN', value: kubernetes.token, public: false, masked: true }
)
end
end
- context 'kubernetes namespace is created with no service account token' do
+ context 'kubernetes namespace is created with service account token' do
let!(:kubernetes_namespace) { create(:cluster_kubernetes_namespace, :with_token, cluster: cluster) }
it_behaves_like 'setting variables'
@@ -340,32 +340,6 @@ describe Clusters::Platforms::Kubernetes, :use_clean_rails_memory_store_caching
end
end
- context 'namespace is provided' do
- let(:namespace) { 'my-project' }
-
- before do
- kubernetes.namespace = namespace
- end
-
- it_behaves_like 'setting variables'
-
- it 'sets KUBE_TOKEN' do
- expect(subject).to include(
- { key: 'KUBE_TOKEN', value: kubernetes.token, public: false, masked: true }
- )
- end
- end
-
- context 'no namespace provided' do
- it_behaves_like 'setting variables'
-
- it 'sets KUBE_TOKEN' do
- expect(subject).to include(
- { key: 'KUBE_TOKEN', value: kubernetes.token, public: false, masked: true }
- )
- end
- end
-
context 'group level cluster' do
let!(:cluster) { create(:cluster, :group, platform_kubernetes: kubernetes) }
diff --git a/spec/models/concerns/deployment_platform_spec.rb b/spec/models/concerns/deployment_platform_spec.rb
index 0e34d8fccf3..96465a51db2 100644
--- a/spec/models/concerns/deployment_platform_spec.rb
+++ b/spec/models/concerns/deployment_platform_spec.rb
@@ -8,40 +8,7 @@ describe DeploymentPlatform do
describe '#deployment_platform' do
subject { project.deployment_platform }
- context 'with no Kubernetes configuration on CI/CD, no Kubernetes Service and a Kubernetes template configured' do
- let!(:kubernetes_service) { create(:kubernetes_service, template: true) }
-
- it 'returns a platform kubernetes' do
- expect(subject).to be_a_kind_of(Clusters::Platforms::Kubernetes)
- end
-
- it 'creates a cluster and a platform kubernetes' do
- expect { subject }
- .to change { Clusters::Cluster.count }.by(1)
- .and change { Clusters::Platforms::Kubernetes.count }.by(1)
- end
-
- it 'includes appropriate attributes for Cluster' do
- cluster = subject.cluster
- expect(cluster.name).to eq('kubernetes-template')
- expect(cluster.project).to eq(project)
- expect(cluster.provider_type).to eq('user')
- expect(cluster.platform_type).to eq('kubernetes')
- end
-
- it 'creates a platform kubernetes' do
- expect { subject }.to change { Clusters::Platforms::Kubernetes.count }.by(1)
- end
-
- it 'copies attributes from Clusters::Platform::Kubernetes template into the new Cluster::Platforms::Kubernetes' do
- expect(subject.api_url).to eq(kubernetes_service.api_url)
- expect(subject.ca_pem).to eq(kubernetes_service.ca_pem)
- expect(subject.token).to eq(kubernetes_service.token)
- expect(subject.namespace).to eq(kubernetes_service.namespace)
- end
- end
-
- context 'with no Kubernetes configuration on CI/CD, no Kubernetes Service and no Kubernetes template configured' do
+ context 'with no Kubernetes configuration on CI/CD, no Kubernetes Service' do
it { is_expected.to be_nil }
end
@@ -126,23 +93,5 @@ describe DeploymentPlatform do
end
end
end
-
- context 'when user configured kubernetes integration from project services' do
- let!(:kubernetes_service) { create(:kubernetes_service, project: project) }
-
- it 'returns the Kubernetes service' do
- expect(subject).to eq(kubernetes_service)
- end
- end
-
- context 'when the cluster creation fails' do
- let!(:kubernetes_service) { create(:kubernetes_service, template: true) }
-
- before do
- allow_any_instance_of(Clusters::Cluster).to receive(:persisted?).and_return(false)
- end
-
- it { is_expected.to be_nil }
- end
end
end
diff --git a/spec/models/pages_domain_spec.rb b/spec/models/pages_domain_spec.rb
index fdc81359d34..4fb7b71a3c7 100644
--- a/spec/models/pages_domain_spec.rb
+++ b/spec/models/pages_domain_spec.rb
@@ -356,6 +356,102 @@ describe PagesDomain do
end
end
+ describe '#user_provided_key' do
+ subject { domain.user_provided_key }
+
+ context 'when certificate is provided by user' do
+ let(:domain) { create(:pages_domain) }
+
+ it 'returns key' do
+ is_expected.to eq(domain.key)
+ end
+ end
+
+ context 'when certificate is provided by gitlab' do
+ let(:domain) { create(:pages_domain, :letsencrypt) }
+
+ it 'returns nil' do
+ is_expected.to be_nil
+ end
+ end
+ end
+
+ describe '#user_provided_certificate' do
+ subject { domain.user_provided_certificate }
+
+ context 'when certificate is provided by user' do
+ let(:domain) { create(:pages_domain) }
+
+ it 'returns key' do
+ is_expected.to eq(domain.certificate)
+ end
+ end
+
+ context 'when certificate is provided by gitlab' do
+ let(:domain) { create(:pages_domain, :letsencrypt) }
+
+ it 'returns nil' do
+ is_expected.to be_nil
+ end
+ end
+ end
+
+ shared_examples 'certificate setter' do |attribute, setter_name, old_certificate_source, new_certificate_source|
+ let(:domain) do
+ create(:pages_domain, certificate_source: old_certificate_source)
+ end
+
+ let(:old_value) { domain.public_send(attribute) }
+
+ subject { domain.public_send(setter_name, new_value) }
+
+ context 'when value has been changed' do
+ let(:new_value) { 'new_value' }
+
+ it "assignes new value to #{attribute}" do
+ expect do
+ subject
+ end.to change { domain.public_send(attribute) }.from(old_value).to('new_value')
+ end
+
+ it 'changes certificate source' do
+ expect do
+ subject
+ end.to change { domain.certificate_source }.from(old_certificate_source).to(new_certificate_source)
+ end
+ end
+
+ context 'when value has not been not changed' do
+ let(:new_value) { old_value }
+
+ it 'does not change certificate source' do
+ expect do
+ subject
+ end.not_to change { domain.certificate_source }.from(old_certificate_source)
+ end
+ end
+ end
+
+ describe '#user_provided_key=' do
+ include_examples('certificate setter', 'key', 'user_provided_key=',
+ 'gitlab_provided', 'user_provided')
+ end
+
+ describe '#gitlab_provided_key=' do
+ include_examples('certificate setter', 'key', 'gitlab_provided_key=',
+ 'user_provided', 'gitlab_provided')
+ end
+
+ describe '#user_provided_certificate=' do
+ include_examples('certificate setter', 'certificate', 'user_provided_certificate=',
+ 'gitlab_provided', 'user_provided')
+ end
+
+ describe '#gitlab_provided_certificate=' do
+ include_examples('certificate setter', 'certificate', 'gitlab_provided_certificate=',
+ 'user_provided', 'gitlab_provided')
+ end
+
describe '.for_removal' do
subject { described_class.for_removal }
diff --git a/spec/models/project_services/kubernetes_service_spec.rb b/spec/models/project_services/kubernetes_service_spec.rb
index 34ee1eafd5c..5d7d6c34e67 100644
--- a/spec/models/project_services/kubernetes_service_spec.rb
+++ b/spec/models/project_services/kubernetes_service_spec.rb
@@ -7,7 +7,7 @@ describe KubernetesService, :use_clean_rails_memory_store_caching do
include ReactiveCachingHelpers
let(:project) { create(:kubernetes_project) }
- let(:service) { project.deployment_platform }
+ let(:service) { create(:kubernetes_service, project: project) }
describe 'Associations' do
it { is_expected.to belong_to :project }
@@ -78,7 +78,7 @@ describe KubernetesService, :use_clean_rails_memory_store_caching do
it 'includes an error with a deprecation message' do
kubernetes_service.valid?
- expect(kubernetes_service.errors[:base].first).to match(/Kubernetes service integration has been deprecated/)
+ expect(kubernetes_service.errors[:base].first).to match(/Kubernetes service integration has been disabled/)
end
end
@@ -383,13 +383,13 @@ describe KubernetesService, :use_clean_rails_memory_store_caching do
let(:kubernetes_service) { create(:kubernetes_service) }
it 'indicates the service is deprecated' do
- expect(kubernetes_service.deprecation_message).to match(/Kubernetes service integration has been deprecated/)
+ expect(kubernetes_service.deprecation_message).to match(/Kubernetes service integration has been disabled/)
end
context 'if the service is not active' do
it 'returns a message' do
kubernetes_service.update_attribute(:active, false)
- expect(kubernetes_service.deprecation_message).to match(/Fields on this page are now uneditable/)
+ expect(kubernetes_service.deprecation_message).to match(/Fields on this page are not used by GitLab/)
end
end
end
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index 20b98b5eb85..cc0f5002a1e 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -2656,8 +2656,8 @@ describe Project do
let!(:cluster) { create(:cluster, :project, :provided_by_gcp) }
let(:project) { cluster.project }
- it 'returns variables from this service' do
- expect(project.deployment_variables).to include(
+ it 'does not return variables from this service' do
+ expect(project.deployment_variables).not_to include(
{ key: 'KUBE_TOKEN', value: project.deployment_platform.token, public: false, masked: true }
)
end
diff --git a/spec/requests/api/pages_domains_spec.rb b/spec/requests/api/pages_domains_spec.rb
index 3eb68a6abb6..449032b95b7 100644
--- a/spec/requests/api/pages_domains_spec.rb
+++ b/spec/requests/api/pages_domains_spec.rb
@@ -359,6 +359,14 @@ describe API::PagesDomains do
expect(pages_domain_secure.certificate).to eq(params_secure_nokey[:certificate])
end
+ it 'updates certificate source to user_provided if is changed' do
+ pages_domain.update!(certificate_source: 'gitlab_provided')
+
+ expect do
+ put api(route_domain, user), params: params_secure
+ end.to change { pages_domain.reload.certificate_source }.from('gitlab_provided').to('user_provided')
+ end
+
it 'fails to update pages domain adding certificate without key' do
put api(route_domain, user), params: params_secure_nokey
diff --git a/spec/serializers/merge_request_widget_entity_spec.rb b/spec/serializers/merge_request_widget_entity_spec.rb
index a27c22191f4..ffbfac9b326 100644
--- a/spec/serializers/merge_request_widget_entity_spec.rb
+++ b/spec/serializers/merge_request_widget_entity_spec.rb
@@ -32,6 +32,19 @@ describe MergeRequestWidgetEntity do
end
end
+ describe 'issues links' do
+ it 'includes issues links when requested' do
+ data = described_class.new(resource, request: request, issues_links: true).as_json
+
+ expect(data).to include(:issues_links)
+ expect(data[:issues_links]).to include(:assign_to_closing, :closing, :mentioned_but_not_closing)
+ end
+
+ it 'omits issue links by default' do
+ expect(subject).not_to include(:issues_links)
+ end
+ end
+
describe 'pipeline' do
let(:pipeline) { create(:ci_empty_pipeline, project: project, ref: resource.source_branch, sha: resource.source_branch_sha, head_pipeline_of: resource) }
diff --git a/spec/services/clusters/gcp/kubernetes/fetch_kubernetes_token_service_spec.rb b/spec/services/clusters/gcp/kubernetes/fetch_kubernetes_token_service_spec.rb
index a5806559b14..93c0dc37ade 100644
--- a/spec/services/clusters/gcp/kubernetes/fetch_kubernetes_token_service_spec.rb
+++ b/spec/services/clusters/gcp/kubernetes/fetch_kubernetes_token_service_spec.rb
@@ -17,7 +17,7 @@ describe Clusters::Gcp::Kubernetes::FetchKubernetesTokenService do
)
end
- subject { described_class.new(kubeclient, service_account_token_name, namespace).execute }
+ subject { described_class.new(kubeclient, service_account_token_name, namespace, token_retry_delay: 0).execute }
before do
stub_kubeclient_discover(api_url)
@@ -26,8 +26,7 @@ describe Clusters::Gcp::Kubernetes::FetchKubernetesTokenService do
context 'when params correct' do
let(:decoded_token) { 'xxx.token.xxx' }
let(:token) { Base64.encode64(decoded_token) }
-
- context 'when gitlab-token exists' do
+ context 'when the secret exists' do
before do
stub_kubeclient_get_secret(
api_url,
@@ -50,13 +49,62 @@ describe Clusters::Gcp::Kubernetes::FetchKubernetesTokenService do
it { expect { subject }.to raise_error(Kubeclient::HttpError) }
end
- context 'when gitlab-token does not exist' do
+ context 'when the secret does not exist on the first try' do
+ before do
+ stub_kubeclient_get_secret_not_found_then_found(
+ api_url,
+ {
+ metadata_name: service_account_token_name,
+ namespace: namespace,
+ token: token
+ }
+ )
+ end
+
+ it 'retries and finds the token' do
+ expect(subject).to eq(decoded_token)
+ end
+ end
+
+ context 'when the secret permanently does not exist' do
before do
stub_kubeclient_get_secret_error(api_url, service_account_token_name, namespace: namespace, status: 404)
end
it { is_expected.to be_nil }
end
+
+ context 'when the secret is missing a token on the first try' do
+ before do
+ stub_kubeclient_get_secret_missing_token_then_with_token(
+ api_url,
+ {
+ metadata_name: service_account_token_name,
+ namespace: namespace,
+ token: token
+ }
+ )
+ end
+
+ it 'retries and finds the token' do
+ expect(subject).to eq(decoded_token)
+ end
+ end
+
+ context 'when the secret is permanently missing a token' do
+ before do
+ stub_kubeclient_get_secret(
+ api_url,
+ {
+ metadata_name: service_account_token_name,
+ namespace: namespace,
+ token: nil
+ }
+ )
+ end
+
+ it { is_expected.to be_nil }
+ end
end
end
end
diff --git a/spec/services/issues/reorder_service_spec.rb b/spec/services/issues/reorder_service_spec.rb
new file mode 100644
index 00000000000..b147cdf4e64
--- /dev/null
+++ b/spec/services/issues/reorder_service_spec.rb
@@ -0,0 +1,88 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Issues::ReorderService do
+ set(:user) { create(:user) }
+ set(:project) { create(:project) }
+ set(:group) { create(:group) }
+
+ shared_examples 'issues reorder service' do
+ context 'when reordering issues' do
+ it 'returns false with no params' do
+ expect(service({}).execute(issue1)).to be_falsey
+ end
+
+ it 'returns false with both invalid params' do
+ params = { move_after_id: nil, move_before_id: 1 }
+
+ expect(service(params).execute(issue1)).to be_falsey
+ end
+
+ it 'sorts issues' do
+ params = { move_after_id: issue2.id, move_before_id: issue3.id }
+
+ service(params).execute(issue1)
+
+ expect(issue1.relative_position)
+ .to be_between(issue2.relative_position, issue3.relative_position)
+ end
+ end
+ end
+
+ describe '#execute' do
+ let(:issue1) { create(:issue, project: project, relative_position: 10) }
+ let(:issue2) { create(:issue, project: project, relative_position: 20) }
+ let(:issue3) { create(:issue, project: project, relative_position: 30) }
+
+ context 'when ordering issues in a project' do
+ let(:parent) { project }
+
+ before do
+ parent.add_developer(user)
+ end
+
+ it_behaves_like 'issues reorder service'
+ end
+
+ context 'when ordering issues in a group' do
+ let(:project) { create(:project, namespace: group) }
+
+ before do
+ group.add_developer(user)
+ end
+
+ it_behaves_like 'issues reorder service'
+
+ context 'when ordering in a group issue list' do
+ let(:params) { { move_after_id: issue2.id, move_before_id: issue3.id, group_full_path: group.full_path } }
+
+ subject { service(params) }
+
+ it 'sends the board_group_id parameter' do
+ match_params = { move_between_ids: [issue2.id, issue3.id], board_group_id: group.id }
+
+ expect(Issues::UpdateService)
+ .to receive(:new).with(project, user, match_params)
+ .and_return(double(execute: build(:issue)))
+
+ subject.execute(issue1)
+ end
+
+ it 'sorts issues' do
+ project2 = create(:project, namespace: group)
+ issue4 = create(:issue, project: project2)
+
+ subject.execute(issue4)
+
+ expect(issue4.relative_position)
+ .to be_between(issue2.relative_position, issue3.relative_position)
+ end
+ end
+ end
+ end
+
+ def service(params)
+ described_class.new(project, user, params)
+ end
+end
diff --git a/spec/services/issues/update_service_spec.rb b/spec/services/issues/update_service_spec.rb
index 22f5607cb9c..28fa5d12d9c 100644
--- a/spec/services/issues/update_service_spec.rb
+++ b/spec/services/issues/update_service_spec.rb
@@ -687,6 +687,22 @@ describe Issues::UpdateService, :mailer do
end
end
+ context 'when moving an issue ', :nested_groups do
+ it 'raises an error for invalid move ids within a project' do
+ opts = { move_between_ids: [9000, 9999] }
+
+ expect { described_class.new(issue.project, user, opts).execute(issue) }
+ .to raise_error(ActiveRecord::RecordNotFound)
+ end
+
+ it 'raises an error for invalid move ids within a group' do
+ opts = { move_between_ids: [9000, 9999], board_group_id: create(:group).id }
+
+ expect { described_class.new(issue.project, user, opts).execute(issue) }
+ .to raise_error(ActiveRecord::RecordNotFound)
+ end
+ end
+
include_examples 'issuable update service' do
let(:open_issuable) { issue }
let(:closed_issuable) { create(:closed_issue, project: project) }
diff --git a/spec/services/pages_domains/obtain_lets_encrypt_certificate_service_spec.rb b/spec/services/pages_domains/obtain_lets_encrypt_certificate_service_spec.rb
index 6d7be27939c..d5f77f3354b 100644
--- a/spec/services/pages_domains/obtain_lets_encrypt_certificate_service_spec.rb
+++ b/spec/services/pages_domains/obtain_lets_encrypt_certificate_service_spec.rb
@@ -137,6 +137,12 @@ describe PagesDomains::ObtainLetsEncryptCertificateService do
expect(pages_domain.certificate).to eq(certificate)
end
+ it 'marks certificate as gitlab_provided' do
+ service.execute
+
+ expect(pages_domain.certificate_source).to eq("gitlab_provided")
+ end
+
it 'removes order from database' do
service.execute
diff --git a/spec/support/helpers/kubernetes_helpers.rb b/spec/support/helpers/kubernetes_helpers.rb
index 011c4df0fe5..3c7bcba2b42 100644
--- a/spec/support/helpers/kubernetes_helpers.rb
+++ b/spec/support/helpers/kubernetes_helpers.rb
@@ -104,6 +104,26 @@ module KubernetesHelpers
.to_return(status: [status, "Internal Server Error"])
end
+ def stub_kubeclient_get_secret_not_found_then_found(api_url, **options)
+ options[:metadata_name] ||= "default-token-1"
+ options[:namespace] ||= "default"
+
+ WebMock.stub_request(:get, api_url + "/api/v1/namespaces/#{options[:namespace]}/secrets/#{options[:metadata_name]}")
+ .to_return(status: [404, "Not Found"])
+ .then
+ .to_return(kube_response(kube_v1_secret_body(options)))
+ end
+
+ def stub_kubeclient_get_secret_missing_token_then_with_token(api_url, **options)
+ options[:metadata_name] ||= "default-token-1"
+ options[:namespace] ||= "default"
+
+ WebMock.stub_request(:get, api_url + "/api/v1/namespaces/#{options[:namespace]}/secrets/#{options[:metadata_name]}")
+ .to_return(kube_response(kube_v1_secret_body(options.merge(token: nil))))
+ .then
+ .to_return(kube_response(kube_v1_secret_body(options)))
+ end
+
def stub_kubeclient_get_service_account(api_url, name, namespace: 'default')
WebMock.stub_request(:get, api_url + "/api/v1/namespaces/#{namespace}/serviceaccounts/#{name}")
.to_return(kube_response({}))
@@ -184,11 +204,11 @@ module KubernetesHelpers
"kind" => "SecretList",
"apiVersion": "v1",
"metadata": {
- "name": options[:metadata_name] || "default-token-1",
+ "name": options.fetch(:metadata_name, "default-token-1"),
"namespace": "kube-system"
},
"data": {
- "token": options[:token] || Base64.encode64('token-sample-123')
+ "token": options.fetch(:token, Base64.encode64('token-sample-123'))
}
}
end
diff --git a/spec/support/helpers/metrics_dashboard_helpers.rb b/spec/support/helpers/metrics_dashboard_helpers.rb
index 1f36b0e217c..6de00eea474 100644
--- a/spec/support/helpers/metrics_dashboard_helpers.rb
+++ b/spec/support/helpers/metrics_dashboard_helpers.rb
@@ -28,9 +28,7 @@ module MetricsDashboardHelpers
end
end
- shared_examples_for 'valid dashboard service response' do
- let(:dashboard_schema) { JSON.parse(fixture_file('lib/gitlab/metrics/dashboard/schemas/dashboard.json')) }
-
+ shared_examples_for 'valid dashboard service response for schema' do
it 'returns a json representation of the dashboard' do
result = service_call
@@ -40,4 +38,16 @@ module MetricsDashboardHelpers
expect(JSON::Validator.fully_validate(dashboard_schema, result[:dashboard])).to be_empty
end
end
+
+ shared_examples_for 'valid dashboard service response' do
+ let(:dashboard_schema) { JSON.parse(fixture_file('lib/gitlab/metrics/dashboard/schemas/dashboard.json')) }
+
+ it_behaves_like 'valid dashboard service response for schema'
+ end
+
+ shared_examples_for 'valid embedded dashboard service response' do
+ let(:dashboard_schema) { JSON.parse(fixture_file('lib/gitlab/metrics/dashboard/schemas/embedded_dashboard.json')) }
+
+ it_behaves_like 'valid dashboard service response for schema'
+ end
end
diff --git a/spec/support/helpers/query_recorder.rb b/spec/support/helpers/query_recorder.rb
index d45377267f3..f77b43391dd 100644
--- a/spec/support/helpers/query_recorder.rb
+++ b/spec/support/helpers/query_recorder.rb
@@ -35,5 +35,9 @@ module ActiveRecord
def log_message
@log.join("\n\n")
end
+
+ def occurrences
+ @log.group_by(&:to_s).transform_values(&:count)
+ end
end
end
diff --git a/spec/support/matchers/be_n_plus_1_query.rb b/spec/support/matchers/be_n_plus_1_query.rb
new file mode 100644
index 00000000000..bbfd1897f04
--- /dev/null
+++ b/spec/support/matchers/be_n_plus_1_query.rb
@@ -0,0 +1,62 @@
+# frozen_string_literal: true
+
+module Nplus1QueryHelpers
+ DEFAULT_THRESHOLD = 3
+
+ def with_threshold(threshold)
+ @threshold = threshold
+ self
+ end
+
+ def for_query(query)
+ @query = query
+ self
+ end
+
+ def threshold
+ @threshold || DEFAULT_THRESHOLD
+ end
+
+ def occurrences
+ @occurrences ||=
+ if @query
+ recorder.occurrences.select { |recorded, count| recorded =~ @query }
+ else
+ recorder.occurrences
+ end
+ end
+
+ def over_threshold
+ occurrences.select do |recorded, count|
+ count > threshold
+ end
+ end
+
+ def recorder
+ @recorder ||= ActiveRecord::QueryRecorder.new(&@subject_block)
+ end
+
+ def verify_count(&block)
+ @subject_block = block
+ over_threshold.present?
+ end
+
+ def failure_message
+ log_message = over_threshold.to_yaml
+ "The following queries are executed more than #{threshold} time(s):\n#{log_message}"
+ end
+end
+
+RSpec::Matchers.define :be_n_plus_1_query do
+ supports_block_expectations
+
+ include Nplus1QueryHelpers
+
+ match do |block|
+ verify_count(&block)
+ end
+
+ failure_message_when_negated do |actual|
+ failure_message
+ 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 b7080c68270..d3cadf2ba7c 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
@@ -9,7 +9,15 @@
# - `filepath`: path of the file (contains filename)
# - `subject`: the request to be made to the controller. Example:
# subject { get :show, namespace_id: project.namespace, project_id: project }
-shared_examples 'a controller that can serve LFS files' do
+#
+# The LFS disabled scenario can be skipped by passing `skip_lfs_disabled_tests: true`
+# when including the examples (Note, at time of writing this is only used by
+# an EE-specific spec):
+#
+# it_behaves_like 'a controller that can serve LFS files', skip_lfs_disabled_tests: true do
+# ...
+# end
+shared_examples 'a controller that can serve LFS files' do |options = {}|
let(:lfs_oid) { '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897' }
let(:lfs_size) { '1575078' }
let!(:lfs_object) { create(:lfs_object, oid: lfs_oid, size: lfs_size) }
@@ -83,6 +91,8 @@ shared_examples 'a controller that can serve LFS files' do
end
it 'delivers ASCII file' do
+ skip 'Calling spec asked to skip testing LFS disabled scenario' if options[:skip_lfs_disabled_tests]
+
subject
expect(response).to have_gitlab_http_status(200)
diff --git a/spec/tasks/gitlab/check_rake_spec.rb b/spec/tasks/gitlab/check_rake_spec.rb
index 06525e3c771..0fcb9b269f3 100644
--- a/spec/tasks/gitlab/check_rake_spec.rb
+++ b/spec/tasks/gitlab/check_rake_spec.rb
@@ -96,6 +96,15 @@ describe 'check.rake' do
subject
end
+
+ it 'sanitizes output' do
+ user = double(dn: 'uid=fake_user1', uid: 'fake_user1')
+ allow(adapter).to receive(:users).and_return([user])
+ stub_env('SANITIZE', 'true')
+
+ expect { subject }.to output(/User output sanitized/).to_stdout
+ expect { subject }.not_to output('fake_user1').to_stdout
+ end
end
end
end