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
path: root/doc
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-08-19 12:08:42 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-08-19 12:08:42 +0300
commitb76ae638462ab0f673e5915986070518dd3f9ad3 (patch)
treebdab0533383b52873be0ec0eb4d3c66598ff8b91 /doc
parent434373eabe7b4be9593d18a585fb763f1e5f1a6f (diff)
Add latest changes from gitlab-org/gitlab@14-2-stable-eev14.2.0-rc42
Diffstat (limited to 'doc')
-rw-r--r--doc/.vale/gitlab/Acronyms.yml1
-rw-r--r--doc/.vale/gitlab/LatinTerms.yml2
-rw-r--r--doc/.vale/gitlab/ReadingLevel.yml12
-rw-r--r--doc/.vale/gitlab/SubstitutionWarning.yml2
-rw-r--r--doc/.vale/gitlab/Wordy.yml13
-rw-r--r--doc/.vale/gitlab/spelling-exceptions.txt10
-rw-r--r--doc/README.md1
-rw-r--r--doc/administration/audit_events.md6
-rw-r--r--doc/administration/auth/atlassian.md13
-rw-r--r--doc/administration/auth/cognito.md9
-rw-r--r--doc/administration/auth/ldap/index.md6
-rw-r--r--doc/administration/auth/ldap/ldap-troubleshooting.md4
-rw-r--r--doc/administration/auth/oidc.md4
-rw-r--r--doc/administration/compliance.md2
-rw-r--r--doc/administration/encrypted_configuration.md1
-rw-r--r--doc/administration/feature_flags.md21
-rw-r--r--doc/administration/geo/disaster_recovery/background_verification.md4
-rw-r--r--doc/administration/geo/disaster_recovery/planned_failover.md2
-rw-r--r--doc/administration/geo/disaster_recovery/runbooks/planned_failover_multi_node.md4
-rw-r--r--doc/administration/geo/disaster_recovery/runbooks/planned_failover_single_node.md4
-rw-r--r--doc/administration/geo/index.md9
-rw-r--r--doc/administration/geo/replication/configuration.md163
-rw-r--r--doc/administration/geo/replication/datatypes.md12
-rw-r--r--doc/administration/geo/replication/img/adding_a_secondary_v13_3.png (renamed from doc/administration/geo/replication/img/adding_a_secondary_node_v13_3.png)bin20195 -> 20195 bytes
-rw-r--r--doc/administration/geo/replication/img/geo_dashboard_v14_0.png (renamed from doc/administration/geo/replication/img/geo_node_dashboard_v14_0.png)bin48805 -> 48805 bytes
-rw-r--r--doc/administration/geo/replication/img/geo_site_health_v14_0.png (renamed from doc/administration/geo/replication/img/geo_node_health_v14_0.png)bin57973 -> 57973 bytes
-rw-r--r--doc/administration/geo/replication/location_aware_git_url.md4
-rw-r--r--doc/administration/geo/replication/multiple_servers.md326
-rw-r--r--doc/administration/geo/replication/object_storage.md5
-rw-r--r--doc/administration/geo/replication/troubleshooting.md56
-rw-r--r--doc/administration/geo/setup/database.md36
-rw-r--r--doc/administration/geo/setup/external_database.md7
-rw-r--r--doc/administration/get_started.md8
-rw-r--r--doc/administration/git_annex.md9
-rw-r--r--doc/administration/git_protocol.md13
-rw-r--r--doc/administration/gitaly/configure_gitaly.md105
-rw-r--r--doc/administration/gitaly/faq.md6
-rw-r--r--doc/administration/gitaly/index.md295
-rw-r--r--doc/administration/gitaly/praefect.md254
-rw-r--r--doc/administration/gitaly/reference.md2
-rw-r--r--doc/administration/gitaly/troubleshooting.md30
-rw-r--r--doc/administration/img/time_zone_settings.pngbin15330 -> 0 bytes
-rw-r--r--doc/administration/index.md4
-rw-r--r--doc/administration/instance_limits.md55
-rw-r--r--doc/administration/integration/kroki.md4
-rw-r--r--doc/administration/integration/plantuml.md2
-rw-r--r--doc/administration/integration/terminal.md4
-rw-r--r--doc/administration/job_logs.md2
-rw-r--r--doc/administration/lfs/index.md4
-rw-r--r--doc/administration/libravatar.md2
-rw-r--r--doc/administration/logs.md9
-rw-r--r--doc/administration/maintenance_mode/index.md2
-rw-r--r--doc/administration/monitoring/gitlab_self_monitoring_project/index.md79
-rw-r--r--doc/administration/monitoring/ip_whitelist.md2
-rw-r--r--doc/administration/monitoring/performance/grafana_configuration.md30
-rw-r--r--doc/administration/monitoring/performance/performance_bar.md62
-rw-r--r--doc/administration/monitoring/prometheus/gitlab_metrics.md16
-rw-r--r--doc/administration/monitoring/prometheus/index.md25
-rw-r--r--doc/administration/nfs.md2
-rw-r--r--doc/administration/object_storage.md6
-rw-r--r--doc/administration/operations/extra_sidekiq_processes.md52
-rw-r--r--doc/administration/operations/extra_sidekiq_routing.md8
-rw-r--r--doc/administration/operations/fast_ssh_key_lookup.md2
-rw-r--r--doc/administration/operations/moving_repositories.md126
-rw-r--r--doc/administration/packages/container_registry.md78
-rw-r--r--doc/administration/pages/img/lets_encrypt_integration_v12_1.pngbin33137 -> 0 bytes
-rw-r--r--doc/administration/pages/index.md21
-rw-r--r--doc/administration/pages/source.md36
-rw-r--r--doc/administration/polling.md42
-rw-r--r--doc/administration/postgresql/pgbouncer.md39
-rw-r--r--doc/administration/postgresql/replication_and_failover.md205
-rw-r--r--doc/administration/raketasks/check.md2
-rw-r--r--doc/administration/raketasks/doctor.md2
-rw-r--r--doc/administration/raketasks/smtp.md103
-rw-r--r--doc/administration/raketasks/uploads/migrate.md6
-rw-r--r--doc/administration/read_only_gitlab.md2
-rw-r--r--doc/administration/redis/replication_and_failover.md8
-rw-r--r--doc/administration/redis/replication_and_failover_external.md2
-rw-r--r--doc/administration/reference_architectures/10k_users.md111
-rw-r--r--doc/administration/reference_architectures/1k_users.md1
-rw-r--r--doc/administration/reference_architectures/25k_users.md111
-rw-r--r--doc/administration/reference_architectures/2k_users.md165
-rw-r--r--doc/administration/reference_architectures/3k_users.md228
-rw-r--r--doc/administration/reference_architectures/50k_users.md111
-rw-r--r--doc/administration/reference_architectures/5k_users.md85
-rw-r--r--doc/administration/reference_architectures/index.md2
-rw-r--r--doc/administration/repository_storage_paths.md35
-rw-r--r--doc/administration/sidekiq.md14
-rw-r--r--doc/administration/static_objects_external_storage.md32
-rw-r--r--doc/administration/timezone.md17
-rw-r--r--doc/administration/troubleshooting/debug.md6
-rw-r--r--doc/administration/troubleshooting/gitlab_rails_cheat_sheet.md23
-rw-r--r--doc/administration/troubleshooting/kubernetes_cheat_sheet.md2
-rw-r--r--doc/administration/troubleshooting/log_parsing.md2
-rw-r--r--doc/administration/troubleshooting/navigating_gitlab_via_rails_console.md2
-rw-r--r--doc/administration/troubleshooting/ssl.md2
-rw-r--r--doc/administration/wikis/index.md8
-rw-r--r--doc/api/README.md1
-rw-r--r--doc/api/api_resources.md4
-rw-r--r--doc/api/audit_events.md12
-rw-r--r--doc/api/bulk_imports.md41
-rw-r--r--doc/api/container_registry.md49
-rw-r--r--doc/api/custom_attributes.md4
-rw-r--r--doc/api/dependencies.md2
-rw-r--r--doc/api/discussions.md12
-rw-r--r--doc/api/dora4_group_analytics.md9
-rw-r--r--doc/api/environments.md46
-rw-r--r--doc/api/error_tracking.md15
-rw-r--r--doc/api/events.md6
-rw-r--r--doc/api/experiments.md50
-rw-r--r--doc/api/features.md2
-rw-r--r--doc/api/freeze_periods.md2
-rw-r--r--doc/api/graphql/audit_report.md4
-rw-r--r--doc/api/graphql/custom_emoji.md2
-rw-r--r--doc/api/graphql/getting_started.md4
-rw-r--r--doc/api/graphql/img/custom_emoji_query_example.pngbin178815 -> 51531 bytes
-rw-r--r--doc/api/graphql/index.md4
-rw-r--r--doc/api/graphql/reference/index.md1145
-rw-r--r--doc/api/graphql/removed_items.md4
-rw-r--r--doc/api/graphql/users_example.md4
-rw-r--r--doc/api/group_milestones.md8
-rw-r--r--doc/api/group_protected_environments.md2
-rw-r--r--doc/api/group_repository_storage_moves.md44
-rw-r--r--doc/api/groups.md11
-rw-r--r--doc/api/index.md23
-rw-r--r--doc/api/invitations.md1
-rw-r--r--doc/api/issues.md1
-rw-r--r--doc/api/job_artifacts.md4
-rw-r--r--doc/api/members.md12
-rw-r--r--doc/api/merge_request_approvals.md2
-rw-r--r--doc/api/merge_requests.md1
-rw-r--r--doc/api/namespaces.md52
-rw-r--r--doc/api/oauth2.md46
-rw-r--r--doc/api/openapi/openapi_interactive.md4
-rw-r--r--doc/api/packages/debian.md128
-rw-r--r--doc/api/packages/debian_group_distributions.md33
-rw-r--r--doc/api/packages/debian_project_distributions.md32
-rw-r--r--doc/api/packages/helm.md3
-rw-r--r--doc/api/pipelines.md61
-rw-r--r--doc/api/project_badges.md1
-rw-r--r--doc/api/project_repository_storage_moves.md2
-rw-r--r--doc/api/projects.md79
-rw-r--r--doc/api/releases/index.md9
-rw-r--r--doc/api/repositories.md20
-rw-r--r--doc/api/repository_files.md2
-rw-r--r--doc/api/services.md25
-rw-r--r--doc/api/settings.md15
-rw-r--r--doc/api/snippet_repository_storage_moves.md2
-rw-r--r--doc/api/system_hooks.md4
-rw-r--r--doc/api/usage_data.md2
-rw-r--r--doc/api/users.md33
-rw-r--r--doc/api/v3_to_v4.md4
-rw-r--r--doc/api/version.md4
-rw-r--r--doc/architecture/blueprints/consolidating_groups_and_projects/index.md155
-rw-r--r--doc/architecture/blueprints/database/scalability/patterns/img/db_terminology_v14_2.pngbin0 -> 51264 bytes
-rw-r--r--doc/architecture/blueprints/database/scalability/patterns/img/read_mostly_licenses_calls_v14_2.pngbin0 -> 157824 bytes
-rw-r--r--doc/architecture/blueprints/database/scalability/patterns/img/read_mostly_licenses_fixed_v14_2.pngbin0 -> 85790 bytes
-rw-r--r--doc/architecture/blueprints/database/scalability/patterns/img/read_mostly_readwriteratio_v14_2.pngbin0 -> 93291 bytes
-rw-r--r--doc/architecture/blueprints/database/scalability/patterns/img/read_mostly_subscriptions_reads_v14_2.pngbin0 -> 60703 bytes
-rw-r--r--doc/architecture/blueprints/database/scalability/patterns/img/read_mostly_subscriptions_writes_v14_2.pngbin0 -> 52727 bytes
-rw-r--r--doc/architecture/blueprints/database/scalability/patterns/index.md12
-rw-r--r--doc/architecture/blueprints/database/scalability/patterns/read_mostly.md152
-rw-r--r--doc/architecture/blueprints/database/scalability/patterns/time_decay.md361
-rw-r--r--doc/architecture/blueprints/database_scaling/size-limits.md176
-rw-r--r--doc/architecture/blueprints/database_testing/index.md2
-rw-r--r--doc/ci/README.md1
-rw-r--r--doc/ci/caching/index.md2
-rw-r--r--doc/ci/chatops/index.md14
-rw-r--r--doc/ci/ci_cd_for_external_repos/bitbucket_integration.md11
-rw-r--r--doc/ci/ci_cd_for_external_repos/github_integration.md74
-rw-r--r--doc/ci/ci_cd_for_external_repos/index.md8
-rw-r--r--doc/ci/cloud_deployment/index.md2
-rw-r--r--doc/ci/docker/using_kaniko.md6
-rw-r--r--doc/ci/enable_or_disable_ci.md80
-rw-r--r--doc/ci/environments/deployment_safety.md2
-rw-r--r--doc/ci/environments/incremental_rollouts.md10
-rw-r--r--doc/ci/environments/index.md36
-rw-r--r--doc/ci/environments/protected_environments.md39
-rw-r--r--doc/ci/examples/README.md1
-rw-r--r--doc/ci/examples/authenticating-with-hashicorp-vault/index.md4
-rw-r--r--doc/ci/examples/deployment/README.md1
-rw-r--r--doc/ci/examples/deployment/composer-npm-deploy.md4
-rw-r--r--doc/ci/examples/deployment/index.md28
-rw-r--r--doc/ci/examples/index.md2
-rw-r--r--doc/ci/examples/semantic-release.md24
-rw-r--r--doc/ci/img/add_file_template_11_10.pngbin55910 -> 0 bytes
-rw-r--r--doc/ci/index.md4
-rw-r--r--doc/ci/interactive_web_terminal/index.md4
-rw-r--r--doc/ci/jobs/index.md26
-rw-r--r--doc/ci/jobs/job_control.md114
-rw-r--r--doc/ci/lint.md4
-rw-r--r--doc/ci/merge_request_pipelines/index.md1
-rw-r--r--doc/ci/merge_request_pipelines/pipelines_for_merged_results/index.md1
-rw-r--r--doc/ci/merge_request_pipelines/pipelines_for_merged_results/merge_trains/index.md1
-rw-r--r--doc/ci/metrics_reports.md2
-rw-r--r--doc/ci/migration/circleci.md2
-rw-r--r--doc/ci/migration/jenkins.md20
-rw-r--r--doc/ci/multi_project_pipelines.md1
-rw-r--r--doc/ci/parent_child_pipelines.md1
-rw-r--r--doc/ci/pipelines/img/coverage_check_approval_rule_14_1.pngbin116394 -> 34393 bytes
-rw-r--r--doc/ci/pipelines/img/pipelines_graph_dependency_view_hover_v13_12.pngbin83953 -> 32488 bytes
-rw-r--r--doc/ci/pipelines/img/pipelines_graph_dependency_view_links_v13_12.pngbin81552 -> 30970 bytes
-rw-r--r--doc/ci/pipelines/img/pipelines_graph_dependency_view_v13_12.pngbin77811 -> 29871 bytes
-rw-r--r--doc/ci/pipelines/img/pipelines_graph_stage_view_v13_12.pngbin63697 -> 25204 bytes
-rw-r--r--doc/ci/pipelines/index.md52
-rw-r--r--doc/ci/pipelines/job_artifacts.md8
-rw-r--r--doc/ci/pipelines/merge_request_pipelines.md4
-rw-r--r--doc/ci/pipelines/merge_trains.md55
-rw-r--r--doc/ci/pipelines/multi_project_pipelines.md4
-rw-r--r--doc/ci/pipelines/parent_child_pipelines.md6
-rw-r--r--doc/ci/pipelines/pipelines_for_merged_results.md2
-rw-r--r--doc/ci/pipelines/settings.md11
-rw-r--r--doc/ci/quick_start/index.md5
-rw-r--r--doc/ci/review_apps/img/review_button.pngbin16524 -> 0 bytes
-rw-r--r--doc/ci/review_apps/index.md61
-rw-r--r--doc/ci/runners/README.md1
-rw-r--r--doc/ci/runners/build_cloud/linux_build_cloud.md10
-rw-r--r--doc/ci/runners/build_cloud/macos/environment.md43
-rw-r--r--doc/ci/runners/build_cloud/macos_build_cloud.md62
-rw-r--r--doc/ci/runners/build_cloud/windows_build_cloud.md25
-rw-r--r--doc/ci/runners/index.md12
-rw-r--r--doc/ci/runners/runners_scope.md4
-rw-r--r--doc/ci/secrets/index.md34
-rw-r--r--doc/ci/ssh_keys/index.md6
-rw-r--r--doc/ci/triggers/README.md1
-rw-r--r--doc/ci/triggers/index.md2
-rw-r--r--doc/ci/unit_test_reports.md9
-rw-r--r--doc/ci/variables/README.md1
-rw-r--r--doc/ci/variables/index.md52
-rw-r--r--doc/ci/variables/predefined_variables.md5
-rw-r--r--doc/ci/variables/where_variables_can_be_used.md6
-rw-r--r--doc/ci/yaml/README.md1
-rw-r--r--doc/ci/yaml/gitlab_ci_yaml.md7
-rw-r--r--doc/ci/yaml/index.md710
-rw-r--r--doc/ci/yaml/script.md79
-rw-r--r--doc/development/README.md1
-rw-r--r--doc/development/adding_database_indexes.md87
-rw-r--r--doc/development/adding_service_component.md2
-rw-r--r--doc/development/api_graphql_styleguide.md94
-rw-r--r--doc/development/api_styleguide.md2
-rw-r--r--doc/development/architecture.md16
-rw-r--r--doc/development/audit_event_guide/index.md2
-rw-r--r--doc/development/avoiding_downtime_in_migrations.md7
-rw-r--r--doc/development/backend/ruby_style_guide.md72
-rw-r--r--doc/development/background_migrations.md31
-rw-r--r--doc/development/build_test_package.md2
-rw-r--r--doc/development/caching.md348
-rw-r--r--doc/development/cicd/index.md8
-rw-r--r--doc/development/cicd/templates.md4
-rw-r--r--doc/development/code_review.md20
-rw-r--r--doc/development/contributing/community_roles.md2
-rw-r--r--doc/development/contributing/index.md14
-rw-r--r--doc/development/contributing/issue_workflow.md31
-rw-r--r--doc/development/contributing/merge_request_workflow.md14
-rw-r--r--doc/development/contributing/style_guides.md6
-rw-r--r--doc/development/creating_enums.md6
-rw-r--r--doc/development/dangerbot.md14
-rw-r--r--doc/development/database/constraint_naming_convention.md2
-rw-r--r--doc/development/database/database_migration_pipeline.md55
-rw-r--r--doc/development/database/multiple_databases.md198
-rw-r--r--doc/development/database/not_null_constraints.md2
-rw-r--r--doc/development/database_review.md21
-rw-r--r--doc/development/deleting_migrations.md4
-rw-r--r--doc/development/dependencies.md56
-rw-r--r--doc/development/directory_structure.md2
-rw-r--r--doc/development/distributed_tracing.md2
-rw-r--r--doc/development/documentation/feature_flags.md326
-rw-r--r--doc/development/documentation/index.md14
-rw-r--r--doc/development/documentation/site_architecture/index.md4
-rw-r--r--doc/development/documentation/site_architecture/release_process.md9
-rw-r--r--doc/development/documentation/structure.md12
-rw-r--r--doc/development/documentation/styleguide/index.md207
-rw-r--r--doc/development/documentation/styleguide/word_list.md214
-rw-r--r--doc/development/documentation/testing.md28
-rw-r--r--doc/development/ee_features.md48
-rw-r--r--doc/development/elasticsearch.md12
-rw-r--r--doc/development/emails.md6
-rw-r--r--doc/development/experiment_guide/gitlab_experiment.md8
-rw-r--r--doc/development/experiment_guide/index.md1
-rw-r--r--doc/development/export_csv.md2
-rw-r--r--doc/development/fe_guide/dependencies.md47
-rw-r--r--doc/development/fe_guide/design_anti_patterns.md11
-rw-r--r--doc/development/fe_guide/design_patterns.md3
-rw-r--r--doc/development/fe_guide/graphql.md2
-rw-r--r--doc/development/fe_guide/haml.md74
-rw-r--r--doc/development/fe_guide/index.md8
-rw-r--r--doc/development/fe_guide/performance.md6
-rw-r--r--doc/development/fe_guide/style/scss.md3
-rw-r--r--doc/development/fe_guide/troubleshooting.md2
-rw-r--r--doc/development/fe_guide/vue.md69
-rw-r--r--doc/development/feature_flags/controls.md24
-rw-r--r--doc/development/geo.md2
-rw-r--r--doc/development/gitaly.md6
-rw-r--r--doc/development/github_importer.md29
-rw-r--r--doc/development/graphql_guide/authorization.md4
-rw-r--r--doc/development/graphql_guide/batchloader.md2
-rw-r--r--doc/development/i18n/externalization.md128
-rw-r--r--doc/development/i18n/proofreader.md103
-rw-r--r--doc/development/i18n/translation.md4
-rw-r--r--doc/development/img/stage_group_dashboards_error_attribution.pngbin166125 -> 61561 bytes
-rw-r--r--doc/development/img/stage_group_dashboards_service_sli_detail.pngbin110562 -> 41130 bytes
-rw-r--r--doc/development/import_project.md2
-rw-r--r--doc/development/index.md8
-rw-r--r--doc/development/integrations/jenkins.md6
-rw-r--r--doc/development/integrations/jira_connect.md12
-rw-r--r--doc/development/integrations/secure.md2
-rw-r--r--doc/development/internal_api.md34
-rw-r--r--doc/development/iterating_tables_in_batches.md4
-rw-r--r--doc/development/logging.md2
-rw-r--r--doc/development/migration_style_guide.md108
-rw-r--r--doc/development/namespaces_storage_statistics.md2
-rw-r--r--doc/development/permissions.md3
-rw-r--r--doc/development/pipelines.md71
-rw-r--r--doc/development/projections.md2
-rw-r--r--doc/development/query_performance.md4
-rw-r--r--doc/development/reference_processing.md3
-rw-r--r--doc/development/service_ping/dictionary.md23249
-rw-r--r--doc/development/service_ping/implement.md210
-rw-r--r--doc/development/service_ping/index.md512
-rw-r--r--doc/development/service_ping/metrics_dictionary.md15
-rw-r--r--doc/development/service_ping/metrics_instrumentation.md44
-rw-r--r--doc/development/service_ping/metrics_lifecycle.md187
-rw-r--r--doc/development/service_ping/review_guidelines.md18
-rw-r--r--doc/development/sidekiq_style_guide.md18
-rw-r--r--doc/development/snowplow.md8
-rw-r--r--doc/development/snowplow/dictionary.md2
-rw-r--r--doc/development/snowplow/index.md17
-rw-r--r--doc/development/sql.md92
-rw-r--r--doc/development/stage_group_dashboards.md2
-rw-r--r--doc/development/testing_guide/best_practices.md25
-rw-r--r--doc/development/testing_guide/end_to_end/best_practices.md10
-rw-r--r--doc/development/testing_guide/end_to_end/environment_selection.md8
-rw-r--r--doc/development/testing_guide/end_to_end/index.md2
-rw-r--r--doc/development/testing_guide/end_to_end/rspec_metadata_tests.md2
-rw-r--r--doc/development/testing_guide/end_to_end/running_tests_that_require_special_setup.md2
-rw-r--r--doc/development/testing_guide/frontend_testing.md51
-rw-r--r--doc/development/testing_guide/testing_migrations_guide.md138
-rw-r--r--doc/development/uploads.md3
-rw-r--r--doc/development/usage_ping/dictionary.md23421
-rw-r--r--doc/development/verifying_database_capabilities.md4
-rw-r--r--doc/development/what_requires_downtime.md9
-rw-r--r--doc/gitlab-basics/create-your-ssh-keys.md9
-rw-r--r--doc/gitlab-basics/start-using-git.md6
-rw-r--r--doc/install/aws/index.md2
-rw-r--r--doc/install/azure/index.md8
-rw-r--r--doc/install/docker.md13
-rw-r--r--doc/install/installation.md2
-rw-r--r--doc/install/postgresql_extensions.md2
-rw-r--r--doc/install/requirements.md6
-rw-r--r--doc/integration/README.md9
-rw-r--r--doc/integration/akismet.md17
-rw-r--r--doc/integration/auth0.md4
-rw-r--r--doc/integration/azure.md4
-rw-r--r--doc/integration/bitbucket.md4
-rw-r--r--doc/integration/cas.md4
-rw-r--r--doc/integration/datadog.md67
-rw-r--r--doc/integration/elasticsearch.md4
-rw-r--r--doc/integration/external-issue-tracker.md4
-rw-r--r--doc/integration/facebook.md4
-rw-r--r--doc/integration/github.md4
-rw-r--r--doc/integration/gitlab.md4
-rw-r--r--doc/integration/gitpod.md29
-rw-r--r--doc/integration/gmail_action_buttons_for_gitlab.md4
-rw-r--r--doc/integration/google.md4
-rw-r--r--doc/integration/img/gitpod-button_v14_2.pngbin0 -> 8742 bytes
-rw-r--r--doc/integration/index.md5
-rw-r--r--doc/integration/jenkins.md4
-rw-r--r--doc/integration/jenkins_deprecated.md4
-rw-r--r--doc/integration/jira/configure.md59
-rw-r--r--doc/integration/jira/connect-app.md8
-rw-r--r--doc/integration/jira/development_panel.md62
-rw-r--r--doc/integration/jira/dvcs.md6
-rw-r--r--doc/integration/jira/img/jira_dev_panel_jira_setup_3.pngbin37257 -> 80136 bytes
-rw-r--r--doc/integration/jira/index.md36
-rw-r--r--doc/integration/jira/issues.md48
-rw-r--r--doc/integration/jira/jira_cloud_configuration.md8
-rw-r--r--doc/integration/jira/jira_server_configuration.md6
-rw-r--r--doc/integration/jira_development_panel.md9
-rw-r--r--doc/integration/kerberos.md2
-rw-r--r--doc/integration/oauth2_generic.md4
-rw-r--r--doc/integration/oauth_provider.md18
-rw-r--r--doc/integration/omniauth.md19
-rw-r--r--doc/integration/openid_connect_provider.md4
-rw-r--r--doc/integration/recaptcha.md4
-rw-r--r--doc/integration/salesforce.md4
-rw-r--r--doc/integration/saml.md2
-rw-r--r--doc/integration/slash_commands.md4
-rw-r--r--doc/integration/trello_power_up.md4
-rw-r--r--doc/integration/twitter.md4
-rw-r--r--doc/legal/developer_certificate_of_origin.md35
-rw-r--r--doc/migrate_ci_to_ce/README.md9
-rw-r--r--doc/migrate_ci_to_ce/index.md9
-rw-r--r--doc/operations/error_tracking.md38
-rw-r--r--doc/operations/incident_management/alerts.md37
-rw-r--r--doc/operations/incident_management/escalation_policies.md49
-rw-r--r--doc/operations/incident_management/incidents.md2
-rw-r--r--doc/operations/incident_management/oncall_schedules.md73
-rw-r--r--doc/operations/incident_management/paging.md9
-rw-r--r--doc/operations/incident_management/status_page.md41
-rw-r--r--doc/operations/metrics/dashboards/settings.md2
-rw-r--r--doc/operations/metrics/img/linked_runbooks_on_charts.pngbin16966 -> 0 bytes
-rw-r--r--doc/operations/metrics/img/prometheus_alert.pngbin6611 -> 0 bytes
-rw-r--r--doc/operations/metrics/index.md2
-rw-r--r--doc/public_access/public_access.md17
-rw-r--r--doc/push_rules/push_rules.md8
-rw-r--r--doc/raketasks/backup_restore.md238
-rw-r--r--doc/raketasks/import.md2
-rw-r--r--doc/raketasks/index.md1
-rw-r--r--doc/security/README.md1
-rw-r--r--doc/security/cicd_variables.md9
-rw-r--r--doc/ssh/README.md1
-rw-r--r--doc/ssh/index.md17
-rw-r--r--doc/subscriptions/gitlab_com/index.md16
-rw-r--r--doc/subscriptions/quarterly_reconciliation.md20
-rw-r--r--doc/subscriptions/self_managed/index.md307
-rw-r--r--doc/system_hooks/system_hooks.md2
-rw-r--r--doc/topics/autodevops/customize.md13
-rw-r--r--doc/topics/autodevops/img/guide_cluster_apps_v12_3.pngbin166526 -> 0 bytes
-rw-r--r--doc/topics/autodevops/img/guide_first_pipeline_v12_3.pngbin27345 -> 0 bytes
-rw-r--r--doc/topics/autodevops/img/guide_gitlab_gke_details_v12_3.pngbin105931 -> 0 bytes
-rw-r--r--doc/topics/autodevops/img/guide_google_auth_v12_3.pngbin12729 -> 0 bytes
-rw-r--r--doc/topics/autodevops/img/guide_google_signin_v12_3.pngbin43412 -> 0 bytes
-rw-r--r--doc/topics/autodevops/index.md422
-rw-r--r--doc/topics/autodevops/multiple_clusters_auto_devops.md53
-rw-r--r--doc/topics/autodevops/prepare_deployment.md71
-rw-r--r--doc/topics/autodevops/quick_start_guide.md93
-rw-r--r--doc/topics/autodevops/requirements.md86
-rw-r--r--doc/topics/autodevops/stages.md6
-rw-r--r--doc/topics/autodevops/upgrading_auto_deploy_dependencies.md2
-rw-r--r--doc/topics/autodevops/upgrading_postgresql.md8
-rw-r--r--doc/topics/git/git_rebase.md33
-rw-r--r--doc/topics/git/lfs/index.md6
-rw-r--r--doc/topics/git/lfs/migrate_from_git_annex_to_git_lfs.md9
-rw-r--r--doc/topics/git/merge_requests.md9
-rw-r--r--doc/topics/img/gitlab_flow.pngbin47430 -> 46844 bytes
-rw-r--r--doc/university/index.md9
-rw-r--r--doc/university/training/index.md9
-rw-r--r--doc/university/training/topics/agile_git.md9
-rw-r--r--doc/university/training/topics/bisect.md9
-rw-r--r--doc/university/training/topics/env_setup.md9
-rw-r--r--doc/university/training/topics/feature_branching.md9
-rw-r--r--doc/university/training/topics/getting_started.md9
-rw-r--r--doc/university/training/topics/git_add.md9
-rw-r--r--doc/university/training/topics/git_intro.md9
-rw-r--r--doc/university/training/topics/git_log.md9
-rw-r--r--doc/university/training/topics/merge_conflicts.md9
-rw-r--r--doc/university/training/topics/merge_requests.md9
-rw-r--r--doc/university/training/topics/rollback_commits.md9
-rw-r--r--doc/university/training/topics/stash.md9
-rw-r--r--doc/university/training/topics/subtree.md9
-rw-r--r--doc/university/training/topics/unstage.md9
-rw-r--r--doc/university/training/user_training.md9
-rw-r--r--doc/update/img/batched_background_migrations_queued_v14_0.png (renamed from doc/user/admin_area/monitoring/img/batched_background_migrations_queued_v14_0.png)bin11690 -> 11690 bytes
-rw-r--r--doc/update/index.md67
-rw-r--r--doc/update/mysql_to_postgresql.md8
-rw-r--r--doc/update/restore_after_failure.md18
-rw-r--r--doc/update/upgrading_from_source.md22
-rw-r--r--doc/update/upgrading_postgresql_using_slony.md78
-rw-r--r--doc/user/abuse_reports.md9
-rw-r--r--doc/user/admin_area/abuse_reports.md9
-rw-r--r--doc/user/admin_area/activating_deactivating_users.md9
-rw-r--r--doc/user/admin_area/analytics/dev_ops_report.md35
-rw-r--r--doc/user/admin_area/analytics/img/admin_devops_adoption_v14_1.pngbin53453 -> 0 bytes
-rw-r--r--doc/user/admin_area/analytics/img/admin_devops_adoption_v14_2.pngbin0 -> 67833 bytes
-rw-r--r--doc/user/admin_area/approving_users.md59
-rw-r--r--doc/user/admin_area/blocking_unblocking_users.md9
-rw-r--r--doc/user/admin_area/custom_project_templates.md6
-rw-r--r--doc/user/admin_area/geo_nodes.md53
-rw-r--r--doc/user/admin_area/index.md6
-rw-r--r--doc/user/admin_area/license.md20
-rw-r--r--doc/user/admin_area/merge_requests_approvals.md6
-rw-r--r--doc/user/admin_area/moderate_users.md113
-rw-r--r--doc/user/admin_area/monitoring/background_migrations.md13
-rw-r--r--doc/user/admin_area/settings/account_and_limit_settings.md7
-rw-r--r--doc/user/admin_area/settings/continuous_integration.md18
-rw-r--r--doc/user/admin_area/settings/email.md44
-rw-r--r--doc/user/admin_area/settings/floc.md4
-rw-r--r--doc/user/admin_area/settings/help_page.md71
-rw-r--r--doc/user/admin_area/settings/img/admin_package_registry_npm_package_requests_forward.pngbin28630 -> 0 bytes
-rw-r--r--doc/user/admin_area/settings/img/clone_panel_v12_4.pngbin6771 -> 0 bytes
-rw-r--r--doc/user/admin_area/settings/img/domain_denylist.pngbin13601 -> 0 bytes
-rw-r--r--doc/user/admin_area/settings/img/domain_denylist_v14_1.pngbin0 -> 49389 bytes
-rw-r--r--doc/user/admin_area/settings/img/enforce_terms.pngbin54958 -> 0 bytes
-rw-r--r--doc/user/admin_area/settings/img/rate_limit_on_issues_creation_v13_1.pngbin13479 -> 0 bytes
-rw-r--r--doc/user/admin_area/settings/img/rate_limit_on_issues_creation_v14_2.pngbin0 -> 29368 bytes
-rw-r--r--doc/user/admin_area/settings/img/respond_to_terms.pngbin81046 -> 0 bytes
-rw-r--r--doc/user/admin_area/settings/index.md10
-rw-r--r--doc/user/admin_area/settings/project_integration_management.md16
-rw-r--r--doc/user/admin_area/settings/rate_limit_on_issues_creation.md6
-rw-r--r--doc/user/admin_area/settings/rate_limit_on_notes_creation.md2
-rw-r--r--doc/user/admin_area/settings/sign_up_restrictions.md9
-rw-r--r--doc/user/admin_area/settings/terms.md48
-rw-r--r--doc/user/admin_area/settings/usage_statistics.md52
-rw-r--r--doc/user/admin_area/settings/visibility_and_access_controls.md228
-rw-r--r--doc/user/analytics/index.md13
-rw-r--r--doc/user/analytics/value_stream_analytics.md4
-rw-r--r--doc/user/application_security/api_fuzzing/img/api_fuzzing_configuration_snippet_v13.10.pngbin27293 -> 0 bytes
-rw-r--r--doc/user/application_security/api_fuzzing/index.md4
-rw-r--r--doc/user/application_security/configuration/index.md122
-rw-r--r--doc/user/application_security/container_scanning/index.md6
-rw-r--r--doc/user/application_security/cve_id_request.md8
-rw-r--r--doc/user/application_security/dast/browser_based.md72
-rw-r--r--doc/user/application_security/dast/dast_troubleshooting.md26
-rw-r--r--doc/user/application_security/dast/index.md283
-rw-r--r--doc/user/application_security/dast/run_dast_offline.md63
-rw-r--r--doc/user/application_security/dependency_list/index.md15
-rw-r--r--doc/user/application_security/dependency_scanning/index.md352
-rw-r--r--doc/user/application_security/img/vulnerability_page_merge_request_button_dropdown_v13_1.pngbin53561 -> 0 bytes
-rw-r--r--doc/user/application_security/index.md2
-rw-r--r--doc/user/application_security/offline_deployments/index.md4
-rw-r--r--doc/user/application_security/policies/index.md36
-rw-r--r--doc/user/application_security/sast/img/sast_v13_2.pngbin7703 -> 0 bytes
-rw-r--r--doc/user/application_security/sast/index.md10
-rw-r--r--doc/user/application_security/secret_detection/index.md2
-rw-r--r--doc/user/application_security/security_dashboard/img/pipeline_security_dashboard_v13_10.pngbin80367 -> 0 bytes
-rw-r--r--doc/user/application_security/security_dashboard/img/pipeline_security_dashboard_v14_2.pngbin0 -> 83851 bytes
-rw-r--r--doc/user/application_security/security_dashboard/index.md2
-rw-r--r--doc/user/application_security/vulnerabilities/index.md2
-rw-r--r--doc/user/application_security/vulnerability_report/img/group_vulnerability_report_v13_9.pngbin54478 -> 0 bytes
-rw-r--r--doc/user/application_security/vulnerability_report/img/group_vulnerability_report_v14_2.pngbin0 -> 109933 bytes
-rw-r--r--doc/user/application_security/vulnerability_report/img/project_security_dashboard_status_change_v13_10.pngbin41154 -> 0 bytes
-rw-r--r--doc/user/application_security/vulnerability_report/img/project_security_dashboard_status_change_v14_2.pngbin0 -> 63558 bytes
-rw-r--r--doc/user/application_security/vulnerability_report/index.md20
-rw-r--r--doc/user/clusters/agent/ci_cd_tunnel.md42
-rw-r--r--doc/user/clusters/agent/index.md53
-rw-r--r--doc/user/clusters/img/jupyter-git-extension.gifbin495240 -> 0 bytes
-rw-r--r--doc/user/clusters/img/jupyter-gitclone.pngbin22862 -> 0 bytes
-rw-r--r--doc/user/clusters/img/threat_monitoring_v12_9.pngbin53242 -> 0 bytes
-rw-r--r--doc/user/clusters/integrations.md4
-rw-r--r--doc/user/clusters/management_project_template.md34
-rw-r--r--doc/user/compliance/compliance_dashboard/img/compliance_dashboard_v13_11.pngbin15732 -> 0 bytes
-rw-r--r--doc/user/compliance/compliance_dashboard/index.md103
-rw-r--r--doc/user/compliance/compliance_report/img/failed_icon_v13_3.png (renamed from doc/user/compliance/compliance_dashboard/img/failed_icon_v13_3.png)bin4118 -> 4118 bytes
-rw-r--r--doc/user/compliance/compliance_report/img/success_icon_v13_3.png (renamed from doc/user/compliance/compliance_dashboard/img/success_icon_v13_3.png)bin4121 -> 4121 bytes
-rw-r--r--doc/user/compliance/compliance_report/img/warning_icon_v13_3.png (renamed from doc/user/compliance/compliance_dashboard/img/warning_icon_v13_3.png)bin4095 -> 4095 bytes
-rw-r--r--doc/user/compliance/compliance_report/index.md99
-rw-r--r--doc/user/compliance/index.md2
-rw-r--r--doc/user/compliance/license_compliance/img/policies_maintainer_edit_v14_2.pngbin49070 -> 9843 bytes
-rw-r--r--doc/user/compliance/license_compliance/index.md3
-rw-r--r--doc/user/discussions/img/only_allow_merge_if_all_threads_are_resolved.pngbin18257 -> 0 bytes
-rw-r--r--doc/user/discussions/index.md2
-rw-r--r--doc/user/feature_flags.md26
-rw-r--r--doc/user/gitlab_com/index.md13
-rw-r--r--doc/user/group/bulk_editing/index.md9
-rw-r--r--doc/user/group/contribution_analytics/index.md1
-rw-r--r--doc/user/group/devops_adoption/img/group_devops_adoption_v14_1.pngbin54919 -> 0 bytes
-rw-r--r--doc/user/group/devops_adoption/img/group_devops_adoption_v14_2.pngbin0 -> 59733 bytes
-rw-r--r--doc/user/group/devops_adoption/index.md34
-rw-r--r--doc/user/group/epics/manage_epics.md13
-rw-r--r--doc/user/group/import/index.md9
-rw-r--r--doc/user/group/index.md77
-rw-r--r--doc/user/group/issues_analytics/index.md4
-rw-r--r--doc/user/group/iterations/index.md2
-rw-r--r--doc/user/group/roadmap/index.md2
-rw-r--r--doc/user/group/saml_sso/img/saml_group_links_v13_6.pngbin9138 -> 0 bytes
-rw-r--r--doc/user/group/saml_sso/index.md9
-rw-r--r--doc/user/group/saml_sso/scim_setup.md2
-rw-r--r--doc/user/group/settings/img/export_panel_v13_0.pngbin47857 -> 0 bytes
-rw-r--r--doc/user/group/settings/import_export.md33
-rw-r--r--doc/user/group/value_stream_analytics/index.md7
-rw-r--r--doc/user/img/feature_flags_history_note_info_v13_2.pngbin21794 -> 0 bytes
-rw-r--r--doc/user/img/todos_index_v13_11.pngbin49150 -> 0 bytes
-rw-r--r--doc/user/img/todos_todo_list_item.pngbin18776 -> 0 bytes
-rw-r--r--doc/user/img/version_history_notes_collapsed_v13_2.pngbin7770 -> 0 bytes
-rw-r--r--doc/user/infrastructure/clusters/manage/management_project_applications/apparmor.md30
-rw-r--r--doc/user/infrastructure/clusters/manage/management_project_applications/certmanager.md56
-rw-r--r--doc/user/infrastructure/clusters/manage/management_project_applications/cilium.md128
-rw-r--r--doc/user/infrastructure/clusters/manage/management_project_applications/elasticstack.md34
-rw-r--r--doc/user/infrastructure/clusters/manage/management_project_applications/falco.md101
-rw-r--r--doc/user/infrastructure/clusters/manage/management_project_applications/fluentd.md36
-rw-r--r--doc/user/infrastructure/clusters/manage/management_project_applications/ingress.md31
-rw-r--r--doc/user/infrastructure/clusters/manage/management_project_applications/prometheus.md32
-rw-r--r--doc/user/infrastructure/clusters/manage/management_project_applications/runner.md48
-rw-r--r--doc/user/infrastructure/clusters/manage/management_project_applications/sentry.md76
-rw-r--r--doc/user/infrastructure/clusters/manage/management_project_applications/vault.md108
-rw-r--r--doc/user/infrastructure/iac/index.md162
-rw-r--r--doc/user/infrastructure/img/terraform_list_view_actions_v13_8.pngbin36949 -> 0 bytes
-rw-r--r--doc/user/infrastructure/index.md137
-rw-r--r--doc/user/infrastructure/mr_integration.md13
-rw-r--r--doc/user/infrastructure/terraform_state.md21
-rw-r--r--doc/user/instance/clusters/index.md2
-rw-r--r--doc/user/markdown.md4
-rw-r--r--doc/user/packages/composer_repository/index.md2
-rw-r--r--doc/user/packages/conan_repository/index.md7
-rw-r--r--doc/user/packages/container_registry/index.md67
-rw-r--r--doc/user/packages/debian_repository/index.md59
-rw-r--r--doc/user/packages/dependency_proxy/index.md25
-rw-r--r--doc/user/packages/generic_packages/index.md38
-rw-r--r--doc/user/packages/helm_repository/index.md22
-rw-r--r--doc/user/packages/maven_repository/index.md8
-rw-r--r--doc/user/packages/npm_registry/index.md12
-rw-r--r--doc/user/packages/nuget_repository/index.md19
-rw-r--r--doc/user/packages/pypi_repository/index.md16
-rw-r--r--doc/user/packages/terraform_module_registry/index.md4
-rw-r--r--doc/user/permissions.md284
-rw-r--r--doc/user/profile/account/delete_account.md2
-rw-r--r--doc/user/profile/index.md35
-rw-r--r--doc/user/profile/notifications.md17
-rw-r--r--doc/user/profile/personal_access_tokens.md31
-rw-r--r--doc/user/profile/preferences.md7
-rw-r--r--doc/user/project/bulk_editing.md9
-rw-r--r--doc/user/project/clusters/add_remove_clusters.md6
-rw-r--r--doc/user/project/clusters/cluster_access.md4
-rw-r--r--doc/user/project/clusters/runbooks/img/ingress-install.pngbin44363 -> 0 bytes
-rw-r--r--doc/user/project/clusters/runbooks/img/jupyterhub-install.pngbin41588 -> 0 bytes
-rw-r--r--doc/user/project/clusters/serverless/img/dns-entry.pngbin21299 -> 0 bytes
-rw-r--r--doc/user/project/clusters/serverless/img/install-knative.pngbin27104 -> 0 bytes
-rw-r--r--doc/user/project/code_owners.md310
-rw-r--r--doc/user/project/deploy_boards.md2
-rw-r--r--doc/user/project/deploy_tokens/index.md12
-rw-r--r--doc/user/project/highlighting.md11
-rw-r--r--doc/user/project/img/code_owners_mr_widget_v12_4.pngbin27875 -> 0 bytes
-rw-r--r--doc/user/project/img/epics_swimlanes_v13.6.pngbin66710 -> 0 bytes
-rw-r--r--doc/user/project/img/epics_swimlanes_v14_1.pngbin0 -> 22460 bytes
-rw-r--r--doc/user/project/img/issue_board_add_list_v13_6.pngbin11433 -> 0 bytes
-rw-r--r--doc/user/project/img/issue_board_add_list_v14_1.pngbin0 -> 10676 bytes
-rw-r--r--doc/user/project/img/issue_board_assignee_lists_v13_6.pngbin32007 -> 0 bytes
-rw-r--r--doc/user/project/img/issue_board_assignee_lists_v14_1.pngbin0 -> 14776 bytes
-rw-r--r--doc/user/project/img/issue_board_milestone_lists_v13_6.pngbin20456 -> 0 bytes
-rw-r--r--doc/user/project/img/issue_board_milestone_lists_v14_1.pngbin0 -> 11293 bytes
-rw-r--r--doc/user/project/img/issue_boards_core_v13_6.pngbin78044 -> 0 bytes
-rw-r--r--doc/user/project/img/issue_boards_core_v14_1.pngbin0 -> 42135 bytes
-rw-r--r--doc/user/project/img/issue_boards_premium_v13_6.pngbin92133 -> 0 bytes
-rw-r--r--doc/user/project/img/issue_boards_premium_v14_1.pngbin0 -> 42642 bytes
-rw-r--r--doc/user/project/img/protected_branches_devs_can_push_v12_3.pngbin11941 -> 0 bytes
-rw-r--r--doc/user/project/img/remaining_time_v14_2.pngbin0 -> 4239 bytes
-rw-r--r--doc/user/project/import/clearcase.md2
-rw-r--r--doc/user/project/import/gemnasium.md9
-rw-r--r--doc/user/project/import/github.md4
-rw-r--r--doc/user/project/import/gitlab_com.md2
-rw-r--r--doc/user/project/import/jira.md4
-rw-r--r--doc/user/project/import/phabricator.md2
-rw-r--r--doc/user/project/index.md4
-rw-r--r--doc/user/project/integrations/asana.md4
-rw-r--r--doc/user/project/integrations/bamboo.md6
-rw-r--r--doc/user/project/integrations/bugzilla.md4
-rw-r--r--doc/user/project/integrations/custom_issue_tracker.md4
-rw-r--r--doc/user/project/integrations/discord_notifications.md4
-rw-r--r--doc/user/project/integrations/emails_on_push.md4
-rw-r--r--doc/user/project/integrations/ewm.md4
-rw-r--r--doc/user/project/integrations/github.md4
-rw-r--r--doc/user/project/integrations/gitlab_slack_application.md4
-rw-r--r--doc/user/project/integrations/hangouts_chat.md4
-rw-r--r--doc/user/project/integrations/img/prometheus_deploy.pngbin8413 -> 0 bytes
-rw-r--r--doc/user/project/integrations/img/services_templates_redmine_example.pngbin8336 -> 0 bytes
-rw-r--r--doc/user/project/integrations/index.md4
-rw-r--r--doc/user/project/integrations/irker.md98
-rw-r--r--doc/user/project/integrations/jira.md9
-rw-r--r--doc/user/project/integrations/jira_integrations.md9
-rw-r--r--doc/user/project/integrations/mattermost.md4
-rw-r--r--doc/user/project/integrations/mattermost_slash_commands.md6
-rw-r--r--doc/user/project/integrations/microsoft_teams.md8
-rw-r--r--doc/user/project/integrations/mock_ci.md4
-rw-r--r--doc/user/project/integrations/overview.md10
-rw-r--r--doc/user/project/integrations/pivotal_tracker.md4
-rw-r--r--doc/user/project/integrations/prometheus.md2
-rw-r--r--doc/user/project/integrations/redmine.md4
-rw-r--r--doc/user/project/integrations/servicenow.md4
-rw-r--r--doc/user/project/integrations/slack.md88
-rw-r--r--doc/user/project/integrations/slack_slash_commands.md4
-rw-r--r--doc/user/project/integrations/unify_circuit.md4
-rw-r--r--doc/user/project/integrations/webex_teams.md4
-rw-r--r--doc/user/project/integrations/webhooks.md13
-rw-r--r--doc/user/project/integrations/youtrack.md4
-rw-r--r--doc/user/project/issue_board.md64
-rw-r--r--doc/user/project/issues/confidential_issues.md59
-rw-r--r--doc/user/project/issues/csv_export.md7
-rw-r--r--doc/user/project/issues/design_management.md2
-rw-r--r--doc/user/project/issues/img/confidential_mr_branch_dropdown_v12_1.pngbin38985 -> 0 bytes
-rw-r--r--doc/user/project/issues/img/confidential_mr_dropdown_v12_1.pngbin40672 -> 0 bytes
-rw-r--r--doc/user/project/issues/index.md2
-rw-r--r--doc/user/project/issues/issue_data_and_actions.md2
-rw-r--r--doc/user/project/issues/managing_issues.md2
-rw-r--r--doc/user/project/members/index.md12
-rw-r--r--doc/user/project/merge_requests/approvals/index.md21
-rw-r--r--doc/user/project/merge_requests/approvals/rules.md8
-rw-r--r--doc/user/project/merge_requests/approvals/settings.md73
-rw-r--r--doc/user/project/merge_requests/changes.md14
-rw-r--r--doc/user/project/merge_requests/cherry_pick_changes.md7
-rw-r--r--doc/user/project/merge_requests/code_quality.md38
-rw-r--r--doc/user/project/merge_requests/commits.md2
-rw-r--r--doc/user/project/merge_requests/confidential.md75
-rw-r--r--doc/user/project/merge_requests/creating_merge_requests.md2
-rw-r--r--doc/user/project/merge_requests/csv_export.md4
-rw-r--r--doc/user/project/merge_requests/fail_fast_testing.md2
-rw-r--r--doc/user/project/merge_requests/getting_started.md4
-rw-r--r--doc/user/project/merge_requests/img/checkout_button.pngbin5977 -> 0 bytes
-rw-r--r--doc/user/project/merge_requests/img/code_quality_mr_diff_report_v13_11.pngbin28144 -> 0 bytes
-rw-r--r--doc/user/project/merge_requests/img/code_quality_mr_diff_report_v14.pngbin13676 -> 0 bytes
-rw-r--r--doc/user/project/merge_requests/img/code_quality_mr_diff_report_v14_2.pngbin0 -> 40901 bytes
-rw-r--r--doc/user/project/merge_requests/img/merge_request_diff.pngbin26650 -> 0 bytes
-rw-r--r--doc/user/project/merge_requests/img/merge_request_diff_v14_2.pngbin0 -> 26430 bytes
-rw-r--r--doc/user/project/merge_requests/index.md4
-rw-r--r--doc/user/project/merge_requests/merge_request_approvals.md9
-rw-r--r--doc/user/project/merge_requests/reviewing_and_managing_merge_requests.md9
-rw-r--r--doc/user/project/merge_requests/reviews/img/pending_review_comment.pngbin75625 -> 0 bytes
-rw-r--r--doc/user/project/merge_requests/reviews/index.md86
-rw-r--r--doc/user/project/merge_requests/squash_and_merge.md2
-rw-r--r--doc/user/project/merge_requests/status_checks.md3
-rw-r--r--doc/user/project/pages/custom_domains_ssl_tls_certification/index.md4
-rw-r--r--doc/user/project/pages/custom_domains_ssl_tls_certification/lets_encrypt_integration.md2
-rw-r--r--doc/user/project/pages/custom_domains_ssl_tls_certification/ssl_tls_concepts.md3
-rw-r--r--doc/user/project/protected_branches.md15
-rw-r--r--doc/user/project/quick_actions.md1
-rw-r--r--doc/user/project/releases/index.md35
-rw-r--r--doc/user/project/repository/branches/default.md5
-rw-r--r--doc/user/project/repository/img/csv_file_rendered_as_table_v14_1.pngbin39700 -> 17547 bytes
-rw-r--r--doc/user/project/repository/img/web_editor_new_branch_dropdown.pngbin10324 -> 0 bytes
-rw-r--r--doc/user/project/repository/img/web_editor_new_branch_dropdown_v14_1.pngbin0 -> 24244 bytes
-rw-r--r--doc/user/project/repository/img/web_editor_new_branch_from_issue_create_button_v12_6.pngbin19967 -> 0 bytes
-rw-r--r--doc/user/project/repository/img/web_editor_new_branch_from_issue_create_button_v14_1.pngbin0 -> 18848 bytes
-rw-r--r--doc/user/project/repository/img/web_editor_new_branch_from_issue_v14_1.pngbin0 -> 24768 bytes
-rw-r--r--doc/user/project/repository/img/web_editor_new_branch_from_issue_v_12_6.pngbin24507 -> 0 bytes
-rw-r--r--doc/user/project/repository/img/web_editor_new_branch_page.pngbin5886 -> 0 bytes
-rw-r--r--doc/user/project/repository/img/web_editor_new_branch_page_v14_1.pngbin0 -> 12442 bytes
-rw-r--r--doc/user/project/repository/img/web_editor_new_directory_dialog.pngbin7157 -> 0 bytes
-rw-r--r--doc/user/project/repository/img/web_editor_new_directory_dialog_v14_1.pngbin0 -> 13757 bytes
-rw-r--r--doc/user/project/repository/img/web_editor_new_directory_dropdown.pngbin9916 -> 0 bytes
-rw-r--r--doc/user/project/repository/img/web_editor_new_directory_dropdown_v14_1.pngbin0 -> 21934 bytes
-rw-r--r--doc/user/project/repository/img/web_editor_new_file_dropdown.pngbin10152 -> 0 bytes
-rw-r--r--doc/user/project/repository/img/web_editor_new_file_dropdown_v14_1.pngbin0 -> 21097 bytes
-rw-r--r--doc/user/project/repository/img/web_editor_new_file_editor.pngbin38068 -> 0 bytes
-rw-r--r--doc/user/project/repository/img/web_editor_new_file_editor_v14_1.pngbin0 -> 60751 bytes
-rw-r--r--doc/user/project/repository/img/web_editor_template_dropdown_first_file.pngbin8844 -> 0 bytes
-rw-r--r--doc/user/project/repository/img/web_editor_template_dropdown_first_file_v14_1.pngbin0 -> 17652 bytes
-rw-r--r--doc/user/project/repository/img/web_editor_template_dropdown_mit_license.pngbin30924 -> 0 bytes
-rw-r--r--doc/user/project/repository/img/web_editor_template_dropdown_mit_license_v14_1.pngbin0 -> 41669 bytes
-rw-r--r--doc/user/project/repository/img/web_editor_upload_file_dialog.pngbin12553 -> 0 bytes
-rw-r--r--doc/user/project/repository/img/web_editor_upload_file_dialog_v14_1.pngbin0 -> 17522 bytes
-rw-r--r--doc/user/project/repository/img/web_editor_upload_file_dropdown.pngbin10200 -> 0 bytes
-rw-r--r--doc/user/project/repository/img/web_editor_upload_file_dropdown_v14_1.pngbin0 -> 23599 bytes
-rw-r--r--doc/user/project/repository/reducing_the_repo_size_using_git.md6
-rw-r--r--doc/user/project/repository/repository_mirroring.md21
-rw-r--r--doc/user/project/repository/web_editor.md26
-rw-r--r--doc/user/project/repository/x509_signed_commits/index.md16
-rw-r--r--doc/user/project/requirements/index.md4
-rw-r--r--doc/user/project/settings/import_export.md80
-rw-r--r--doc/user/project/settings/index.md54
-rw-r--r--doc/user/project/settings/project_access_tokens.md59
-rw-r--r--doc/user/project/time_tracking.md18
-rw-r--r--doc/user/project/web_ide/index.md25
-rw-r--r--doc/user/project/wiki/index.md25
-rw-r--r--doc/user/project/working_with_projects.md73
-rw-r--r--doc/user/report_abuse.md2
-rw-r--r--doc/user/search/advanced_search.md6
-rw-r--r--doc/user/search/index.md11
-rw-r--r--doc/user/snippets.md16
-rw-r--r--doc/user/todos.md144
-rw-r--r--doc/user/upgrade_email_bypass.md2
-rw-r--r--doc/user/workspace/img/1.1-Instance_overview.pngbin30491 -> 15189 bytes
-rw-r--r--doc/user/workspace/img/1.2-Groups_overview.pngbin24876 -> 12431 bytes
-rw-r--r--doc/user/workspace/img/1.3-Admin.pngbin32534 -> 16113 bytes
-rw-r--r--doc/user/workspace/img/Admin_Settings.pngbin519556 -> 76891 bytes
-rw-r--r--doc/user/workspace/img/hardware_settings.pngbin0 -> 76085 bytes
-rw-r--r--doc/user/workspace/index.md13
755 files changed, 13593 insertions, 54172 deletions
diff --git a/doc/.vale/gitlab/Acronyms.yml b/doc/.vale/gitlab/Acronyms.yml
index bc8f38fe5e2..2d4d0c6909f 100644
--- a/doc/.vale/gitlab/Acronyms.yml
+++ b/doc/.vale/gitlab/Acronyms.yml
@@ -70,6 +70,7 @@ exceptions:
- HDD
- HEAD
- HIPAA
+ - HLL
- HTML
- HTTP
- HTTPS
diff --git a/doc/.vale/gitlab/LatinTerms.yml b/doc/.vale/gitlab/LatinTerms.yml
index 79ba4c17651..12553a801a1 100644
--- a/doc/.vale/gitlab/LatinTerms.yml
+++ b/doc/.vale/gitlab/LatinTerms.yml
@@ -15,5 +15,3 @@ swap:
e\. g\.: for example
i\.e\.: that is
i\. e\.: that is
- etc\.: and so on
- et cetera: and so on
diff --git a/doc/.vale/gitlab/ReadingLevel.yml b/doc/.vale/gitlab/ReadingLevel.yml
new file mode 100644
index 00000000000..0099e70ec8f
--- /dev/null
+++ b/doc/.vale/gitlab/ReadingLevel.yml
@@ -0,0 +1,12 @@
+---
+# Suggestion: gitlab.ReadingLevel
+#
+# Checks the Flesch-Kincaid reading level.
+#
+# For a list of all options, see https://errata-ai.gitbook.io/vale/getting-started/styles
+extends: readability
+message: "Grade level (%s) is high. To lower the score, use shorter sentences and words."
+level: suggestion
+grade: 8
+metrics:
+ - Flesch-Kincaid
diff --git a/doc/.vale/gitlab/SubstitutionWarning.yml b/doc/.vale/gitlab/SubstitutionWarning.yml
index 50ac97bc227..885b58cc937 100644
--- a/doc/.vale/gitlab/SubstitutionWarning.yml
+++ b/doc/.vale/gitlab/SubstitutionWarning.yml
@@ -17,7 +17,9 @@ swap:
file name: filename
filesystem: file system
info: information
+ need to: must
repo: repository
+ timezone: time zone
utilize: use
administrator access: the Administrator role
administrator permission: the Administrator role
diff --git a/doc/.vale/gitlab/Wordy.yml b/doc/.vale/gitlab/Wordy.yml
new file mode 100644
index 00000000000..7818ecbb74a
--- /dev/null
+++ b/doc/.vale/gitlab/Wordy.yml
@@ -0,0 +1,13 @@
+---
+# Suggestion: gitlab.Wordy
+#
+# Suggests shorter versions of wordy phrases.
+#
+# For a list of all options, see https://docs.errata.ai/vale/styles
+extends: substitution
+message: 'Be concise: "%s" is less wordy than "%s".'
+link: https://docs.gitlab.com/ee/development/documentation/styleguide/word_list.html
+level: suggestion
+ignorecase: true
+swap:
+ in order to: to
diff --git a/doc/.vale/gitlab/spelling-exceptions.txt b/doc/.vale/gitlab/spelling-exceptions.txt
index 0520fd53c16..43ff584b550 100644
--- a/doc/.vale/gitlab/spelling-exceptions.txt
+++ b/doc/.vale/gitlab/spelling-exceptions.txt
@@ -14,11 +14,13 @@ anonymized
Ansible
Anthos
Apdex
+Apparmor
approvers
architected
architecting
archiver
Arel
+arity
Artifactory
Asana
Asciidoctor
@@ -27,6 +29,7 @@ Atlassian
auditability
Auth0
Authentiq
+Authy
autocomplete
autocompleted
autocompletes
@@ -128,6 +131,7 @@ CrowdIn
CSV
cybersecurity
Dangerfile
+Datadog
datasource
datasources
datetime
@@ -184,6 +188,7 @@ enum
enums
ETag
Excon
+exfiltration
expirable
Facebook
failover
@@ -200,6 +205,7 @@ Filebeat
Fio
firewalled
firewalling
+fixup
Flawfinder
Flowdock
Fluentd
@@ -244,6 +250,7 @@ Haswell
heatmap
heatmaps
Helm
+Helmfile
Heroku
Herokuish
Hexo
@@ -269,7 +276,7 @@ innersourcing
interdependencies
interdependency
interruptible
-Irker
+irker
issuables
Istio
Jaeger
@@ -686,6 +693,7 @@ unary
unassign
unassigning
unassigns
+unban
uncheck
unchecked
unchecking
diff --git a/doc/README.md b/doc/README.md
index 5ab8653dc35..0e6c2f63f9e 100644
--- a/doc/README.md
+++ b/doc/README.md
@@ -1,5 +1,6 @@
---
redirect_to: 'index.md'
+remove_date: '2021-09-28'
---
This document was moved to [another location](index.md).
diff --git a/doc/administration/audit_events.md b/doc/administration/audit_events.md
index 7a871caf658..48bd812c7f2 100644
--- a/doc/administration/audit_events.md
+++ b/doc/administration/audit_events.md
@@ -123,6 +123,9 @@ From there, you can see the following actions:
- Created, updated, or deleted DAST profiles, DAST scanner profiles, and DAST site profiles
([Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/217872) in GitLab 14.1)
- Changed a project's compliance framework ([Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/329362) in GitLab 14.1)
+- User password required for approvals was updated ([introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/336211) in GitLab 14.2)
+- Permission to modify merge requests approval rules in merge requests was updated ([introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/336211) in GitLab 14.2)
+- New approvals requirement when new commits are added to an MR was updated ([introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/336211) in GitLab 14.2)
Project events can also be accessed via the [Project Audit Events API](../api/audit_events.md#project-audit-events).
@@ -205,9 +208,6 @@ It may make the user interface for your project or audit events very busy, and t
`audit_events` PostgreSQL table may increase considerably. It's disabled by default
to prevent performance degradations on GitLab instances with very high Git write traffic.
-In an upcoming release, Audit Events for Git push events are planned to be enabled
-by default. Follow our [Partitioning strategy for Audit Events epic](https://gitlab.com/groups/gitlab-org/-/epics/3206) for updates.
-
If you still wish to enable **Repository push** events in your instance, follow
the steps below.
diff --git a/doc/administration/auth/atlassian.md b/doc/administration/auth/atlassian.md
index b3892f8f5d9..868482148e5 100644
--- a/doc/administration/auth/atlassian.md
+++ b/doc/administration/auth/atlassian.md
@@ -12,22 +12,14 @@ To enable the Atlassian OmniAuth provider for passwordless authentication you mu
## Atlassian application registration
1. Go to <https://developer.atlassian.com/console/myapps/> and sign-in with the Atlassian
- account that will administer the application.
-
+ account to administer the application.
1. Click **Create a new app**.
-
1. Choose an App Name, such as 'GitLab', and click **Create**.
-
1. Note the `Client ID` and `Secret` for the [GitLab configuration](#gitlab-configuration) steps.
-
1. In the left sidebar under **APIS AND FEATURES**, click **OAuth 2.0 (3LO)**.
-
1. Enter the GitLab callback URL using the format `https://gitlab.example.com/users/auth/atlassian_oauth2/callback` and click **Save changes**.
-
1. Click **+ Add** in the left sidebar under **APIS AND FEATURES**.
-
1. Click **Add** for **Jira platform REST API** and then **Configure**.
-
1. Click **Add** next to the following scopes:
- **View Jira issue data**
- **View user profiles**
@@ -50,7 +42,6 @@ To enable the Atlassian OmniAuth provider for passwordless authentication you mu
```
1. See [Initial OmniAuth Configuration](../../integration/omniauth.md#initial-omniauth-configuration) for initial settings to enable single sign-on and add `atlassian_oauth2` as an OAuth provider.
-
1. Add the provider configuration for Atlassian:
For Omnibus GitLab installations:
@@ -76,9 +67,7 @@ To enable the Atlassian OmniAuth provider for passwordless authentication you mu
```
1. Change `YOUR_CLIENT_ID` and `YOUR_CLIENT_SECRET` to the Client credentials you received in [application registration](#atlassian-application-registration) steps.
-
1. Save the configuration file.
-
1. [Reconfigure](../restart_gitlab.md#omnibus-gitlab-reconfigure) or [restart GitLab](../restart_gitlab.md#installations-from-source) for the changes to take effect if you installed GitLab via Omnibus or from source respectively.
On the sign-in page there should now be an Atlassian icon below the regular sign in form. Click the icon to begin the authentication process.
diff --git a/doc/administration/auth/cognito.md b/doc/administration/auth/cognito.md
index de5fa991abe..41e77c10e27 100644
--- a/doc/administration/auth/cognito.md
+++ b/doc/administration/auth/cognito.md
@@ -12,8 +12,7 @@ The following documentation enables Cognito as an OAuth2 provider.
## Configure AWS Cognito
-To enable the [AWS Cognito](https://aws.amazon.com/cognito/) OAuth2 OmniAuth provider, register your application with Cognito,
-where it will generate a Client ID and Client Secret for your application.
+To enable the [AWS Cognito](https://aws.amazon.com/cognito/) OAuth2 OmniAuth provider, register your application with Cognito. This process generates a Client ID and Client Secret for your application.
Any settings you configure in the following procedure can be modified later.
The following steps enable AWS Cognito as an authentication provider:
@@ -24,7 +23,7 @@ The following steps enable AWS Cognito as an authentication provider:
1. Under **How do you want your end users to sign in?**, select **Email address or phone number** and **Allow email addresses**.
1. Under **Which standard attributes do you want to require?**, select **email**.
1. Go to the next steps of configuration and set the rest of the settings to suit your needs - in the basic setup they are not related to GitLab configuration.
-1. In the **App clients** settings, click **Add an app client**, add **App client name** and select the **Enable username password based authentication** check box.
+1. In the **App clients** settings, click **Add an app client**, add **App client name** and select the **Enable username password based authentication** checkbox.
1. Click **Create app client**.
1. In the next step, you can set up AWS Lambda functions for sending emails. You can then finish creating the pool.
1. After creating the user pool, go to **App client settings** and provide the required information:
@@ -86,7 +85,7 @@ Include the code block in the `/etc/gitlab/gitlab.rb` file:
1. Save the file and [reconfigure](../restart_gitlab.md#omnibus-gitlab-reconfigure) GitLab for the changes to take effect.
Your sign-in page should now display a Cognito button below the regular sign-in form.
-To begin the authentication process, click the icon, and AWS Cognito will ask the user to sign in and authorize the GitLab application.
-If successful, the user will be redirected and signed in to your GitLab instance.
+To begin the authentication process, click the icon, and AWS Cognito asks the user to sign in and authorize the GitLab application.
+If successful, the user is redirected and signed in to your GitLab instance.
For more information, see the [Initial OmniAuth Configuration](../../integration/omniauth.md#initial-omniauth-configuration).
diff --git a/doc/administration/auth/ldap/index.md b/doc/administration/auth/ldap/index.md
index a9d59ca0983..63e3a0a3686 100644
--- a/doc/administration/auth/ldap/index.md
+++ b/doc/administration/auth/ldap/index.md
@@ -197,8 +197,8 @@ Some examples of the `user_filter` field syntax:
LDAP attributes that GitLab uses to create an account for the LDAP user. The specified
attribute can either be the attribute name as a string (for example, `'mail'`), or an
-array of attribute names to try in order (for example, `['mail', 'email']`). Note that
-the user's LDAP sign-in is the attribute specified as `uid` above.
+array of attribute names to try in order (for example, `['mail', 'email']`).
+The user's LDAP sign-in is the attribute specified as `uid` above.
| Setting | Description | Required | Examples |
|--------------|-------------|----------|----------|
@@ -654,7 +654,7 @@ NOTE:
Administrators are not synced unless `group_base` is also
specified alongside `admin_group`. Also, only specify the CN of the `admin_group`,
as opposed to the full DN.
-Additionally, note that if an LDAP user has an `admin` role, but is not a member of the `admin_group`
+Additionally, if an LDAP user has an `admin` role, but is not a member of the `admin_group`
group, GitLab revokes their `admin` role when syncing.
**Omnibus configuration**
diff --git a/doc/administration/auth/ldap/ldap-troubleshooting.md b/doc/administration/auth/ldap/ldap-troubleshooting.md
index 5e6c3443e44..15e8496e915 100644
--- a/doc/administration/auth/ldap/ldap-troubleshooting.md
+++ b/doc/administration/auth/ldap/ldap-troubleshooting.md
@@ -426,7 +426,7 @@ Started syncing 'ldapmain' provider for 'my_group' group
```
The following entry shows an array of all user DNs GitLab sees in the LDAP server.
-Note that these are the users for a single LDAP group, not a GitLab group. If
+These are the users for a single LDAP group, not a GitLab group. If
you have multiple LDAP groups linked to this GitLab group, you see multiple
log entries like this - one for each LDAP group. If you don't see an LDAP user
DN in this log entry, LDAP is not returning the user when we do the lookup.
@@ -666,7 +666,7 @@ ldapsearch -D "cn=admin,dc=ldap-testing,dc=example,dc=com" \
-b "dc=ldap-testing,dc=example,dc=com"
```
-Note that the `bind_dn`, `password`, `port`, `host`, and `base` are all
+The `bind_dn`, `password`, `port`, `host`, and `base` are all
identical to what's configured in the `gitlab.rb`.
For more information, see the [official `ldapsearch` documentation](https://linux.die.net/man/1/ldapsearch).
diff --git a/doc/administration/auth/oidc.md b/doc/administration/auth/oidc.md
index 951c7df26ef..6a037e75f54 100644
--- a/doc/administration/auth/oidc.md
+++ b/doc/administration/auth/oidc.md
@@ -280,7 +280,7 @@ but `LocalAccounts` works for authenticating against local, Active Directory acc
The policy name is lowercased in the URL. For example, `B2C_1A_signup_signin`
policy appears as `b2c_1a_signup_sigin`.
- Note that the trailing forward slash is required.
+The trailing forward slash is required.
1. Verify the operation of the OIDC discovery URL and issuer URL, append `.well-known/openid-configuration`
to the issuer URL:
@@ -336,7 +336,7 @@ but `LocalAccounts` works for authenticating against local, Active Directory acc
- `"accessTokenAcceptedVersion": null`
- `"signInAudience": "AzureADMyOrg"`
- Note that this configuration corresponds with the `Supported account types` setting used when
+This configuration corresponds with the `Supported account types` setting used when
creating the `IdentityExperienceFramework` app.
#### Keycloak
diff --git a/doc/administration/compliance.md b/doc/administration/compliance.md
index 742d23105a9..e356ef0366b 100644
--- a/doc/administration/compliance.md
+++ b/doc/administration/compliance.md
@@ -30,4 +30,4 @@ relevant compliance standards.
|**Separation of Duties using [Protected branches](../user/project/protected_branches.md#require-code-owner-approval-on-a-protected-branch) and [custom CI Configuration Paths](../ci/pipelines/settings.md#specify-a-custom-cicd-configuration-file)**<br> GitLab Premium users can leverage the GitLab cross-project YAML configurations to define deployers of code and developers of code. View the [Separation of Duties Deploy Project](https://gitlab.com/guided-explorations/separation-of-duties-deploy/blob/master/README.md) and [Separation of Duties Project](https://gitlab.com/guided-explorations/separation-of-duties/blob/master/README.md) to see how to use this set up to define these roles. | Premium+ | **{check-circle}** Yes | Project |
|**[Compliance frameworks](../user/project/settings/index.md#compliance-frameworks)**<br>Create a custom compliance framework at the group level to describe the type of compliance requirements any child project needs to follow. | Premium+ | **{check-circle}** Yes | Group |
|**[Compliance pipelines](../user/project/settings/index.md#compliance-pipeline-configuration)**<br>Define a pipeline configuration to run for any projects with a given compliance framework. | Ultimate | **{check-circle}** Yes | Group |
-|**[Compliance dashboard](../user/compliance/compliance_dashboard/index.md)**<br>Quickly get visibility into the compliance posture of your organization. | Ultimate | **{check-circle}** Yes | Group |
+|**[Compliance report](../user/compliance/compliance_report/index.md)**<br>Quickly get visibility into the compliance posture of your organization. | Ultimate | **{check-circle}** Yes | Group |
diff --git a/doc/administration/encrypted_configuration.md b/doc/administration/encrypted_configuration.md
index ff48005e427..8afe30d20ab 100644
--- a/doc/administration/encrypted_configuration.md
+++ b/doc/administration/encrypted_configuration.md
@@ -12,6 +12,7 @@ type: reference
GitLab can read settings for certain features from encrypted settings files. The supported features are:
- [LDAP `user_bn` and `password`](auth/ldap/index.md#using-encrypted-credentials)
+- [SMTP `user_name` and `password`](raketasks/smtp.md#secrets)
In order to enable the encrypted configuration settings, a new base key needs to be generated for
`encrypted_settings_key_base`. The secret can be generated in the following ways:
diff --git a/doc/administration/feature_flags.md b/doc/administration/feature_flags.md
index 44abf4a875d..575fa9eb229 100644
--- a/doc/administration/feature_flags.md
+++ b/doc/administration/feature_flags.md
@@ -31,16 +31,27 @@ These features can be enabled and disabled to allow or disallow users to use
them. It can be done by GitLab administrators with access to GitLab Rails
console.
+When you disable a feature flag, the feature is hidden from users and all of the functionality is turned off.
+For example, data is not recorded and services do not run.
+
If you used a certain feature and identified a bug, a misbehavior, or an
error, it's very important that you [**provide feedback**](https://gitlab.com/gitlab-org/gitlab/-/issues/new?issue[title]=Docs%20-%20feature%20flag%20feedback%3A%20Feature%20Name&issue[description]=Describe%20the%20problem%20you%27ve%20encountered.%0A%0A%3C!--%20Don%27t%20edit%20below%20this%20line%20--%3E%0A%0A%2Flabel%20~%22docs%5C-comments%22%20) to GitLab as soon
as possible so we can improve or fix it while behind a flag. When you upgrade
GitLab to an earlier version, the feature flag status may change.
-WARNING:
-Features deployed behind feature flags may not be ready for
-production use. However, disabling features behind flags that were deployed
-enabled by default may also present a risk. If they're enabled, we recommend
-you leave them as-is.
+## Risks when enabling features still in development
+
+Features that are disabled by default may change or be removed without notice in a future version of GitLab.
+
+Data corruption, stability degradation, or performance degradation might occur if
+you enable a feature that's disabled by default. Problems caused by using a default
+disabled feature aren't covered by GitLab support, unless you were directed by GitLab
+to enable the feature.
+
+## Risks when disabling released features
+
+In most cases, the feature flag code is removed in a future version of GitLab.
+If and when that occurs, from that point onward you can't keep the feature in a disabled state.
## How to enable and disable features behind flags
diff --git a/doc/administration/geo/disaster_recovery/background_verification.md b/doc/administration/geo/disaster_recovery/background_verification.md
index f03cd64c14e..65e0ffd4366 100644
--- a/doc/administration/geo/disaster_recovery/background_verification.md
+++ b/doc/administration/geo/disaster_recovery/background_verification.md
@@ -161,7 +161,7 @@ If the **primary** and **secondary** nodes have a checksum verification mismatch
![Project administration page](img/checksum-differences-admin-project-page.png)
1. Go to the project's repository directory on both **primary** and **secondary** nodes
- (the path is usually `/var/opt/gitlab/git-data/repositories`). Note that if `git_data_dirs`
+ (the path is usually `/var/opt/gitlab/git-data/repositories`). If `git_data_dirs`
is customized, check the directory layout on your server to be sure:
```shell
@@ -198,7 +198,7 @@ nodes, and comparing the output between them.
In GitLab EE 12.1, Geo calculates checksums for attachments, LFS objects, and
archived traces on secondary nodes after the transfer, compares it with the
-stored checksums, and rejects transfers if mismatched. Please note that Geo
+stored checksums, and rejects transfers if mismatched. Geo
currently does not support an automatic way to verify these data if they have
been synced before GitLab EE 12.1.
diff --git a/doc/administration/geo/disaster_recovery/planned_failover.md b/doc/administration/geo/disaster_recovery/planned_failover.md
index 5c15523ac78..8b55bebb42b 100644
--- a/doc/administration/geo/disaster_recovery/planned_failover.md
+++ b/doc/administration/geo/disaster_recovery/planned_failover.md
@@ -118,7 +118,7 @@ On the **secondary** node:
objects aren't yet replicated (shown in gray), consider giving the node more
time to complete
- ![Replication status](../replication/img/geo_node_dashboard_v14_0.png)
+ ![Replication status](../replication/img/geo_dashboard_v14_0.png)
If any objects are failing to replicate, this should be investigated before
scheduling the maintenance window. Following a planned failover, anything that
diff --git a/doc/administration/geo/disaster_recovery/runbooks/planned_failover_multi_node.md b/doc/administration/geo/disaster_recovery/runbooks/planned_failover_multi_node.md
index 16ae5bde062..27990748071 100644
--- a/doc/administration/geo/disaster_recovery/runbooks/planned_failover_multi_node.md
+++ b/doc/administration/geo/disaster_recovery/runbooks/planned_failover_multi_node.md
@@ -72,7 +72,7 @@ On the **secondary** node:
objects aren't yet replicated (shown in gray), consider giving the node more
time to complete.
- ![Replication status](../../replication/img/geo_node_dashboard_v14_0.png)
+ ![Replication status](../../replication/img/geo_dashboard_v14_0.png)
If any objects are failing to replicate, this should be investigated before
scheduling the maintenance window. After a planned failover, anything that
@@ -94,7 +94,7 @@ follow these steps to avoid unnecessary data loss:
1. Until a [read-only mode](https://gitlab.com/gitlab-org/gitlab/-/issues/14609)
is implemented, updates must be prevented from happening manually to the
- **primary**. Note that your **secondary** node still needs read-only
+ **primary**. Your **secondary** node still needs read-only
access to the **primary** node during the maintenance window:
1. At the scheduled time, using your cloud provider or your node's firewall, block
diff --git a/doc/administration/geo/disaster_recovery/runbooks/planned_failover_single_node.md b/doc/administration/geo/disaster_recovery/runbooks/planned_failover_single_node.md
index 36c9d46d650..9d5e65cd194 100644
--- a/doc/administration/geo/disaster_recovery/runbooks/planned_failover_single_node.md
+++ b/doc/administration/geo/disaster_recovery/runbooks/planned_failover_single_node.md
@@ -57,7 +57,7 @@ and there should be no failures (shown in red). If a large proportion of
objects aren't yet replicated (shown in gray), consider giving the node more
time to complete.
-![Replication status](../../replication/img/geo_node_dashboard_v14_0.png)
+![Replication status](../../replication/img/geo_dashboard_v14_0.png)
If any objects are failing to replicate, this should be investigated before
scheduling the maintenance window. After a planned failover, anything that
@@ -79,7 +79,7 @@ follow these steps to avoid unnecessary data loss:
1. Until a [read-only mode](https://gitlab.com/gitlab-org/gitlab/-/issues/14609)
is implemented, updates must be prevented from happening manually to the
- **primary**. Note that your **secondary** node still needs read-only
+ **primary**. Your **secondary** node still needs read-only
access to the **primary** node during the maintenance window:
1. At the scheduled time, using your cloud provider or your node's firewall, block
diff --git a/doc/administration/geo/index.md b/doc/administration/geo/index.md
index 295a448c432..7175d41abd8 100644
--- a/doc/administration/geo/index.md
+++ b/doc/administration/geo/index.md
@@ -101,12 +101,12 @@ From the perspective of a user performing Git operations:
- The **primary** site behaves as a full read-write GitLab instance.
- **Secondary** sites are read-only but proxy Git push operations to the **primary** site. This makes **secondary** sites appear to support push operations themselves.
-To simplify the diagram, some necessary components are omitted. Note that:
+To simplify the diagram, some necessary components are omitted.
- Git over SSH requires [`gitlab-shell`](https://gitlab.com/gitlab-org/gitlab-shell) and OpenSSH.
- Git over HTTPS required [`gitlab-workhorse`](https://gitlab.com/gitlab-org/gitlab-workhorse).
-Note that a **secondary** site needs two different PostgreSQL databases:
+A **secondary** site needs two different PostgreSQL databases:
- A read-only database instance that streams data from the main GitLab database.
- [Another database instance](#geo-tracking-database) used internally by the **secondary** site to record what data has been replicated.
@@ -193,11 +193,8 @@ This list of limitations only reflects the latest version of GitLab. If you are
- The **primary** site has to be online for OAuth login to happen. Existing sessions and Git are not affected. Support for the **secondary** site to use an OAuth provider independent from the primary is [being planned](https://gitlab.com/gitlab-org/gitlab/-/issues/208465).
- The installation takes multiple manual steps that together can take about an hour depending on circumstances. We are working on improving this experience. See [Omnibus GitLab issue #2978](https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/2978) for details.
- Real-time updates of issues/merge requests (for example, via long polling) doesn't work on the **secondary** site.
-- [Selective synchronization](replication/configuration.md#selective-synchronization) applies only to files and repositories. Other datasets are replicated to the **secondary** site in full, making it inappropriate for use as an access control mechanism.
-- Object pools for forked project deduplication work only on the **primary** site, and are duplicated on the **secondary** site.
- GitLab Runners cannot register with a **secondary** site. Support for this is [planned for the future](https://gitlab.com/gitlab-org/gitlab/-/issues/3294).
-- Configuring Geo **secondary** sites to [use high-availability configurations of PostgreSQL](https://gitlab.com/groups/gitlab-org/-/epics/2536) is currently in **alpha** support.
-- [Selective synchronization](replication/configuration.md#selective-synchronization) only limits what repositories are replicated. The entire PostgreSQL data is still replicated. Selective synchronization is not built to accommodate compliance / export control use cases.
+- [Selective synchronization](replication/configuration.md#selective-synchronization) only limits what repositories and files are replicated. The entire PostgreSQL data is still replicated. Selective synchronization is not built to accommodate compliance / export control use cases.
### Limitations on replication/verification
diff --git a/doc/administration/geo/replication/configuration.md b/doc/administration/geo/replication/configuration.md
index e8ffa1ae91a..5b22741f578 100644
--- a/doc/administration/geo/replication/configuration.md
+++ b/doc/administration/geo/replication/configuration.md
@@ -7,35 +7,35 @@ type: howto
# Geo configuration **(PREMIUM SELF)**
-## Configuring a new **secondary** node
+## Configuring a new **secondary** site
NOTE:
-This is the final step in setting up a **secondary** Geo node. Stages of the
+This is the final step in setting up a **secondary** Geo site. Stages of the
setup process must be completed in the documented order.
Before attempting the steps in this stage, [complete all prior stages](../setup/index.md#using-omnibus-gitlab).
-The basic steps of configuring a **secondary** node are to:
+The basic steps of configuring a **secondary** site are to:
-- Replicate required configurations between the **primary** node and the **secondary** nodes.
-- Configure a tracking database on each **secondary** node.
-- Start GitLab on each **secondary** node.
+- Replicate required configurations between the **primary** site and the **secondary** sites.
+- Configure a tracking database on each **secondary** site.
+- Start GitLab on each **secondary** site.
You are encouraged to first read through all the steps before executing them
in your testing/production environment.
NOTE:
-**Do not** set up any custom authentication for the **secondary** nodes. This is handled by the **primary** node.
+**Do not** set up any custom authentication for the **secondary** sites. This is handled by the **primary** site.
Any change that requires access to the **Admin Area** needs to be done in the
-**primary** node because the **secondary** node is a read-only replica.
+**primary** site because the **secondary** site is a read-only replica.
### Step 1. Manually replicate secret GitLab values
GitLab stores a number of secret values in the `/etc/gitlab/gitlab-secrets.json`
-file which *must* be the same on all nodes. Until there is
-a means of automatically replicating these between nodes (see [issue #3789](https://gitlab.com/gitlab-org/gitlab/-/issues/3789)),
-they must be manually replicated to the **secondary** node.
+file which *must* be the same on all of a site's nodes. Until there is
+a means of automatically replicating these between sites (see [issue #3789](https://gitlab.com/gitlab-org/gitlab/-/issues/3789)),
+they must be manually replicated to **all nodes of the secondary site**.
-1. SSH into the **primary** node, and execute the command below:
+1. SSH into a **Rails node on your primary** site, and execute the command below:
```shell
sudo cat /etc/gitlab/gitlab-secrets.json
@@ -43,7 +43,7 @@ they must be manually replicated to the **secondary** node.
This displays the secrets that need to be replicated, in JSON format.
-1. SSH into the **secondary** node and login as the `root` user:
+1. SSH **into each node on your secondary Geo site** and login as the `root` user:
```shell
sudo -i
@@ -55,7 +55,7 @@ they must be manually replicated to the **secondary** node.
mv /etc/gitlab/gitlab-secrets.json /etc/gitlab/gitlab-secrets.json.`date +%F`
```
-1. Copy `/etc/gitlab/gitlab-secrets.json` from the **primary** node to the **secondary** node, or
+1. Copy `/etc/gitlab/gitlab-secrets.json` from the **Rails node on your primary** site to **each node on your secondary** site, or
copy-and-paste the file contents between nodes:
```shell
@@ -72,28 +72,28 @@ they must be manually replicated to the **secondary** node.
chmod 0600 /etc/gitlab/gitlab-secrets.json
```
-1. Reconfigure the **secondary** node for the change to take effect:
+1. Reconfigure **each Rails, Sidekiq and Gitaly nodes on your secondary** site for the change to take effect:
```shell
gitlab-ctl reconfigure
gitlab-ctl restart
```
-### Step 2. Manually replicate the **primary** node's SSH host keys
+### Step 2. Manually replicate the **primary** site's SSH host keys
GitLab integrates with the system-installed SSH daemon, designating a user
(typically named `git`) through which all access requests are handled.
In a [Disaster Recovery](../disaster_recovery/index.md) situation, GitLab system
-administrators promote a **secondary** node to the **primary** node. DNS records for the
-**primary** domain should also be updated to point to the new **primary** node
-(previously a **secondary** node). Doing so avoids the need to update Git remotes and API URLs.
+administrators promote a **secondary** site to the **primary** site. DNS records for the
+**primary** domain should also be updated to point to the new **primary** site
+(previously a **secondary** site). Doing so avoids the need to update Git remotes and API URLs.
-This causes all SSH requests to the newly promoted **primary** node to
+This causes all SSH requests to the newly promoted **primary** site to
fail due to SSH host key mismatch. To prevent this, the primary SSH host
-keys must be manually replicated to the **secondary** node.
+keys must be manually replicated to the **secondary** site.
-1. SSH into the **secondary** node and login as the `root` user:
+1. SSH into **each node on your secondary** site and login as the `root` user:
```shell
sudo -i
@@ -105,34 +105,34 @@ keys must be manually replicated to the **secondary** node.
find /etc/ssh -iname ssh_host_* -exec cp {} {}.backup.`date +%F` \;
```
-1. Copy OpenSSH host keys from the **primary** node:
+1. Copy OpenSSH host keys from the **primary** site:
- If you can access your **primary** node using the **root** user:
+ If you can access one of the **nodes on your primary** site serving SSH traffic (usually, the main GitLab Rails application nodes) using the **root** user:
```shell
- # Run this from the secondary node, change `<primary_node_fqdn>` for the IP or FQDN of the server
+ # Run this from the secondary site, change `<primary_site_fqdn>` for the IP or FQDN of the server
scp root@<primary_node_fqdn>:/etc/ssh/ssh_host_*_key* /etc/ssh
```
If you only have access through a user with `sudo` privileges:
```shell
- # Run this from your primary node:
+ # Run this from the node on your primary site:
sudo tar --transform 's/.*\///g' -zcvf ~/geo-host-key.tar.gz /etc/ssh/ssh_host_*_key*
- # Run this from your secondary node:
- scp <user_with_sudo>@<primary_node_fqdn>:geo-host-key.tar.gz .
+ # Run this on each node on your secondary site:
+ scp <user_with_sudo>@<primary_site_fqdn>:geo-host-key.tar.gz .
tar zxvf ~/geo-host-key.tar.gz -C /etc/ssh
```
-1. On your **secondary** node, ensure the file permissions are correct:
+1. On **each node on your secondary** site, ensure the file permissions are correct:
```shell
chown root:root /etc/ssh/ssh_host_*_key*
chmod 0600 /etc/ssh/ssh_host_*_key*
```
-1. To verify key fingerprint matches, execute the following command on both nodes:
+1. To verify key fingerprint matches, execute the following command on both primary and secondary nodes on each site:
```shell
for file in /etc/ssh/ssh_host_*_key; do ssh-keygen -lf $file; done
@@ -160,7 +160,7 @@ keys must be manually replicated to the **secondary** node.
NOTE:
The output for private keys and public keys command should generate the same fingerprint.
-1. Restart `sshd` on your **secondary** node:
+1. Restart `sshd` on **each node on your secondary** site:
```shell
# Debian or Ubuntu installations
@@ -175,31 +175,34 @@ keys must be manually replicated to the **secondary** node.
SSH into your GitLab **secondary** server in a new terminal. If you are unable to connect,
verify the permissions are correct according to the previous steps.
-### Step 3. Add the **secondary** node
+### Step 3. Add the **secondary** site
-1. SSH into your GitLab **secondary** server and login as root:
+1. SSH into **each Rails and Sidekiq node on your secondary** site and login as root:
```shell
sudo -i
```
-1. Edit `/etc/gitlab/gitlab.rb` and add a **unique** name for your node. You need this in the next steps:
+1. Edit `/etc/gitlab/gitlab.rb` and add a **unique** name for your site. You need this in the next steps:
```ruby
- # The unique identifier for the Geo node.
- gitlab_rails['geo_node_name'] = '<node_name_here>'
+ ##
+ ## The unique identifier for the Geo site. See
+ ## https://docs.gitlab.com/ee/user/admin_area/geo_nodes.html#common-settings
+ ##
+ gitlab_rails['geo_node_name'] = '<site_name_here>'
```
-1. Reconfigure the **secondary** node for the change to take effect:
+1. Reconfigure **each Rails and Sidekiq node on your secondary** site for the change to take effect:
```shell
gitlab-ctl reconfigure
```
-1. On the top bar of the primary node, select **Menu >** **{admin}** **Admin**.
-1. On the left sidebar, select **Geo > Nodes**.
-1. Select **Add site**.
- ![Add secondary node](img/adding_a_secondary_node_v13_3.png)
+1. On the top bar, select **Menu >** **{admin}** **Admin**.
+1. On the left sidebar, select **Geo > Sites**.
+1. Select **New site**.
+ ![Add secondary site](img/adding_a_secondary_v13_3.png)
1. Fill in **Name** with the `gitlab_rails['geo_node_name']` in
`/etc/gitlab/gitlab.rb`. These values must always match *exactly*, character
for character.
@@ -207,10 +210,10 @@ keys must be manually replicated to the **secondary** node.
values must always match, but it doesn't matter if one ends with a `/` and
the other doesn't.
1. Optionally, choose which groups or storage shards should be replicated by the
- **secondary** node. Leave blank to replicate all. Read more in
+ **secondary** site. Leave blank to replicate all. Read more in
[selective synchronization](#selective-synchronization).
-1. Select **Add node** to add the **secondary** node.
-1. SSH into your GitLab **secondary** server and restart the services:
+1. Select **Add site** to add the **secondary** site.
+1. SSH into **each Rails, and Sidekiq node on your secondary** site and restart the services:
```shell
gitlab-ctl restart
@@ -222,58 +225,58 @@ keys must be manually replicated to the **secondary** node.
gitlab-rake gitlab:geo:check
```
-1. SSH into your **primary** server and login as root to verify the
- **secondary** node is reachable or there are any common issue with your Geo setup:
+1. SSH into a **Rails or Sidekiq server on your primary** site and login as root to verify the
+ **secondary** site is reachable or there are any common issue with your Geo setup:
```shell
gitlab-rake gitlab:geo:check
```
-Once added to the Geo administration page and restarted, the **secondary** node automatically starts
-replicating missing data from the **primary** node in a process known as **backfill**.
-Meanwhile, the **primary** node starts to notify each **secondary** node of any changes, so
-that the **secondary** node can act on those notifications immediately.
+Once added to the Geo administration page and restarted, the **secondary** site automatically starts
+replicating missing data from the **primary** site in a process known as **backfill**.
+Meanwhile, the **primary** site starts to notify each **secondary** site of any changes, so
+that the **secondary** site can act on those notifications immediately.
-Be sure the _secondary_ node is running and accessible. You can sign in to the
-_secondary_ node with the same credentials as were used with the _primary_ node.
+Be sure the _secondary_ site is running and accessible. You can sign in to the
+_secondary_ site with the same credentials as were used with the _primary_ site.
-### Step 4. (Optional) Configuring the **secondary** node to trust the **primary** node
+### Step 4. (Optional) Configuring the **secondary** site to trust the **primary** site
-You can safely skip this step if your **primary** node uses a CA-issued HTTPS certificate.
+You can safely skip this step if your **primary** site uses a CA-issued HTTPS certificate.
-If your **primary** node is using a self-signed certificate for *HTTPS* support, you
-need to add that certificate to the **secondary** node's trust store. Retrieve the
-certificate from the **primary** node and follow
+If your **primary** site is using a self-signed certificate for *HTTPS* support, you
+need to add that certificate to the **secondary** site's trust store. Retrieve the
+certificate from the **primary** site and follow
[these instructions](https://docs.gitlab.com/omnibus/settings/ssl.html)
-on the **secondary** node.
+on the **secondary** site.
### Step 5. Enable Git access over HTTP/HTTPS
Geo synchronizes repositories over HTTP/HTTPS, and therefore requires this clone
-method to be enabled. This is enabled by default, but if converting an existing node to Geo it should be checked:
+method to be enabled. This is enabled by default, but if converting an existing site to Geo it should be checked:
-On the **primary** node:
+On the **primary** site:
1. On the top bar, select **Menu >** **{admin}** **Admin**.
1. On the left sidebar, select **Settings > General**.
1. Expand **Visibility and access controls**.
1. Ensure "Enabled Git access protocols" is set to either "Both SSH and HTTP(S)" or "Only HTTP(S)".
-### Step 6. Verify proper functioning of the **secondary** node
+### Step 6. Verify proper functioning of the **secondary** site
-You can sign in to the **secondary** node with the same credentials you used with
-the **primary** node. After you sign in:
+You can sign in to the **secondary** site with the same credentials you used with
+the **primary** site. After you sign in:
1. On the top bar, select **Menu >** **{admin}** **Admin**.
-1. On the left sidebar, select **Geo > Nodes**.
-1. Verify that it's correctly identified as a **secondary** Geo node, and that
+1. On the left sidebar, select **Geo > Sites**.
+1. Verify that it's correctly identified as a **secondary** Geo site, and that
Geo is enabled.
The initial replication, or 'backfill', is probably still in progress. You
-can monitor the synchronization process on each Geo node from the **primary**
-node's **Geo Nodes** dashboard in your browser.
+can monitor the synchronization process on each Geo site from the **primary**
+site's **Geo Sites** dashboard in your browser.
-![Geo dashboard](img/geo_node_dashboard_v14_0.png)
+![Geo dashboard](img/geo_dashboard_v14_0.png)
If your installation isn't working properly, check the
[troubleshooting document](troubleshooting.md).
@@ -286,10 +289,10 @@ The two most obvious issues that can become apparent in the dashboard are:
- You are using a custom certificate or custom CA (see the [troubleshooting document](troubleshooting.md)).
- The instance is firewalled (check your firewall rules).
-Please note that disabling a **secondary** node stops the synchronization process.
+Disabling a **secondary** site stops the synchronization process.
-Please note that if `git_data_dirs` is customized on the **primary** node for multiple
-repository shards you must duplicate the same configuration on each **secondary** node.
+If `git_data_dirs` is customized on the **primary** site for multiple
+repository shards you must duplicate the same configuration on each **secondary** site.
Point your users to the [Using a Geo Site guide](usage.md).
@@ -304,7 +307,7 @@ Currently, this is what is synced:
## Selective synchronization
Geo supports selective synchronization, which allows administrators to choose
-which projects should be synchronized by **secondary** nodes.
+which projects should be synchronized by **secondary** sites.
A subset of projects can be chosen, either by group or by storage shard. The
former is ideal for replicating data belonging to a subset of users, while the
latter is more suited to progressively rolling out Geo to a large GitLab
@@ -312,22 +315,22 @@ instance.
It is important to note that selective synchronization:
-1. Does not restrict permissions from **secondary** nodes.
-1. Does not hide project metadata from **secondary** nodes.
+1. Does not restrict permissions from **secondary** sites.
+1. Does not hide project metadata from **secondary** sites.
- Since Geo currently relies on PostgreSQL replication, all project metadata
- gets replicated to **secondary** nodes, but repositories that have not been
+ gets replicated to **secondary** sites, but repositories that have not been
selected are empty.
1. Does not reduce the number of events generated for the Geo event log.
- - The **primary** node generates events as long as any **secondary** nodes are present.
- Selective synchronization restrictions are implemented on the **secondary** nodes,
- not the **primary** node.
+ - The **primary** site generates events as long as any **secondary** sites are present.
+ Selective synchronization restrictions are implemented on the **secondary** sites,
+ not the **primary** site.
### Git operations on unreplicated repositories
> [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/2562) in GitLab 12.10 for HTTP(S) and in GitLab 13.0 for SSH.
Git clone, pull, and push operations over HTTP(S) and SSH are supported for repositories that
-exist on the **primary** node but not on **secondary** nodes. This situation can occur
+exist on the **primary** site but not on **secondary** sites. This situation can occur
when:
- Selective synchronization does not include the project attached to the repository.
@@ -335,7 +338,7 @@ when:
## Upgrading Geo
-See the [updating the Geo nodes document](updating_the_geo_nodes.md).
+See the [updating the Geo sites document](updating_the_geo_nodes.md).
## Troubleshooting
diff --git a/doc/administration/geo/replication/datatypes.md b/doc/administration/geo/replication/datatypes.md
index a56d9dc813c..a696e5410e5 100644
--- a/doc/administration/geo/replication/datatypes.md
+++ b/doc/administration/geo/replication/datatypes.md
@@ -32,7 +32,6 @@ verification methods:
| Git | Project repository | Geo with Gitaly | Gitaly Checksum |
| Git | Project wiki repository | Geo with Gitaly | Gitaly Checksum |
| Git | Project designs repository | Geo with Gitaly | Gitaly Checksum |
-| Git | Object pools for forked project deduplication | Geo with Gitaly | _Not implemented_ |
| Git | Project Snippets | Geo with Gitaly | Gitaly Checksum |
| Git | Personal Snippets | Geo with Gitaly | Gitaly Checksum |
| Git | Group wiki repository | Geo with Gitaly | _Not implemented_ |
@@ -47,8 +46,8 @@ verification methods:
| Blobs | Container registry _(file system)_ | Geo with API/Docker API | _Not implemented_ |
| Blobs | Container registry _(object storage)_ | Geo with API/Managed/Docker API (*2*) | _Not implemented_ |
| Blobs | Package registry _(file system)_ | Geo with API | SHA256 checksum |
-| Blobs | Package registry _(object storage)_ | Geo with API/Managed (*2*) | _Not implemented_ |
-| Blobs | Versioned Terraform State _(file system)_ | Geo with API | SHA256 checksum |
+| Blobs | Package registry _(object storage)_ | Geo with API/Managed (*2*) | _Not implemented_ |
+| Blobs | Versioned Terraform State _(file system)_ | Geo with API | SHA256 checksum |
| Blobs | Versioned Terraform State _(object storage)_ | Geo with API/Managed (*2*) | _Not implemented_ |
| Blobs | External Merge Request Diffs _(file system)_ | Geo with API | _Not implemented_ |
| Blobs | External Merge Request Diffs _(object storage)_ | Geo with API/Managed (*2*) | _Not implemented_ |
@@ -69,6 +68,8 @@ or using LVM.
It requires no special file system and can work with NFS or a mounted Storage Appliance (there may be
performance limitations when using a remote file system).
+Geo will trigger garbage collection in Gitaly to [deduplicate forked repositories](../../../development/git_object_deduplication.md#git-object-deduplication-and-gitlab-geo) on Geo secondary sites.
+
Communication is done via Gitaly's own gRPC API. There are three possible ways of synchronization:
- Using regular Git clone/fetch from one Geo site to another (with special authentication).
@@ -186,7 +187,6 @@ successfully, you must replicate their data using some other means.
|[CI job artifacts (other than Job Logs)](../../../ci/pipelines/job_artifacts.md) | **Yes** (10.4) | [No](https://gitlab.com/gitlab-org/gitlab/-/issues/8923) | Via Object Storage provider if supported. Native Geo support (Beta). | Verified only manually using [Integrity Check Rake Task](../../raketasks/check.md) on both sites and comparing the output between them. |
|[CI Pipeline Artifacts](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/models/ci/pipeline_artifact.rb) | [**Yes** (13.11)](https://gitlab.com/gitlab-org/gitlab/-/issues/238464) | [**Yes** (13.11)](https://gitlab.com/gitlab-org/gitlab/-/issues/238464) | Via Object Storage provider if supported. Native Geo support (Beta). | Persists additional artifacts after a pipeline completes |
|[Job logs](../../job_logs.md) | **Yes** (10.4) | [No](https://gitlab.com/gitlab-org/gitlab/-/issues/8923) | Via Object Storage provider if supported. Native Geo support (Beta). | Verified only on transfer or manually using [Integrity Check Rake Task](../../raketasks/check.md) on both sites and comparing the output between them. |
-|[Object pools for forked project deduplication](../../../development/git_object_deduplication.md) | **Yes** | No | No | |
|[Container Registry](../../packages/container_registry.md) | **Yes** (12.3) | No | No | Disabled by default. See [instructions](docker_registry.md) to enable. |
|[Content in object storage (beta)](object_storage.md) | **Yes** (12.4) | [No](https://gitlab.com/gitlab-org/gitlab/-/issues/13845) | No | |
|[Infrastructure Registry for Terraform Module](../../../user/packages/terraform_module_registry/index.md) | **Yes** (14.0) | [**Yes**](#limitation-of-verification-for-files-in-object-storage) (14.0) | Via Object Storage provider if supported. Native Geo support (Beta). | Behind feature flag `geo_package_file_replication`, enabled by default. |
@@ -200,11 +200,11 @@ successfully, you must replicate their data using some other means.
|[Package Registry for generic packages](../../../user/packages/generic_packages/index.md) | **Yes** (13.5) | [**Yes**](#limitation-of-verification-for-files-in-object-storage) (13.10) | Via Object Storage provider if supported. Native Geo support (Beta). | Behind feature flag `geo_package_file_replication`, enabled by default. |
|[Versioned Terraform State](../../terraform_state.md) | **Yes** (13.5) | [**Yes**](#limitation-of-verification-for-files-in-object-storage) (13.12) | Via Object Storage provider if supported. Native Geo support (Beta). | Replication is behind the feature flag `geo_terraform_state_version_replication`, enabled by default. Verification was behind the feature flag `geo_terraform_state_version_verification`, which was removed in 14.0|
|[External merge request diffs](../../merge_request_diffs.md) | **Yes** (13.5) | No | Via Object Storage provider if supported. Native Geo support (Beta). | Replication is behind the feature flag `geo_merge_request_diff_replication`, enabled by default. Verification is under development, behind the feature flag `geo_merge_request_diff_verification`, introduced in 14.0.|
-|[Versioned snippets](../../../user/snippets.md#versioned-snippets) | [**Yes** (13.7)](https://gitlab.com/groups/gitlab-org/-/epics/2809) | [No](https://gitlab.com/groups/gitlab-org/-/epics/2810) | No | |
+|[Versioned snippets](../../../user/snippets.md#versioned-snippets) | [**Yes** (13.7)](https://gitlab.com/groups/gitlab-org/-/epics/2809) | [**Yes** (14.2)](https://gitlab.com/groups/gitlab-org/-/epics/2810) | No | Verification was implemented behind the feature flag `geo_snippet_repository_verification` in 13.11, and the feature flag was removed in 14.2. |
|[Server-side Git hooks](../../server_hooks.md) | [No](https://gitlab.com/groups/gitlab-org/-/epics/1867) | No | No | |
|[Elasticsearch integration](../../../integration/elasticsearch.md) | [No](https://gitlab.com/gitlab-org/gitlab/-/issues/1186) | No | No | |
|[GitLab Pages](../../pages/index.md) | [No](https://gitlab.com/groups/gitlab-org/-/epics/589) | No | Via Object Storage provider if supported. **No** native Geo support (Beta). | |
-|[Dependency proxy images](../../../user/packages/dependency_proxy/index.md) | [No](https://gitlab.com/gitlab-org/gitlab/-/issues/259694) | No | No | Blocked on [Geo: Secondary Mimicry](https://gitlab.com/groups/gitlab-org/-/epics/1528). Note that replication of this cache is not needed for Disaster Recovery purposes because it can be recreated from external sources. |
+|[Dependency proxy images](../../../user/packages/dependency_proxy/index.md) | [No](https://gitlab.com/gitlab-org/gitlab/-/issues/259694) | No | No | Blocked on [Geo: Secondary Mimicry](https://gitlab.com/groups/gitlab-org/-/epics/1528). Replication of this cache is not needed for Disaster Recovery purposes because it can be recreated from external sources. |
|[Vulnerability Export](../../../user/application_security/vulnerability_report/#export-vulnerability-details) | [Not planned](https://gitlab.com/groups/gitlab-org/-/epics/3111) | No | | Not planned because they are ephemeral and sensitive. They can be regenerated on demand. |
#### Limitation of verification for files in Object Storage
diff --git a/doc/administration/geo/replication/img/adding_a_secondary_node_v13_3.png b/doc/administration/geo/replication/img/adding_a_secondary_v13_3.png
index e43ace99666..e43ace99666 100644
--- a/doc/administration/geo/replication/img/adding_a_secondary_node_v13_3.png
+++ b/doc/administration/geo/replication/img/adding_a_secondary_v13_3.png
Binary files differ
diff --git a/doc/administration/geo/replication/img/geo_node_dashboard_v14_0.png b/doc/administration/geo/replication/img/geo_dashboard_v14_0.png
index 6d183fc6bd2..6d183fc6bd2 100644
--- a/doc/administration/geo/replication/img/geo_node_dashboard_v14_0.png
+++ b/doc/administration/geo/replication/img/geo_dashboard_v14_0.png
Binary files differ
diff --git a/doc/administration/geo/replication/img/geo_node_health_v14_0.png b/doc/administration/geo/replication/img/geo_site_health_v14_0.png
index 4c640522569..4c640522569 100644
--- a/doc/administration/geo/replication/img/geo_node_health_v14_0.png
+++ b/doc/administration/geo/replication/img/geo_site_health_v14_0.png
Binary files differ
diff --git a/doc/administration/geo/replication/location_aware_git_url.md b/doc/administration/geo/replication/location_aware_git_url.md
index a80c293149e..ce1af27611e 100644
--- a/doc/administration/geo/replication/location_aware_git_url.md
+++ b/doc/administration/geo/replication/location_aware_git_url.md
@@ -20,7 +20,7 @@ as well.
NOTE:
You can also use a load balancer to distribute web UI or API traffic to
-[multiple Geo **secondary** sites](../../../user/admin_area/geo_nodes.md#multiple-secondary-nodes-behind-a-load-balancer).
+[multiple Geo **secondary** sites](../../../user/admin_area/geo_nodes.md#multiple-secondary-sites-behind-a-load-balancer).
Importantly, the **primary** site cannot yet be included. See the feature request
[Support putting the **primary** behind a Geo node load balancer](https://gitlab.com/gitlab-org/gitlab/-/issues/10888).
@@ -107,7 +107,7 @@ You can customize the:
- SSH remote URL to use the location-aware `git.example.com`. To do so, change the SSH remote URL's
host by setting `gitlab_rails['gitlab_ssh_host']` in `gitlab.rb` of web nodes.
- HTTP remote URL as shown in
- [Custom Git clone URL for HTTP(S)](../../../user/admin_area/settings/visibility_and_access_controls.md#custom-git-clone-url-for-https).
+ [Custom Git clone URL for HTTP(S)](../../../user/admin_area/settings/visibility_and_access_controls.md#customize-git-clone-url-for-https).
## Example Git request handling behavior
diff --git a/doc/administration/geo/replication/multiple_servers.md b/doc/administration/geo/replication/multiple_servers.md
index ea2488b65fb..7db210d31f4 100644
--- a/doc/administration/geo/replication/multiple_servers.md
+++ b/doc/administration/geo/replication/multiple_servers.md
@@ -17,71 +17,59 @@ described, it is possible to adapt these instructions to your needs.
_[diagram source - GitLab employees only](https://docs.google.com/drawings/d/1z0VlizKiLNXVVVaERFwgsIOuEgjcUqDTWPdQYsE7Z4c/edit)_
-The topology above assumes the **primary** and **secondary** Geo clusters
+The topology above assumes the **primary** and **secondary** Geo sites
are located in two separate locations, on their own virtual network
with private IP addresses. The network is configured such that all machines in
one geographic location can communicate with each other using their private IP addresses.
The IP addresses given are examples and may be different depending on the
network topology of your deployment.
-The only external way to access the two Geo deployments is by HTTPS at
+The only external way to access the two Geo sites is by HTTPS at
`gitlab.us.example.com` and `gitlab.eu.example.com` in the example above.
NOTE:
-The **primary** and **secondary** Geo deployments must be able to communicate to each other over HTTPS.
+The **primary** and **secondary** Geo sites must be able to communicate to each other over HTTPS.
## Redis and PostgreSQL for multiple nodes
-Geo supports:
-
-- Redis and PostgreSQL on the **primary** node configured for multiple nodes.
-- Redis on **secondary** nodes configured for multiple nodes.
-
-NOTE:
-Support for PostgreSQL on **secondary** nodes in multi-node configuration
-[is planned](https://gitlab.com/groups/gitlab-org/-/epics/2536).
-
Because of the additional complexity involved in setting up this configuration
for PostgreSQL and Redis, it is not covered by this Geo multi-node documentation.
For more information on setting up a multi-node PostgreSQL cluster and Redis cluster using the Omnibus GitLab package, see:
-- [PostgreSQL multi-node documentation](../../postgresql/replication_and_failover.md)
+- [Geo multi-node database replication](../setup/database.md#multi-node-database-replication)
- [Redis multi-node documentation](../../redis/replication_and_failover.md)
NOTE:
It is possible to use cloud hosted services for PostgreSQL and Redis, but this is beyond the scope of this document.
-## Prerequisites: Two working GitLab multi-node clusters
+## Prerequisites: Two independently working GitLab multi-node sites
-One cluster serves as the **primary** node. Use the
-[GitLab multi-node documentation](../../reference_architectures/index.md) to set this up. If
+One GitLab site serves as the Geo **primary** site. Use the
+[GitLab reference architectures documentation](../../reference_architectures/index.md)
+to set this up. You can use different reference architecture sizes for each Geo site. If
you already have a working GitLab instance that is in-use, it can be used as a
-**primary**.
+**primary** site.
-The second cluster serves as the **secondary** node. Again, use the
-[GitLab multi-node documentation](../../reference_architectures/index.md) to set this up.
+The second GitLab site serves as the Geo **secondary** site. Again, use the
+[GitLab reference architectures documentation](../../reference_architectures/index.md) to set this up.
It's a good idea to log in and test it. However, be aware that its data is
-wiped out as part of the process of replicating from the **primary** node.
+wiped out as part of the process of replicating from the **primary** site.
-## Configure the GitLab cluster to be the **primary** node
+## Configure a GitLab site to be the Geo **primary** site
-The following steps enable a GitLab cluster to serve as the **primary** node.
+The following steps enable a GitLab site to serve as the Geo **primary** site.
-### Step 1: Configure the **primary** frontend servers
+### Step 1: Configure the **primary** frontend nodes
1. Edit `/etc/gitlab/gitlab.rb` and add the following:
```ruby
##
- ## Enable the Geo primary role
+ ## The unique identifier for the Geo site. See
+ ## https://docs.gitlab.com/ee/user/admin_area/geo_nodes.html#common-settings
##
- roles ['geo_primary_role']
-
- ##
- ## The unique identifier for the Geo node.
- ##
- gitlab_rails['geo_node_name'] = '<node_name_here>'
+ gitlab_rails['geo_node_name'] = '<site_name_here>'
##
## Disable automatic migrations
@@ -93,155 +81,63 @@ After making these changes, [reconfigure GitLab](../../restart_gitlab.md#omnibus
NOTE:
PostgreSQL and Redis should have already been disabled on the
-application servers during normal GitLab multi-node setup. Connections
-from the application servers to services on the backend servers should
+application nodes during normal GitLab multi-node setup. Connections
+from the application nodes to services on the backend nodes should
have also been configured. See multi-node configuration documentation for
[PostgreSQL](../../postgresql/replication_and_failover.md#configuring-the-application-nodes)
and [Redis](../../redis/replication_and_failover.md#example-configuration-for-the-gitlab-application).
-### Step 2: Configure the **primary** database
-
-1. Edit `/etc/gitlab/gitlab.rb` and add the following:
-
- ```ruby
- ##
- ## Configure the Geo primary role and the PostgreSQL role
- ##
- roles ['geo_primary_role', 'postgres_role']
- ```
+## Configure the other GitLab site to be a Geo **secondary** site
-## Configure a **secondary** node
-
-A **secondary** cluster is similar to any other GitLab multi-node cluster, with two
+A **secondary** site is similar to any other GitLab multi-node site, with three
major differences:
-- The main PostgreSQL database is a read-only replica of the **primary** node's
+- The main PostgreSQL database is a read-only replica of the Geo **primary** site's
PostgreSQL database.
-- There is also a single PostgreSQL database for the **secondary** cluster,
- called the "tracking database", which tracks the synchronization state of
- various resources.
+- There is an additional PostgreSQL database for each Geo **secondary** site,
+ called the "Geo tracking database", which tracks the replication and verification
+ state of various resources.
+- There is an additional GitLab service [`geo-logcursor`](../index.md#geo-log-cursor)
Therefore, we set up the multi-node components one by one and include deviations
from the normal multi-node setup. However, we highly recommend configuring a
-brand-new cluster first, as if it were not part of a Geo setup. This allows
-verifying that it is a working cluster. And only then should it be modified
-for use as a Geo **secondary**. This helps to separate Geo setup problems from
-unrelated problems.
+brand-new GitLab site first, as if it were not part of a Geo setup. This allows
+verifying that it is a working GitLab site. And only then should it be modified
+for use as a Geo **secondary** site. This helps to separate Geo setup problems from
+unrelated multi-node configuration problems.
-### Step 1: Configure the Redis and Gitaly services on the **secondary** node
+### Step 1: Configure the Redis and Gitaly services on the Geo **secondary** site
Configure the following services, again using the non-Geo multi-node
documentation:
- [Configuring Redis for GitLab](../../redis/replication_and_failover.md#example-configuration-for-the-gitlab-application) for multiple nodes.
- [Gitaly](../../gitaly/index.md), which stores data that is
- synchronized from the **primary** node.
+ synchronized from the Geo **primary** site.
NOTE:
[NFS](../../nfs.md) can be used in place of Gitaly but is not
recommended.
-### Step 2: Configure the main read-only replica PostgreSQL database on the **secondary** node
-
-NOTE:
-The following documentation assumes the database runs on
-a single node only. Multi-node PostgreSQL on **secondary** nodes is
-[not currently supported](https://gitlab.com/groups/gitlab-org/-/epics/2536).
-
-Configure the [**secondary** database](../setup/database.md) as a read-only replica of
-the **primary** database. Use the following as a guide.
-
-1. Generate an MD5 hash of the desired password for the database user that the
- GitLab application uses to access the read-replica database:
-
- Note that the username (`gitlab` by default) is incorporated into the hash.
-
- ```shell
- gitlab-ctl pg-password-md5 gitlab
- # Enter password: <your_password_here>
- # Confirm password: <your_password_here>
- # fca0b89a972d69f00eb3ec98a5838484
- ```
-
- Use this hash to fill in `<md5_hash_of_your_password>` in the next step.
+### Step 2: Configure Postgres streaming replication
-1. Edit `/etc/gitlab/gitlab.rb` in the replica database machine, and add the
- following:
-
- ```ruby
- ##
- ## Configure the Geo secondary role and the PostgreSQL role
- ##
- roles ['geo_secondary_role', 'postgres_role']
-
- ##
- ## The unique identifier for the Geo node.
- ## This should match the secondary's application node.
- ##
- gitlab_rails['geo_node_name'] = '<node_name_here>'
-
- ##
- ## Secondary address
- ## - replace '<secondary_node_ip>' with the public or VPC address of your Geo secondary node
- ## - replace '<tracking_database_ip>' with the public or VPC address of your Geo tracking database node
- ##
- postgresql['listen_address'] = '<secondary_node_ip>'
- postgresql['md5_auth_cidr_addresses'] = ['<secondary_node_ip>/32', '<tracking_database_ip>/32']
-
- ##
- ## Database credentials password (defined previously in primary node)
- ## - replicate same values here as defined in primary node
- ##
- postgresql['sql_user_password'] = '<md5_hash_of_your_password>'
- gitlab_rails['db_password'] = '<your_password_here>'
-
- ##
- ## When running the Geo tracking database on a separate machine, disable it
- ## here and allow connections from the tracking database host. And ensure
- ## the tracking database IP is in postgresql['md5_auth_cidr_addresses'] above.
- ##
- geo_postgresql['enable'] = false
-
- ##
- ## Disable all other services that aren't needed. Note that we had to enable
- ## geo_secondary_role to cause some configuration changes to postgresql, but
- ## the role enables single-node services by default.
- ##
- alertmanager['enable'] = false
- consul['enable'] = false
- geo_logcursor['enable'] = false
- gitaly['enable'] = false
- gitlab_exporter['enable'] = false
- gitlab_workhorse['enable'] = false
- nginx['enable'] = false
- node_exporter['enable'] = false
- pgbouncer_exporter['enable'] = false
- prometheus['enable'] = false
- redis['enable'] = false
- redis_exporter['enable'] = false
- patroni['enable'] = false
- sidekiq['enable'] = false
- sidekiq_cluster['enable'] = false
- puma['enable'] = false
- ```
-
-After making these changes, [reconfigure GitLab](../../restart_gitlab.md#omnibus-gitlab-reconfigure) so the changes take effect.
+Follow the [Geo database replication instructions](../setup/database.md).
If using an external PostgreSQL instance, refer also to
[Geo with external PostgreSQL instances](../setup/external_database.md).
-### Step 3: Configure the tracking database on the **secondary** node
+### Step 3: Configure the Geo tracking database on the Geo **secondary** site
-NOTE:
-This documentation assumes the tracking database runs on
-only a single machine, rather than as a PostgreSQL cluster.
+If you want to run the Geo tracking database in a multi-node PostgreSQL cluster,
+then follow [Configuring Patroni cluster for the tracking PostgreSQL database](../setup/database.md#configuring-patroni-cluster-for-the-tracking-postgresql-database).
-Configure the tracking database.
+If you want to run the Geo tracking database on a single node, then follow
+the instructions below.
1. Generate an MD5 hash of the desired password for the database user that the
GitLab application uses to access the tracking database:
- Note that the username (`gitlab_geo` by default) is incorporated into the
+ The username (`gitlab_geo` by default) is incorporated into the
hash.
```shell
@@ -254,8 +150,8 @@ Configure the tracking database.
Use this hash to fill in `<tracking_database_password_md5_hash>` in the next
step.
-1. Edit `/etc/gitlab/gitlab.rb` in the tracking database machine, and add the
- following:
+1. On the machine where the Geo tracking database is intended to run, add the
+ following to `/etc/gitlab/gitlab.rb`:
```ruby
##
@@ -271,29 +167,8 @@ Configure the tracking database.
geo_postgresql['md5_auth_cidr_addresses'] = ['<replica_database_ip>/32']
gitlab_rails['db_host'] = '<replica_database_ip>'
- # Prevent reconfigure from attempting to run migrations on the replica DB
+ # Prevent reconfigure from attempting to run migrations on the replica database
gitlab_rails['auto_migrate'] = false
-
- ##
- ## Ensure unnecessary services are disabled
- ##
- alertmanager['enable'] = false
- consul['enable'] = false
- geo_logcursor['enable'] = false
- gitaly['enable'] = false
- gitlab_exporter['enable'] = false
- gitlab_workhorse['enable'] = false
- nginx['enable'] = false
- node_exporter['enable'] = false
- pgbouncer_exporter['enable'] = false
- postgresql['enable'] = false
- prometheus['enable'] = false
- redis['enable'] = false
- redis_exporter['enable'] = false
- patroni['enable'] = false
- sidekiq['enable'] = false
- sidekiq_cluster['enable'] = false
- puma['enable'] = false
```
After making these changes, [reconfigure GitLab](../../restart_gitlab.md#omnibus-gitlab-reconfigure) so the changes take effect.
@@ -301,29 +176,42 @@ After making these changes, [reconfigure GitLab](../../restart_gitlab.md#omnibus
If using an external PostgreSQL instance, refer also to
[Geo with external PostgreSQL instances](../setup/external_database.md).
-### Step 4: Configure the frontend application servers on the **secondary** node
+### Step 4: Configure the frontend application nodes on the Geo **secondary** site
-In the architecture overview, there are two machines running the GitLab
-application services. These services are enabled selectively in the
-configuration.
+In the minimal [architecture diagram](#architecture-overview) above, there are two
+machines running the GitLab application services. These services are enabled
+selectively in the configuration.
-Configure the GitLab Rails application servers following the relevant steps
+Configure the GitLab Rails application nodes following the relevant steps
outlined in the [reference architectures](../../reference_architectures/index.md),
then make the following modifications:
-1. Edit `/etc/gitlab/gitlab.rb` on each application server in the **secondary**
- cluster, and add the following:
+1. Edit `/etc/gitlab/gitlab.rb` on each application node in the Geo **secondary**
+ site, and add the following:
```ruby
##
- ## Enable the Geo secondary role
+ ## Enable GitLab application services. The application_role enables many services.
+ ## Alternatively, you can choose to enable or disable specific services on
+ ## different nodes to aid in horizontal scaling and separation of concerns.
##
- roles ['geo_secondary_role', 'application_role']
+ roles ['application_role']
+
+ ## `application_role` already enables this. You only need this line if
+ ## you selectively enable individual services that depend on Rails, like
+ ## `puma`, `sidekiq`, `geo-logcursor`, etc.
+ gitlab_rails['enable'] = true
##
- ## The unique identifier for the Geo node.
+ ## Enable Geo Log Cursor service
##
- gitlab_rails['geo_node_name'] = '<node_name_here>'
+ geo_logcursor['enable'] = true
+
+ ##
+ ## The unique identifier for the Geo site. See
+ ## https://docs.gitlab.com/ee/user/admin_area/geo_nodes.html#common-settings
+ ##
+ gitlab_rails['geo_node_name'] = '<site_name_here>'
##
## Disable automatic migrations
@@ -331,12 +219,11 @@ then make the following modifications:
gitlab_rails['auto_migrate'] = false
##
- ## Configure the connection to the tracking DB. And disable application
- ## servers from running tracking databases.
+ ## Configure the connection to the tracking database
##
+ geo_secondary['enable'] = true
geo_secondary['db_host'] = '<geo_tracking_db_host>'
geo_secondary['db_password'] = '<geo_tracking_db_password>'
- geo_postgresql['enable'] = false
##
## Configure connection to the streaming replica database, if you haven't
@@ -353,7 +240,7 @@ then make the following modifications:
##
## If you are using custom users not managed by Omnibus, you need to specify
- ## UIDs and GIDs like below, and ensure they match between servers in a
+ ## UIDs and GIDs like below, and ensure they match between nodes in a
## cluster to avoid permissions issues
##
user['uid'] = 9000
@@ -369,14 +256,17 @@ If you had set up PostgreSQL cluster using the omnibus package and had set
`postgresql['sql_user_password'] = 'md5 digest of secret'`, keep in
mind that `gitlab_rails['db_password']` and `geo_secondary['db_password']`
contains the plaintext passwords. This is used to let the Rails
-servers connect to the databases.
+nodes connect to the databases.
NOTE:
-Make sure that current node IP is listed in `postgresql['md5_auth_cidr_addresses']` setting of your remote database.
+Make sure that current node's IP is listed in
+`postgresql['md5_auth_cidr_addresses']` setting of the read-replica database to
+allow Rails on this node to connect to Postgres.
After making these changes [Reconfigure GitLab](../../restart_gitlab.md#omnibus-gitlab-reconfigure) so the changes take effect.
-On the secondary the following GitLab frontend services are enabled:
+In the [architecture overview](#architecture-overview) topology, the following GitLab
+services are enabled on the "frontend" nodes:
- `geo-logcursor`
- `gitlab-pages`
@@ -388,62 +278,41 @@ On the secondary the following GitLab frontend services are enabled:
- `sidekiq`
- `puma`
-Verify these services by running `sudo gitlab-ctl status` on the frontend
-application servers.
+Verify these services exist by running `sudo gitlab-ctl status` on the frontend
+application nodes.
-### Step 5: Set up the LoadBalancer for the **secondary** node
+### Step 5: Set up the LoadBalancer for the Geo **secondary** site
-In this topology, a load balancer is required at each geographic location to
-route traffic to the application servers.
+The minimal [architecture diagram](#architecture-overview) above shows a load
+balancer at each geographic location to route traffic to the application nodes.
See [Load Balancer for GitLab with multiple nodes](../../load_balancer.md) for
more information.
-### Step 6: Configure the backend application servers on the **secondary** node
+### Step 6: Configure the backend application nodes on the Geo **secondary** site
-The minimal reference architecture diagram above shows all application services
+The minimal [architecture diagram](#architecture-overview) above shows all application services
running together on the same machines. However, for multiple nodes we
[strongly recommend running all services separately](../../reference_architectures/index.md).
-For example, a Sidekiq server could be configured similarly to the frontend
-application servers above, with some changes to run only the `sidekiq` service:
+For example, a Sidekiq node could be configured similarly to the frontend
+application nodes above, with some changes to run only the `sidekiq` service:
-1. Edit `/etc/gitlab/gitlab.rb` on each Sidekiq server in the **secondary**
- cluster, and add the following:
+1. Edit `/etc/gitlab/gitlab.rb` on each Sidekiq node in the Geo **secondary**
+ site, and add the following:
```ruby
##
- ## Enable the Geo secondary role
- ##
- roles ['geo_secondary_role']
-
- ##
## Enable the Sidekiq service
##
sidekiq['enable'] = true
+ gitlab_rails['enable'] = true
##
- ## Ensure unnecessary services are disabled
- ##
- alertmanager['enable'] = false
- consul['enable'] = false
- gitaly['enable'] = false
- gitlab_exporter['enable'] = false
- gitlab_workhorse['enable'] = false
- nginx['enable'] = false
- node_exporter['enable'] = false
- pgbouncer_exporter['enable'] = false
- postgresql['enable'] = false
- prometheus['enable'] = false
- redis['enable'] = false
- redis_exporter['enable'] = false
- patroni['enable'] = false
- puma['enable'] = false
-
- ##
- ## The unique identifier for the Geo node.
+ ## The unique identifier for the Geo site. See
+ ## https://docs.gitlab.com/ee/user/admin_area/geo_nodes.html#common-settings
##
- gitlab_rails['geo_node_name'] = '<node_name_here>'
+ gitlab_rails['geo_node_name'] = '<site_name_here>'
##
## Disable automatic migrations
@@ -451,12 +320,11 @@ application servers above, with some changes to run only the `sidekiq` service:
gitlab_rails['auto_migrate'] = false
##
- ## Configure the connection to the tracking DB. And disable application
- ## servers from running tracking databases.
+ ## Configure the connection to the tracking database
##
+ geo_secondary['enable'] = true
geo_secondary['db_host'] = '<geo_tracking_db_host>'
geo_secondary['db_password'] = '<geo_tracking_db_password>'
- geo_postgresql['enable'] = false
##
## Configure connection to the streaming replica database, if you haven't
@@ -473,7 +341,7 @@ application servers above, with some changes to run only the `sidekiq` service:
##
## If you are using custom users not managed by Omnibus, you need to specify
- ## UIDs and GIDs like below, and ensure they match between servers in a
+ ## UIDs and GIDs like below, and ensure they match between nodes in a
## cluster to avoid permissions issues
##
user['uid'] = 9000
@@ -484,8 +352,8 @@ application servers above, with some changes to run only the `sidekiq` service:
registry['gid'] = 9002
```
- You can similarly configure a server to run only the `geo-logcursor` service
+ You can similarly configure a node to run only the `geo-logcursor` service
with `geo_logcursor['enable'] = true` and disabling Sidekiq with
`sidekiq['enable'] = false`.
- These servers do not need to be attached to the load balancer.
+ These nodes do not need to be attached to the load balancer.
diff --git a/doc/administration/geo/replication/object_storage.md b/doc/administration/geo/replication/object_storage.md
index 90a41ed3e1c..d3931c0ba80 100644
--- a/doc/administration/geo/replication/object_storage.md
+++ b/doc/administration/geo/replication/object_storage.md
@@ -9,6 +9,11 @@ type: howto
Geo can be used in combination with Object Storage (AWS S3, or other compatible object storage).
+The storage method for files is recorded in the database, and the database is replicated
+from the **primary** Geo site to the **secondary** Geo site, so the **secondary** Geo site
+must match the storage method of the **primary** Geo site.
+Therefore, if the **primary** Geo site uses object storage, the **secondary** Geo site must use it too.
+
Currently, **secondary** sites can use either:
- The same storage bucket as the **primary** site.
diff --git a/doc/administration/geo/replication/troubleshooting.md b/doc/administration/geo/replication/troubleshooting.md
index d63e927627a..e072696b37c 100644
--- a/doc/administration/geo/replication/troubleshooting.md
+++ b/doc/administration/geo/replication/troubleshooting.md
@@ -39,7 +39,7 @@ to help identify if something is wrong:
- Is the node's secondary tracking database connected?
- Is the node's secondary tracking database up-to-date?
-![Geo health check](img/geo_node_health_v14_0.png)
+![Geo health check](img/geo_site_health_v14_0.png)
For information on how to resolve common errors reported from the UI, see
[Fixing Common Errors](#fixing-common-errors).
@@ -159,6 +159,27 @@ This machine's Geo node name matches a database record ... no
doc/administration/geo/replication/troubleshooting.md#can-geo-detect-the-current-node-correctly
```
+### Message: `WARNING: oldest xmin is far in the past` and `pg_wal` size growing
+
+If a replication slot is inactive,
+the `pg_wal` logs corresponding to the slot are reserved forever
+(or until the slot is active again). This causes continuous disk usage growth
+and the following messages appear repeatedly in the
+[PostgreSQL logs](../../logs.md#postgresql-logs):
+
+```plaintext
+WARNING: oldest xmin is far in the past
+HINT: Close open transactions soon to avoid wraparound problems.
+You might also need to commit or roll back old prepared transactions, or drop stale replication slots.
+```
+
+To fix this, do the following:
+
+1. [Connect to the primary database](https://docs.gitlab.com/omnibus/settings/database.html#connecting-to-the-bundled-postgresql-database).
+1. Run `SELECT * FROM pg_replication_slots;`.
+1. Note the `slot_name` that reports `active` as `f` (false).
+1. Follow [all these steps to remove that Geo site](remove_geo_site.md).
+
## Fixing errors found when running the Geo check Rake task
When running this Rake task, you may see errors if the nodes are not properly configured:
@@ -299,7 +320,7 @@ sudo gitlab-ctl \
--backup-timeout=21600
```
-This will give the initial replication up to six hours to complete, rather than
+This gives the initial replication up to six hours to complete, rather than
the default thirty minutes. Adjust as required for your installation.
### Message: "PANIC: could not write to file `pg_xlog/xlogtemp.123`: No space left on device"
@@ -314,7 +335,7 @@ log data to build up in `pg_xlog`. Removing the unused slots can reduce the amou
```
NOTE:
- Using `gitlab-rails dbconsole` will not work, because managing replication slots requires superuser permissions.
+ Using `gitlab-rails dbconsole` does not work, because managing replication slots requires superuser permissions.
1. View your replication slots with:
@@ -325,7 +346,8 @@ log data to build up in `pg_xlog`. Removing the unused slots can reduce the amou
Slots where `active` is `f` are not active.
- When this slot should be active, because you have a **secondary** node configured using that slot,
- log in to that **secondary** node and check the PostgreSQL logs why the replication is not running.
+ log in to that **secondary** node and check the [PostgreSQL logs](../../logs.md#postgresql-logs)
+ to view why the replication is not running.
- If you are no longer using the slot (for example, you no longer have Geo enabled), you can remove it with in the
PostgreSQL console session:
@@ -336,13 +358,12 @@ Slots where `active` is `f` are not active.
### Message: "ERROR: canceling statement due to conflict with recovery"
-This error may rarely occur under normal usage, and the system is resilient
+This error occurs infrequently under normal usage, and the system is resilient
enough to recover.
However, under certain conditions, some database queries on secondaries may run
-excessively long, which increases the frequency of this error. At some point,
-some of these queries will never be able to complete due to being canceled
-every time.
+excessively long, which increases the frequency of this error. This can lead to a situation
+where some queries never complete due to being canceled on every replication.
These long-running queries are
[planned to be removed in the future](https://gitlab.com/gitlab-org/gitlab/-/issues/34269),
@@ -483,7 +504,7 @@ Then reconfigure GitLab:
sudo gitlab-ctl reconfigure
```
-This will increase the timeout to four hours (14400 seconds). Choose a time
+This increases the timeout to four hours (14400 seconds). Choose a time
long enough to accommodate a full clone of your largest repositories.
### New LFS objects are never replicated
@@ -521,7 +542,7 @@ to start again from scratch, there are a few steps that can help you:
gitlab-ctl stop geo-logcursor
```
- You can watch Sidekiq logs to know when Sidekiq jobs processing have finished:
+ You can watch the [Sidekiq logs](../../logs.md#sidekiq-logs) to know when Sidekiq jobs processing has finished:
```shell
gitlab-ctl tail sidekiq
@@ -542,9 +563,8 @@ to start again from scratch, there are a few steps that can help you:
1. _(Optional)_ Rename other data folders and create new ones
WARNING:
- You may still have files on the **secondary** node that have been removed from **primary** node but
- removal have not been reflected. If you skip this step, they will never be removed
- from this Geo node.
+ You may still have files on the **secondary** node that have been removed from the **primary** node, but this
+ removal has not been reflected. If you skip this step, these files are not removed at all from the Geo node.
Any uploaded content like file attachments, avatars or LFS objects are stored in a
subfolder in one of the two paths below:
@@ -639,12 +659,12 @@ Counts:
#### If you are promoting a Geo secondary site running on a single server
-`gitlab-ctl promotion-preflight-checks` will fail due to the existence of
+`gitlab-ctl promotion-preflight-checks` fails due to the existence of
`failed` rows in the `geo_design_registry` table. Use the
[previous snippet](#design-repository-failures-on-mirrored-projects-and-project-imports) to
determine the actual replication status of Design repositories.
-`gitlab-ctl promote-to-primary-node` will fail since it runs preflight checks.
+`gitlab-ctl promote-to-primary-node` fails since it runs preflight checks.
If the [previous snippet](#design-repository-failures-on-mirrored-projects-and-project-imports)
shows that all designs are synced, then you can use the
`--skip-preflight-checks` option or the `--force` option to move forward with
@@ -652,7 +672,7 @@ promotion.
#### If you are promoting a Geo secondary site running on multiple servers
-`gitlab-ctl promotion-preflight-checks` will fail due to the existence of
+`gitlab-ctl promotion-preflight-checks` fails due to the existence of
`failed` rows in the `geo_design_registry` table. Use the
[previous snippet](#design-repository-failures-on-mirrored-projects-and-project-imports) to
determine the actual replication status of Design repositories.
@@ -744,7 +764,7 @@ When
you need to run the `gitlab-pg-ctl` command to promote the PostgreSQL
read-replica database.
-In GitLab 12.8 and earlier, this command will fail with the message:
+In GitLab 12.8 and earlier, this command fails with the message:
```plaintext
sudo: gitlab-pg-ctl: command not found
@@ -803,7 +823,7 @@ If you notice for some reason there are more artifacts on the Geo
secondary node than on the Geo primary node, you can use the Rake task
to [cleanup orphan artifact files](../../../raketasks/cleanup.md#remove-orphan-artifact-files).
-On a Geo **secondary** node, this command will also clean up all Geo
+On a Geo **secondary** node, this command also cleans up all Geo
registry record related to the orphan files on disk.
## Fixing sign in errors
diff --git a/doc/administration/geo/setup/database.md b/doc/administration/geo/setup/database.md
index bc4128deb4a..fa343f7eb40 100644
--- a/doc/administration/geo/setup/database.md
+++ b/doc/administration/geo/setup/database.md
@@ -69,11 +69,14 @@ There is an [issue where support is being discussed](https://gitlab.com/gitlab-o
sudo -i
```
-1. Edit `/etc/gitlab/gitlab.rb` and add a **unique** name for your node:
+1. Edit `/etc/gitlab/gitlab.rb` and add a **unique** name for your site:
```ruby
- # The unique identifier for the Geo node.
- gitlab_rails['geo_node_name'] = '<node_name_here>'
+ ##
+ ## The unique identifier for the Geo site. See
+ ## https://docs.gitlab.com/ee/user/admin_area/geo_nodes.html#common-settings
+ ##
+ gitlab_rails['geo_node_name'] = '<site_name_here>'
```
1. Reconfigure the **primary** node for the change to take effect:
@@ -207,7 +210,12 @@ There is an [issue where support is being discussed](https://gitlab.com/gitlab-o
```ruby
##
## Geo Primary role
- ## - configure dependent flags automatically to enable Geo
+ ## - Configures Postgres settings for replication
+ ## - Prevents automatic upgrade of Postgres since it requires downtime of
+ ## streaming replication to Geo secondary sites
+ ## - Enables standard single-node GitLab services like NGINX, Puma, Redis,
+ ## Sidekiq, etc. If you are segregating services, then you will need to
+ ## explicitly disable unwanted services.
##
roles(['geo_primary_role'])
@@ -571,6 +579,13 @@ Leader instance**:
patroni['password'] = 'PATRONI_API_PASSWORD'
patroni['replication_password'] = 'PLAIN_TEXT_POSTGRESQL_REPLICATION_PASSWORD'
+ # Add all patroni nodes to the allowlist
+ patroni['allowlist'] = %w[
+ 127.0.0.1/32
+ PATRONI_PRIMARY1_IP/32 PATRONI_PRIMARY2_IP/32 PATRONI_PRIMARY3_IP/32
+ PATRONI_SECONDARY1_IP/32 PATRONI_SECONDARY2_IP/32 PATRONI_SECONDARY3_IP/32
+ ]
+
# We list all secondary instances as they can all become a Standby Leader
postgresql['md5_auth_cidr_addresses'] = %w[
PATRONI_PRIMARY1_IP/32 PATRONI_PRIMARY2_IP/32 PATRONI_PRIMARY3_IP/32 PATRONI_PRIMARY_PGBOUNCER/32
@@ -725,6 +740,13 @@ For each Patroni instance on the secondary site:
# Any other instance that needs access to the database as per documentation
]
+
+ # Add patroni nodes to the allowlist
+ patroni['allowlist'] = %w[
+ 127.0.0.1/32
+ PATRONI_SECONDARY1_IP/32 PATRONI_SECONDARY2_IP/32 PATRONI_SECONDARY3_IP/32
+ ]
+
patroni['standby_cluster']['enable'] = true
patroni['standby_cluster']['host'] = 'INTERNAL_LOAD_BALANCER_PRIMARY_IP'
patroni['standby_cluster']['port'] = INTERNAL_LOAD_BALANCER_PRIMARY_PORT
@@ -903,6 +925,12 @@ For each Patroni instance on the secondary site for the tracking database:
# Any other instance that needs access to the database as per documentation
]
+ # Add patroni nodes to the allowlist
+ patroni['allowlist'] = %w[
+ 127.0.0.1/32
+ PATRONI_TRACKINGDB1_IP/32 PATRONI_TRACKINGDB2_IP/32 PATRONI_TRACKINGDB3_IP/32
+ ]
+
# Patroni configuration
patroni['username'] = 'PATRONI_API_USERNAME'
patroni['password'] = 'PATRONI_API_PASSWORD'
diff --git a/doc/administration/geo/setup/external_database.md b/doc/administration/geo/setup/external_database.md
index 3ec84f1268b..56d196b54ec 100644
--- a/doc/administration/geo/setup/external_database.md
+++ b/doc/administration/geo/setup/external_database.md
@@ -34,9 +34,10 @@ developed and tested. We aim to be compatible with most external
roles ['geo_primary_role']
##
- ## The unique identifier for the Geo site.
+ ## The unique identifier for the Geo site. See
+ ## https://docs.gitlab.com/ee/user/admin_area/geo_nodes.html#common-settings
##
- gitlab_rails['geo_node_name'] = '<geo_site_name_here>'
+ gitlab_rails['geo_node_name'] = '<site_name_here>'
```
1. Reconfigure the **primary** node for the change to take effect:
@@ -242,7 +243,7 @@ the tracking database on port 5432.
1. Save the file and [reconfigure GitLab](../../restart_gitlab.md#omnibus-gitlab-reconfigure)
-1. The reconfigure should automatically create the database. If needed, you can perform this task manually. Note that this task (whether run by itself or during reconfigure) requires the database user to be a superuser.
+1. The reconfigure should automatically create the database. If needed, you can perform this task manually. This task (whether run by itself or during reconfigure) requires the database user to be a superuser.
```shell
gitlab-rake geo:db:create
diff --git a/doc/administration/get_started.md b/doc/administration/get_started.md
index a9ac8b279de..6fe66aa1642 100644
--- a/doc/administration/get_started.md
+++ b/doc/administration/get_started.md
@@ -1,7 +1,5 @@
---
-stage:
-group:
-info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+info: For assistance with this TAM Onboarding page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments-to-other-projects-and-subjects.
---
# Get started administering GitLab **(FREE)**
@@ -85,6 +83,8 @@ While this isn't an exhaustive list, following these steps gives you a solid sta
- Configure [user and IP rate limits](https://about.gitlab.com/blog/2020/05/20/gitlab-instance-security-best-practices/#user-and-ip-rate-limits).
- Limit [webhooks local access](https://about.gitlab.com/blog/2020/05/20/gitlab-instance-security-best-practices/#webhooks).
- Set [rate limits for protected paths](../user/admin_area/settings/protected_paths.md).
+- Sign up for [Security Alerts](https://about.gitlab.com/company/preference-center/) from the Communication Preference Center.
+- Keep track of security best practices on our [blog page](https://about.gitlab.com/blog/2020/05/20/gitlab-instance-security-best-practices/).
## Monitor GitLab performance
@@ -146,7 +146,7 @@ Backups of GitLab databases and filesystems are taken every 24 hours, and are ke
- GitLab SaaS creates backups to ensure your data is secure, but you can't use these methods to export or back up your data yourself.
- Issues are stored in the database. They can't be stored in Git itself.
- You can use the project export option in:
- - [The UI](../user/project/settings/import_export.md#exporting-a-project-and-its-data).
+ - [The UI](../user/project/settings/import_export.md#export-a-project-and-its-data).
- [The API](../api/project_import_export.md#schedule-an-export).
- [Group export](../user/group/settings/import_export.md) does *not* export the projects in it, but does export:
- Epics
diff --git a/doc/administration/git_annex.md b/doc/administration/git_annex.md
deleted file mode 100644
index d7fb8a37b9c..00000000000
--- a/doc/administration/git_annex.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: 'index.md'
-remove_date: '2021-07-22'
----
-
-This document was moved to [another location](index.md).
-
-<!-- This redirect file can be deleted after <2021-07-22>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/administration/git_protocol.md b/doc/administration/git_protocol.md
index 6e391cb459e..e3e2db81fb0 100644
--- a/doc/administration/git_protocol.md
+++ b/doc/administration/git_protocol.md
@@ -113,14 +113,5 @@ URL to use SSH.
### Observe Git protocol version of connections
-To observe what Git protocol versions are being used in a
-production environment, you can use the following Prometheus query:
-
-```prometheus
-sum(rate(gitaly_git_protocol_requests_total[1m])) by (grpc_method,git_protocol,grpc_service)
-```
-
-<!-- This link sporadically returns a 503 during automated link checking but is correct -->
-
-You can view what Git protocol versions are being used on GitLab.com at
-<https://dashboards.gitlab.com/d/pqlQq0xik/git-protocol-versions>.
+For information on observing the Git protocol versions are being used in a production environment,
+see the [relevant documentation](gitaly/index.md#useful-queries).
diff --git a/doc/administration/gitaly/configure_gitaly.md b/doc/administration/gitaly/configure_gitaly.md
index 0b22df5a115..5e8cbac42c1 100644
--- a/doc/administration/gitaly/configure_gitaly.md
+++ b/doc/administration/gitaly/configure_gitaly.md
@@ -217,10 +217,7 @@ disable enforcement. For more information, see the documentation on configuring
1. Edit `/etc/gitlab/gitlab.rb`:
- <!--
- updates to following example must also be made at
- https://gitlab.com/gitlab-org/charts/gitlab/blob/master/doc/advanced/external-gitaly/external-omnibus-gitaly.md#configure-omnibus-gitlab
- -->
+ <!-- Updates to following example must also be made at https://gitlab.com/gitlab-org/charts/gitlab/blob/master/doc/advanced/external-gitaly/external-omnibus-gitaly.md#configure-omnibus-gitlab -->
```ruby
# Avoid running unnecessary services on the Gitaly server
@@ -267,10 +264,7 @@ disable enforcement. For more information, see the documentation on configuring
1. Append the following to `/etc/gitlab/gitlab.rb` for each respective Gitaly server:
- <!--
- updates to following example must also be made at
- https://gitlab.com/gitlab-org/charts/gitlab/blob/master/doc/advanced/external-gitaly/external-omnibus-gitaly.md#configure-omnibus-gitlab
- -->
+ <!-- Updates to following example must also be made at https://gitlab.com/gitlab-org/charts/gitlab/blob/master/doc/advanced/external-gitaly/external-omnibus-gitaly.md#configure-omnibus-gitlab -->
On `gitaly1.internal`:
@@ -595,10 +589,7 @@ To configure Gitaly with TLS:
1. Edit `/etc/gitlab/gitlab.rb` and add:
- <!--
- updates to following example must also be made at
- https://gitlab.com/gitlab-org/charts/gitlab/blob/master/doc/advanced/external-gitaly/external-omnibus-gitaly.md#configure-omnibus-gitlab
- -->
+ <!-- Updates to following example must also be made at https://gitlab.com/gitlab-org/charts/gitlab/blob/master/doc/advanced/external-gitaly/external-omnibus-gitaly.md#configure-omnibus-gitlab -->
```ruby
gitaly['tls_listen_addr'] = "0.0.0.0:9999"
@@ -693,12 +684,8 @@ To configure Gitaly with TLS:
### Observe type of Gitaly connections
-[Prometheus](../monitoring/prometheus/index.md) can be used observe what type of connections Gitaly
-is serving a production environment. Use the following Prometheus query:
-
-```prometheus
-sum(rate(gitaly_connections_total[5m])) by (type)
-```
+For information on observing the type of Gitaly connections being served, see the
+[relevant documentation](index.md#useful-queries).
## `gitaly-ruby`
@@ -790,20 +777,8 @@ repository. In the example above:
- If another request comes in for a repository that has used up its 20 slots, that request gets
queued.
-You can observe the behavior of this queue using the Gitaly logs and Prometheus:
-
-- In the Gitaly logs, look for the string (or structured log field) `acquire_ms`. Messages that have
- this field are reporting about the concurrency limiter.
-- In Prometheus, look for the following metrics:
-
- - `gitaly_rate_limiting_in_progress`.
- - `gitaly_rate_limiting_queued`.
- - `gitaly_rate_limiting_seconds`.
-
-NOTE:
-Although the name of the Prometheus metric contains `rate_limiting`, it's a concurrency limiter, not
-a rate limiter. If a Gitaly client makes 1,000 requests in a row very quickly, concurrency doesn't
-exceed 1, and the concurrency limiter has no effect.
+You can observe the behavior of this queue using the Gitaly logs and Prometheus. For more
+information, see the [relevant documentation](index.md#monitor-gitaly).
## Background Repository Optimization
@@ -857,30 +832,11 @@ server" and "Gitaly client" refers to the same machine.
### Verify authentication monitoring
-Before rotating a Gitaly authentication token, verify that you can monitor the authentication
-behavior of your GitLab installation using Prometheus. Use the following Prometheus query:
+Before rotating a Gitaly authentication token, verify that you can
+[monitor the authentication behavior](index.md#useful-queries) of your GitLab installation using
+Prometheus.
-```prometheus
-sum(rate(gitaly_authentications_total[5m])) by (enforced, status)
-```
-
-In a system where authentication is configured correctly and where you have live traffic, you
-see something like this:
-
-```prometheus
-{enforced="true",status="ok"} 4424.985419441742
-```
-
-There may also be other numbers with rate 0. We care only about the non-zero numbers.
-
-The only non-zero number should have `enforced="true",status="ok"`. If you have other non-zero
-numbers, something is wrong in your configuration.
-
-The `status="ok"` number reflects your current request rate. In the example above, Gitaly is
-handling about 4000 requests per second.
-
-Now that you have established that you can monitor the Gitaly authentication behavior of your GitLab
-installation, you can begin the rest of the procedure.
+You can then continue the rest of the procedure.
### Enable "auth transitioning" mode
@@ -955,7 +911,7 @@ result as you did at the start. For example:
{enforced="true",status="ok"} 4424.985419441742
```
-Note that `enforced="true"` means that authentication is being enforced.
+`enforced="true"` means that authentication is being enforced.
## Pack-objects cache **(FREE SELF)**
@@ -1079,7 +1035,7 @@ cache hit and the average amount of storage used by cache files.
Entries older than `max_age` get evicted from the in-memory metadata
store, and deleted from disk.
-Note that eviction does not interfere with ongoing requests, so it is OK
+Eviction does not interfere with ongoing requests, so it is OK
for `max_age` to be less than the time it takes to do a fetch over a
slow connection. This is because Unix filesystems do not truly delete
a file until all processes that are reading the deleted file have
@@ -1087,9 +1043,8 @@ closed it.
### Observe the cache
-The cache can be observed in logs and using metrics.
-
-#### Logs
+The cache can be observed [using metrics](index.md#monitor-gitaly) and in the following logged
+information:
|Message|Fields|Description|
|:---|:---|:---|
@@ -1149,33 +1104,3 @@ Example:
"time":"2021-03-25T14:57:53.543Z"
}
```
-
-#### Metrics
-
-The following cache metrics are available.
-
-|Metric|Type|Labels|Description|
-|:---|:---|:---|:---|
-|`gitaly_pack_objects_cache_enabled`|gauge|`dir`,`max_age`|Set to `1` when the cache is enabled via the Gitaly configuration file|
-|`gitaly_pack_objects_cache_lookups_total`|counter|`result`|Hit/miss counter for cache lookups|
-|`gitaly_pack_objects_generated_bytes_total`|counter||Number of bytes written into the cache|
-|`gitaly_pack_objects_served_bytes_total`|counter||Number of bytes read from the cache|
-|`gitaly_streamcache_filestore_disk_usage_bytes`|gauge|`dir`|Total size of cache files|
-|`gitaly_streamcache_index_entries`|gauge|`dir`|Number of entries in the cache|
-
-Some of these metrics start with `gitaly_streamcache`
-because they are generated by the "streamcache" internal library
-package in Gitaly.
-
-Example:
-
-```plaintext
-gitaly_pack_objects_cache_enabled{dir="/var/opt/gitlab/git-data/repositories/+gitaly/PackObjectsCache",max_age="300"} 1
-gitaly_pack_objects_cache_lookups_total{result="hit"} 2
-gitaly_pack_objects_cache_lookups_total{result="miss"} 1
-gitaly_pack_objects_generated_bytes_total 2.618649e+07
-gitaly_pack_objects_served_bytes_total 7.855947e+07
-gitaly_streamcache_filestore_disk_usage_bytes{dir="/var/opt/gitlab/git-data/repositories/+gitaly/PackObjectsCache"} 2.6200152e+07
-gitaly_streamcache_filestore_removed_total{dir="/var/opt/gitlab/git-data/repositories/+gitaly/PackObjectsCache"} 1
-gitaly_streamcache_index_entries{dir="/var/opt/gitlab/git-data/repositories/+gitaly/PackObjectsCache"} 1
-```
diff --git a/doc/administration/gitaly/faq.md b/doc/administration/gitaly/faq.md
index a5964b7a2eb..c7ecaa020e0 100644
--- a/doc/administration/gitaly/faq.md
+++ b/doc/administration/gitaly/faq.md
@@ -25,7 +25,7 @@ The following table outlines the major differences between Gitaly Cluster and Ge
| Tool | Nodes | Locations | Latency tolerance | Failover | Consistency | Provides redundancy for |
|:---------------|:---------|:----------|:-------------------|:----------------------------------------------------------------------------|:-----------------------------------------|:------------------------|
-| Gitaly Cluster | Multiple | Single | Approximately 1 ms | [Automatic](praefect.md#automatic-failover-and-primary-election-strategies) | [Strong](praefect.md#strong-consistency) | Data storage in Git |
+| Gitaly Cluster | Multiple | Single | Approximately 1 ms | [Automatic](praefect.md#automatic-failover-and-primary-election-strategies) | [Strong](index.md#strong-consistency) | Data storage in Git |
| Geo | Multiple | Multiple | Up to one minute | [Manual](../geo/disaster_recovery/index.md) | Eventual | Entire GitLab instance |
For more information, see:
@@ -35,12 +35,12 @@ For more information, see:
## Are there instructions for migrating to Gitaly Cluster?
-Yes! For more information, see [Migrate to Gitaly Cluster](praefect.md#migrate-to-gitaly-cluster).
+Yes! For more information, see [Migrate to Gitaly Cluster](index.md#migrate-to-gitaly-cluster).
## What are some repository storage recommendations?
The size of the required storage can vary between instances and depends on the set
-[replication factor](praefect.md#replication-factor). You might want to include implementing
+[replication factor](index.md#replication-factor). You might want to include implementing
repository storage redundancy.
For a replication factor:
diff --git a/doc/administration/gitaly/index.md b/doc/administration/gitaly/index.md
index 0af248e0573..bca83e903ac 100644
--- a/doc/administration/gitaly/index.md
+++ b/doc/administration/gitaly/index.md
@@ -30,8 +30,8 @@ repository storage is either:
- A Gitaly storage with direct access to repositories using [storage paths](../repository_storage_paths.md),
where each repository is stored on a single Gitaly node. All requests are routed to this node.
-- A virtual storage provided by [Gitaly Cluster](#gitaly-cluster), where each repository can be
- stored on multiple Gitaly nodes for fault tolerance. In a Gitaly Cluster:
+- A [virtual storage](#virtual-storage) provided by [Gitaly Cluster](#gitaly-cluster), where each
+ repository can be stored on multiple Gitaly nodes for fault tolerance. In a Gitaly Cluster:
- Read requests are distributed between multiple Gitaly nodes, which can improve performance.
- Write requests are broadcast to repository replicas.
@@ -39,32 +39,6 @@ WARNING:
Engineering support for NFS for Git repositories is deprecated. Read the
[deprecation notice](#nfs-deprecation-notice).
-## Virtual storage
-
-Virtual storage makes it viable to have a single repository storage in GitLab to simplify repository
-management.
-
-Virtual storage with Gitaly Cluster can usually replace direct Gitaly storage configurations.
-However, this is at the expense of additional storage space needed to store each repository on multiple
-Gitaly nodes. The benefit of using Gitaly Cluster virtual storage over direct Gitaly storage is:
-
-- Improved fault tolerance, because each Gitaly node has a copy of every repository.
-- Improved resource utilization, reducing the need for over-provisioning for shard-specific peak
- loads, because read loads are distributed across Gitaly nodes.
-- Manual rebalancing for performance is not required, because read loads are distributed across
- Gitaly nodes.
-- Simpler management, because all Gitaly nodes are identical.
-
-The number of repository replicas can be configured using a
-[replication factor](praefect.md#replication-factor).
-
-It can
-be uneconomical to have the same replication factor for all repositories.
-[Variable replication factor](https://gitlab.com/groups/gitlab-org/-/epics/3372) is planned to
-provide greater flexibility for extremely large GitLab instances.
-
-As with normal Gitaly storages, virtual storages can be sharded.
-
## Gitaly
The following shows GitLab set up to use direct access to Gitaly:
@@ -160,7 +134,7 @@ In this example:
- Repositories are stored on a virtual storage called `storage-1`.
- Three Gitaly nodes provide `storage-1` access: `gitaly-1`, `gitaly-2`, and `gitaly-3`.
- The three Gitaly nodes share data in three separate hashed storage locations.
-- The [replication factor](praefect.md#replication-factor) is `3`. There are three copies maintained
+- The [replication factor](#replication-factor) is `3`. There are three copies maintained
of each repository.
The availability objectives for Gitaly clusters are:
@@ -170,7 +144,7 @@ The availability objectives for Gitaly clusters are:
Writes are replicated asynchronously. Any writes that have not been replicated
to the newly promoted primary are lost.
- [Strong consistency](praefect.md#strong-consistency) can be used to avoid loss in some
+ [Strong consistency](#strong-consistency) can be used to avoid loss in some
circumstances.
- **Recovery Time Objective (RTO):** Less than 10 seconds.
@@ -178,20 +152,34 @@ The availability objectives for Gitaly clusters are:
second. Failover requires ten consecutive failed health checks on each
Praefect node.
- [Faster outage detection](https://gitlab.com/gitlab-org/gitaly/-/issues/2608)
- is planned to improve this to less than 1 second.
+ Faster outage detection, to improve this speed to less than 1 second,
+ is tracked [in this issue](https://gitlab.com/gitlab-org/gitaly/-/issues/2608).
+
+### Virtual storage
+
+Virtual storage makes it viable to have a single repository storage in GitLab to simplify repository
+management.
+
+Virtual storage with Gitaly Cluster can usually replace direct Gitaly storage configurations.
+However, this is at the expense of additional storage space needed to store each repository on multiple
+Gitaly nodes. The benefit of using Gitaly Cluster virtual storage over direct Gitaly storage is:
-Gitaly Cluster supports:
+- Improved fault tolerance, because each Gitaly node has a copy of every repository.
+- Improved resource utilization, reducing the need for over-provisioning for shard-specific peak
+ loads, because read loads are distributed across Gitaly nodes.
+- Manual rebalancing for performance is not required, because read loads are distributed across
+ Gitaly nodes.
+- Simpler management, because all Gitaly nodes are identical.
-- [Strong consistency](praefect.md#strong-consistency) of the secondary replicas.
-- [Automatic failover](praefect.md#automatic-failover-and-primary-election-strategies) from the primary to the secondary.
-- Reporting of possible data loss if replication queue is non-empty.
-- From GitLab 13.0 to GitLab 14.0, marking repositories as [read-only](praefect.md#read-only-mode)
- if data loss is detected to prevent data inconsistencies.
+The number of repository replicas can be configured using a
+[replication factor](#replication-factor).
+
+It can
+be uneconomical to have the same replication factor for all repositories.
+To provide greater flexibility for extremely large GitLab instances,
+variable replication factor is tracked in [this issue](https://gitlab.com/groups/gitlab-org/-/epics/3372).
-Follow the [Gitaly Cluster epic](https://gitlab.com/groups/gitlab-org/-/epics/1489)
-for improvements including
-[horizontally distributing reads](https://gitlab.com/groups/gitlab-org/-/epics/2013).
+As with normal Gitaly storages, virtual storages can be sharded.
### Moving beyond NFS
@@ -220,7 +208,7 @@ Further reading:
- Blog post: [The road to Gitaly v1.0 (aka, why GitLab doesn't require NFS for storing Git data anymore)](https://about.gitlab.com/blog/2018/09/12/the-road-to-gitaly-1-0/)
- Blog post: [How we spent two weeks hunting an NFS bug in the Linux kernel](https://about.gitlab.com/blog/2018/11/14/how-we-spent-two-weeks-hunting-an-nfs-bug/)
-### Components of Gitaly Cluster
+### Components
Gitaly Cluster consists of multiple components:
@@ -240,10 +228,227 @@ component for running a Gitaly Cluster.
For more information, see [Gitaly High Availability (HA) Design](https://gitlab.com/gitlab-org/gitaly/-/blob/master/doc/design_ha.md).
+### Features
+
+Gitaly Cluster provides the following features:
+
+- [Distributed reads](#distributed-reads) among Gitaly nodes.
+- [Strong consistency](#strong-consistency) of the secondary replicas.
+- [Replication factor](#replication-factor) of repositories for increased redundancy.
+- [Automatic failover](praefect.md#automatic-failover-and-primary-election-strategies) from the
+ primary Gitaly node to secondary Gitaly nodes.
+- Reporting of possible [data loss](praefect.md#check-for-data-loss) if replication queue is
+ non-empty.
+
+Follow the [Gitaly Cluster epic](https://gitlab.com/groups/gitlab-org/-/epics/1489) for improvements
+including [horizontally distributing reads](https://gitlab.com/groups/gitlab-org/-/epics/2013).
+
+#### Distributed reads
+
+> - Introduced in GitLab 13.1 in [beta](https://about.gitlab.com/handbook/product/gitlab-the-product/#alpha-beta-ga) with feature flag `gitaly_distributed_reads` set to disabled.
+> - [Made generally available and enabled by default](https://gitlab.com/gitlab-org/gitaly/-/issues/2951) in GitLab 13.3.
+> - [Disabled by default](https://gitlab.com/gitlab-org/gitaly/-/issues/3178) in GitLab 13.5.
+> - [Enabled by default](https://gitlab.com/gitlab-org/gitaly/-/issues/3334) in GitLab 13.8.
+> - [Feature flag removed](https://gitlab.com/gitlab-org/gitaly/-/issues/3383) in GitLab 13.11.
+
+Gitaly Cluster supports distribution of read operations across Gitaly nodes that are configured for
+the [virtual storage](#virtual-storage).
+
+All RPCs marked with the `ACCESSOR` option are redirected to an up to date and healthy Gitaly node.
+For example, [`GetBlob`](https://gitlab.com/gitlab-org/gitaly/-/blob/v12.10.6/proto/blob.proto#L16).
+
+_Up to date_ in this context means that:
+
+- There is no replication operations scheduled for this Gitaly node.
+- The last replication operation is in _completed_ state.
+
+The primary node is chosen to serve the request if:
+
+- There are no up to date nodes.
+- Any other error occurs during node selection.
+
+You can [monitor distribution of reads](#monitor-gitaly-cluster) using Prometheus.
+
+#### Strong consistency
+
+> - Introduced in GitLab 13.1 in [alpha](https://about.gitlab.com/handbook/product/gitlab-the-product/#alpha-beta-ga), disabled by default.
+> - Entered [beta](https://about.gitlab.com/handbook/product/gitlab-the-product/#alpha-beta-ga) in GitLab 13.2, disabled by default.
+> - In GitLab 13.3, disabled unless primary-wins voting strategy is disabled.
+> - From GitLab 13.4, enabled by default.
+> - From GitLab 13.5, you must use Git v2.28.0 or higher on Gitaly nodes to enable strong consistency.
+> - From GitLab 13.6, primary-wins voting strategy and `gitaly_reference_transactions_primary_wins` feature flag were removed from the source code.
+
+By default, Gitaly Cluster guarantees eventual consistency by replicating all writes to secondary
+Gitaly nodes after the write to the primary Gitaly node has happened.
+
+Praefect can instead provide strong consistency by creating a transaction and writing changes to all
+Gitaly nodes at once.
+
+If enabled, transactions are only available for a subset of RPCs. For more information, see the
+[strong consistency epic](https://gitlab.com/groups/gitlab-org/-/epics/1189).
+
+For configuration information, see [Configure strong consistency](praefect.md#configure-strong-consistency).
+
+#### Replication factor
+
+Replication factor is the number of copies Gitaly Cluster maintains of a given repository. A higher
+replication factor:
+
+- Offers better redundancy and distribution of read workload.
+- Results in higher storage cost.
+
+By default, Gitaly Cluster replicates repositories to every storage in a
+[virtual storage](#virtual-storage).
+
+For configuration information, see [Configure replication factor](praefect.md#configure-replication-factor).
+
### Configure Gitaly Cluster
For more information on configuring Gitaly Cluster, see [Configure Gitaly Cluster](praefect.md).
+### Migrate to Gitaly Cluster
+
+Whether migrating to Gitaly Cluster because of [NFS support deprecation](index.md#nfs-deprecation-notice)
+or to move from single Gitaly nodes, the basic process involves:
+
+1. Create the required storage. Refer to
+ [repository storage recommendations](faq.md#what-are-some-repository-storage-recommendations).
+1. Create and configure [Gitaly Cluster](praefect.md).
+1. [Move the repositories](../operations/moving_repositories.md#move-repositories). To migrate to
+ Gitaly Cluster, existing repositories stored outside Gitaly Cluster must be moved. There is no
+ automatic migration but the moves can be scheduled with the GitLab API.
+
+## Monitor Gitaly and Gitaly Cluster
+
+You can use the available logs and [Prometheus metrics](../monitoring/prometheus/index.md) to
+monitor Gitaly and Gitaly Cluster (Praefect).
+
+Metric definitions are available:
+
+- Directly from Prometheus `/metrics` endpoint configured for Gitaly.
+- Using [Grafana Explore](https://grafana.com/docs/grafana/latest/explore/) on a
+ Grafana instance configured against Prometheus.
+
+### Monitor Gitaly
+
+You can observe the behavior of [queued requests](configure_gitaly.md#limit-rpc-concurrency) using
+the Gitaly logs and Prometheus:
+
+- In the [Gitaly logs](../logs.md#gitaly-logs), look for the string (or structured log field)
+ `acquire_ms`. Messages that have this field are reporting about the concurrency limiter.
+- In Prometheus, look for the following metrics:
+ - `gitaly_rate_limiting_in_progress`.
+ - `gitaly_rate_limiting_queued`.
+ - `gitaly_rate_limiting_seconds`.
+
+ Although the name of the Prometheus metric contains `rate_limiting`, it's a concurrency limiter,
+ not a rate limiter. If a Gitaly client makes 1,000 requests in a row very quickly, concurrency
+ doesn't exceed 1, and the concurrency limiter has no effect.
+
+The following [pack-objects cache](configure_gitaly.md#pack-objects-cache) metrics are available:
+
+- `gitaly_pack_objects_cache_enabled`, a gauge set to `1` when the cache is enabled. Available
+ labels: `dir` and `max_age`.
+- `gitaly_pack_objects_cache_lookups_total`, a counter for cache lookups. Available label: `result`.
+- `gitaly_pack_objects_generated_bytes_total`, a counter for the number of bytes written into the
+ cache.
+- `gitaly_pack_objects_served_bytes_total`, a counter for the number of bytes read from the cache.
+- `gitaly_streamcache_filestore_disk_usage_bytes`, a gauge for the total size of cache files.
+ Available label: `dir`.
+- `gitaly_streamcache_index_entries`, a gauge for the number of entries in the cache. Available
+ label: `dir`.
+
+Some of these metrics start with `gitaly_streamcache` because they are generated by the
+`streamcache` internal library package in Gitaly.
+
+Example:
+
+```plaintext
+gitaly_pack_objects_cache_enabled{dir="/var/opt/gitlab/git-data/repositories/+gitaly/PackObjectsCache",max_age="300"} 1
+gitaly_pack_objects_cache_lookups_total{result="hit"} 2
+gitaly_pack_objects_cache_lookups_total{result="miss"} 1
+gitaly_pack_objects_generated_bytes_total 2.618649e+07
+gitaly_pack_objects_served_bytes_total 7.855947e+07
+gitaly_streamcache_filestore_disk_usage_bytes{dir="/var/opt/gitlab/git-data/repositories/+gitaly/PackObjectsCache"} 2.6200152e+07
+gitaly_streamcache_filestore_removed_total{dir="/var/opt/gitlab/git-data/repositories/+gitaly/PackObjectsCache"} 1
+gitaly_streamcache_index_entries{dir="/var/opt/gitlab/git-data/repositories/+gitaly/PackObjectsCache"} 1
+```
+
+#### Useful queries
+
+The following are useful queries for monitoring Gitaly:
+
+- Use the following Prometheus query to observe the
+ [type of connections](configure_gitaly.md#enable-tls-support) Gitaly is serving a production
+ environment:
+
+ ```prometheus
+ sum(rate(gitaly_connections_total[5m])) by (type)
+ ```
+
+- Use the following Prometheus query to monitor the
+ [authentication behavior](configure_gitaly.md#observe-type-of-gitaly-connections) of your GitLab
+ installation:
+
+ ```prometheus
+ sum(rate(gitaly_authentications_total[5m])) by (enforced, status)
+ ```
+
+ In a system where authentication is configured correctly and where you have live traffic, you
+ see something like this:
+
+ ```prometheus
+ {enforced="true",status="ok"} 4424.985419441742
+ ```
+
+ There may also be other numbers with rate 0, but you only have to take note of the non-zero numbers.
+
+ The only non-zero number should have `enforced="true",status="ok"`. If you have other non-zero
+ numbers, something is wrong in your configuration.
+
+ The `status="ok"` number reflects your current request rate. In the example above, Gitaly is
+ handling about 4000 requests per second.
+
+- Use the following Prometheus query to observe the [Git protocol versions](../git_protocol.md)
+ being used in a production environment:
+
+ ```prometheus
+ sum(rate(gitaly_git_protocol_requests_total[1m])) by (grpc_method,git_protocol,grpc_service)
+ ```
+
+### Monitor Gitaly Cluster
+
+To monitor Gitaly Cluster (Praefect), you can use these Prometheus metrics:
+
+- `gitaly_praefect_read_distribution`, a counter to track [distribution of reads](#distributed-reads).
+ It has two labels:
+
+ - `virtual_storage`.
+ - `storage`.
+
+ They reflect configuration defined for this instance of Praefect.
+
+- `gitaly_praefect_replication_latency_bucket`, a histogram measuring the amount of time it takes
+ for replication to complete once the replication job starts. Available in GitLab 12.10 and later.
+- `gitaly_praefect_replication_delay_bucket`, a histogram measuring how much time passes between
+ when the replication job is created and when it starts. Available in GitLab 12.10 and later.
+- `gitaly_praefect_node_latency_bucket`, a histogram measuring the latency in Gitaly returning
+ health check information to Praefect. This indicates Praefect connection saturation. Available in
+ GitLab 12.10 and later.
+
+To monitor [strong consistency](#strong-consistency), you can use the following Prometheus metrics:
+
+- `gitaly_praefect_transactions_total`, the number of transactions created and voted on.
+- `gitaly_praefect_subtransactions_per_transaction_total`, the number of times nodes cast a vote for
+ a single transaction. This can happen multiple times if multiple references are getting updated in
+ a single transaction.
+- `gitaly_praefect_voters_per_transaction_total`: the number of Gitaly nodes taking part in a
+ transaction.
+- `gitaly_praefect_transactions_delay_seconds`, the server-side delay introduced by waiting for the
+ transaction to be committed.
+- `gitaly_hook_transaction_voting_delay_seconds`, the client-side delay introduced by waiting for
+ the transaction to be committed.
+
## Do not bypass Gitaly
GitLab doesn't advise directly accessing Gitaly repositories stored on disk with a Git client,
@@ -253,8 +458,8 @@ your assumptions, resulting in performance degradation, instability, and even da
- Gitaly has optimizations such as the [`info/refs` advertisement cache](https://gitlab.com/gitlab-org/gitaly/blob/master/doc/design_diskcache.md),
that rely on Gitaly controlling and monitoring access to repositories by using the official gRPC
interface.
-- [Gitaly Cluster](praefect.md) has optimizations, such as fault tolerance and
- [distributed reads](praefect.md#distributed-reads), that depend on the gRPC interface and database
+- [Gitaly Cluster](#gitaly-cluster) has optimizations, such as fault tolerance and
+ [distributed reads](#distributed-reads), that depend on the gRPC interface and database
to determine repository state.
WARNING:
@@ -367,7 +572,7 @@ Additional information:
GitLab recommends:
- Creating a [Gitaly Cluster](#gitaly-cluster) as soon as possible.
-- [Moving your repositories](praefect.md#migrate-to-gitaly-cluster) from NFS-based storage to Gitaly
+- [Moving your repositories](#migrate-to-gitaly-cluster) from NFS-based storage to Gitaly
Cluster.
We welcome your feedback on this process. You can:
diff --git a/doc/administration/gitaly/praefect.md b/doc/administration/gitaly/praefect.md
index e483bcc944a..4af7f1a58a5 100644
--- a/doc/administration/gitaly/praefect.md
+++ b/doc/administration/gitaly/praefect.md
@@ -24,7 +24,7 @@ NOTE:
Upgrade instructions for Omnibus GitLab installations
[are available](https://docs.gitlab.com/omnibus/update/#gitaly-cluster).
-## Requirements for configuring a Gitaly Cluster
+## Requirements
The minimum recommended configuration for a Gitaly Cluster requires:
@@ -33,14 +33,33 @@ The minimum recommended configuration for a Gitaly Cluster requires:
- 3 Praefect nodes
- 3 Gitaly nodes (1 primary, 2 secondary)
-See the [design
-document](https://gitlab.com/gitlab-org/gitaly/-/blob/master/doc/design_ha.md)
+See the [design document](https://gitlab.com/gitlab-org/gitaly/-/blob/master/doc/design_ha.md)
for implementation details.
NOTE:
If not set in GitLab, feature flags are read as false from the console and Praefect uses their
default value. The default value depends on the GitLab version.
+### Network connectivity
+
+Gitaly Cluster [components](index.md#components) need to communicate with each other over many
+routes. Your firewall rules must allow the following for Gitaly Cluster to function properly:
+
+| From | To | Default port | TLS port |
+|:-----------------------|:-----------------------|:-------------|:---------|
+| GitLab | Praefect load balancer | `2305` | `3305` |
+| Praefect load balancer | Praefect | `2305` | `3305` |
+| Praefect | Gitaly | `8075` | `9999` |
+| Gitaly | GitLab (internal API) | `80` | `443` |
+| Gitaly | Praefect load balancer | `2305` | `3305` |
+| Gitaly | Praefect | `2305` | `3305` |
+| Gitaly | Gitaly | `8075` | `9999` |
+
+NOTE:
+Gitaly does not directly connect to Praefect. However, requests from Gitaly to the Praefect
+load balancer may still be blocked unless firewalls on the Praefect nodes allow traffic from
+the Gitaly nodes.
+
## Setup Instructions
If you [installed](https://about.gitlab.com/install/) GitLab using the Omnibus GitLab package
@@ -129,7 +148,7 @@ The following options are available:
- For non-Geo installations, either:
- Use one of the documented [PostgreSQL setups](../postgresql/index.md).
- - Use your own third-party database setup. This will require [manual setup](#manual-database-setup).
+ - Use your own third-party database setup. This requires [manual setup](#manual-database-setup).
- For Geo instances, either:
- Set up a separate [PostgreSQL instance](https://www.postgresql.org/docs/11/high-availability.html).
- Use a cloud-managed PostgreSQL service. AWS
@@ -176,7 +195,7 @@ instructions only work on Omnibus-provided PostgreSQL:
```
Replace `<PRAEFECT_SQL_PASSWORD_HASH>` with the hash of the password you generated in the
- preparation step. Note that it is prefixed with `md5` literal.
+ preparation step. It is prefixed with `md5` literal.
1. The PgBouncer that is shipped with Omnibus is configured to use [`auth_query`](https://www.pgbouncer.org/config.html#generic-settings)
and uses `pg_shadow_lookup` function. You need to create this function in `praefect_production`
@@ -413,7 +432,7 @@ On the **Praefect** node:
WARNING:
If you have data on an already existing storage called
`default`, you should configure the virtual storage with another name and
- [migrate the data to the Gitaly Cluster storage](#migrate-to-gitaly-cluster)
+ [migrate the data to the Gitaly Cluster storage](index.md#migrate-to-gitaly-cluster)
afterwards.
Replace `PRAEFECT_INTERNAL_TOKEN` with a strong secret, which is used by
@@ -457,7 +476,7 @@ On the **Praefect** node:
In [GitLab 13.8 and earlier](https://gitlab.com/gitlab-org/omnibus-gitlab/-/merge_requests/4988),
Gitaly nodes were configured directly under the virtual storage, and not under the `nodes` key.
-1. [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/2013) in GitLab 13.1 and later, enable [distribution of reads](#distributed-reads).
+1. [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/2013) in GitLab 13.1 and later, enable [distribution of reads](index.md#distributed-reads).
1. Save the changes to `/etc/gitlab/gitlab.rb` and [reconfigure
Praefect](../restart_gitlab.md#omnibus-gitlab-reconfigure):
@@ -877,7 +896,7 @@ Particular attention should be shown to:
WARNING:
If you have existing data stored on the default Gitaly storage,
- you should [migrate the data your Gitaly Cluster storage](#migrate-to-gitaly-cluster)
+ you should [migrate the data your Gitaly Cluster storage](index.md#migrate-to-gitaly-cluster)
first.
```ruby
@@ -1053,75 +1072,9 @@ To get started quickly:
Congratulations! You've configured an observable fault-tolerant Praefect
cluster.
-## Network connectivity requirements
-
-Gitaly Cluster components need to communicate with each other over many routes.
-Your firewall rules must allow the following for Gitaly Cluster to function properly:
-
-| From | To | Default port / TLS port |
-|:-----------------------|:------------------------|:------------------------|
-| GitLab | Praefect load balancer | `2305` / `3305` |
-| Praefect load balancer | Praefect | `2305` / `3305` |
-| Praefect | Gitaly | `8075` / `9999` |
-| Gitaly | GitLab (internal API) | `80` / `443` |
-| Gitaly | Praefect load balancer | `2305` / `3305` |
-| Gitaly | Praefect | `2305` / `3305` |
-| Gitaly | Gitaly | `8075` / `9999` |
-
-NOTE:
-Gitaly does not directly connect to Praefect. However, requests from Gitaly to the Praefect
-load balancer may still be blocked unless firewalls on the Praefect nodes allow traffic from
-the Gitaly nodes.
-
-## Distributed reads
-
-> - Introduced in GitLab 13.1 in [beta](https://about.gitlab.com/handbook/product/gitlab-the-product/#alpha-beta-ga) with feature flag `gitaly_distributed_reads` set to disabled.
-> - [Made generally available and enabled by default](https://gitlab.com/gitlab-org/gitaly/-/issues/2951) in GitLab 13.3.
-> - [Disabled by default](https://gitlab.com/gitlab-org/gitaly/-/issues/3178) in GitLab 13.5.
-> - [Enabled by default](https://gitlab.com/gitlab-org/gitaly/-/issues/3334) in GitLab 13.8.
-> - [Feature flag removed](https://gitlab.com/gitlab-org/gitaly/-/issues/3383) in GitLab 13.11.
-
-Praefect supports distribution of read operations across Gitaly nodes that are
-configured for the virtual node.
-
-All RPCs marked with `ACCESSOR` option like
-[GetBlob](https://gitlab.com/gitlab-org/gitaly/-/blob/v12.10.6/proto/blob.proto#L16)
-are redirected to an up to date and healthy Gitaly node.
-
-_Up to date_ in this context means that:
+## Configure strong consistency
-- There is no replication operations scheduled for this node.
-- The last replication operation is in _completed_ state.
-
-If there is no such nodes, or any other error occurs during node selection, the primary
-node is chosen to serve the request.
-
-To track distribution of read operations, you can use the `gitaly_praefect_read_distribution`
-Prometheus counter metric. It has two labels:
-
-- `virtual_storage`.
-- `storage`.
-
-They reflect configuration defined for this instance of Praefect.
-
-## Strong consistency
-
-> - Introduced in GitLab 13.1 in [alpha](https://about.gitlab.com/handbook/product/gitlab-the-product/#alpha-beta-ga), disabled by default.
-> - Entered [beta](https://about.gitlab.com/handbook/product/gitlab-the-product/#alpha-beta-ga) in GitLab 13.2, disabled by default.
-> - In GitLab 13.3, disabled unless primary-wins voting strategy is disabled.
-> - From GitLab 13.4, enabled by default.
-> - From GitLab 13.5, you must use Git v2.28.0 or higher on Gitaly nodes to enable strong consistency.
-> - From GitLab 13.6, primary-wins voting strategy and `gitaly_reference_transactions_primary_wins` feature flag were removed from the source code.
-
-Praefect guarantees eventual consistency by replicating all writes to secondary nodes
-after the write to the primary Gitaly node has happened.
-
-Praefect can instead provide strong consistency by creating a transaction and writing
-changes to all Gitaly nodes at once.
-If enabled, transactions are only available for a subset of RPCs. For more
-information, see the [strong consistency epic](https://gitlab.com/groups/gitlab-org/-/epics/1189).
-
-To enable strong consistency:
+To enable [strong consistency](index.md#strong-consistency):
- In GitLab 13.5, you must use Git v2.28.0 or higher on Gitaly nodes to enable strong consistency.
- In GitLab 13.4 and later, the strong consistency voting strategy has been improved and enabled by default.
@@ -1141,28 +1094,10 @@ Feature.enable(:gitaly_reference_transactions)
Feature.disable(:gitaly_reference_transactions_primary_wins)
```
-To monitor strong consistency, you can use the following Prometheus metrics:
-
-- `gitaly_praefect_transactions_total`: Number of transactions created and
- voted on.
-- `gitaly_praefect_subtransactions_per_transaction_total`: Number of times
- nodes cast a vote for a single transaction. This can happen multiple times if
- multiple references are getting updated in a single transaction.
-- `gitaly_praefect_voters_per_transaction_total`: Number of Gitaly nodes taking
- part in a transaction.
-- `gitaly_praefect_transactions_delay_seconds`: Server-side delay introduced by
- waiting for the transaction to be committed.
-- `gitaly_hook_transaction_voting_delay_seconds`: Client-side delay introduced
- by waiting for the transaction to be committed.
+For information on monitoring strong consistency, see the
+[relevant documentation](index.md#monitor-gitaly-cluster).
-## Replication factor
-
-Replication factor is the number of copies Praefect maintains of a given repository. A higher
-replication factor offers better redundancy and distribution of read workload, but also results
-in a higher storage cost. By default, Praefect replicates repositories to every storage in a
-virtual storage.
-
-### Configure replication factor
+## Configure replication factor
WARNING:
Configurable replication factors require [repository-specific primary nodes](#repository-specific-primary-nodes) to be used.
@@ -1639,128 +1574,3 @@ sudo /opt/gitlab/embedded/bin/praefect -config /var/opt/gitlab/praefect/config.t
- Replace the placeholder `<virtual-storage>` with the virtual storage containing the Gitaly node storage to be checked.
- Replace the placeholder `<up-to-date-storage>` with the Gitaly storage name containing up to date repositories.
- Replace the placeholder `<outdated-storage>` with the Gitaly storage name containing outdated repositories.
-
-## Migrate to Gitaly Cluster
-
-Whether migrating to Gitaly Cluster because of [NFS support deprecation](index.md#nfs-deprecation-notice)
-or to move from single Gitaly nodes, the basic process involves:
-
-1. Create the required storage.
-1. Create and configure Gitaly Cluster.
-1. [Move the repositories](#move-repositories).
-
-When creating the storage, see some
-[repository storage recommendations](faq.md#what-are-some-repository-storage-recommendations).
-
-### Move Repositories
-
-To migrate to Gitaly Cluster, existing repositories stored outside Gitaly Cluster must be
-moved. There is no automatic migration but the moves can be scheduled with the GitLab API.
-
-GitLab repositories can be associated with projects, groups, and snippets. Each of these types
-have a separate API to schedule the respective repositories to move. To move all repositories
-on a GitLab instance, each of these types must be scheduled to move for each storage.
-
-Each repository is made read-only for the duration of the move. The repository is not writable
-until the move has completed.
-
-After creating and configuring Gitaly Cluster:
-
-1. Ensure all storages are accessible to the GitLab instance. In this example, these are
- `<original_storage_name>` and `<cluster_storage_name>`.
-1. [Configure repository storage weights](../repository_storage_paths.md#configure-where-new-repositories-are-stored)
- so that the Gitaly Cluster receives all new projects. This stops new projects from being created
- on existing Gitaly nodes while the migration is in progress.
-1. Schedule repository moves for:
- - [Projects](#bulk-schedule-project-moves).
- - [Snippets](#bulk-schedule-snippet-moves).
- - [Groups](#bulk-schedule-group-moves). **(PREMIUM SELF)**
-
-#### Bulk schedule project moves
-
-1. [Schedule repository storage moves for all projects on a storage shard](../../api/project_repository_storage_moves.md#schedule-repository-storage-moves-for-all-projects-on-a-storage-shard) using the API. For example:
-
- ```shell
- curl --request POST --header "Private-Token: <your_access_token>" \
- --header "Content-Type: application/json" \
- --data '{"source_storage_name":"<original_storage_name>","destination_storage_name":"<cluster_storage_name>"}' \
- "https://gitlab.example.com/api/v4/project_repository_storage_moves"
- ```
-
-1. [Query the most recent repository moves](../../api/project_repository_storage_moves.md#retrieve-all-project-repository-storage-moves)
- using the API. The query indicates either:
- - The moves have completed successfully. The `state` field is `finished`.
- - The moves are in progress. Re-query the repository move until it completes successfully.
- - The moves have failed. Most failures are temporary and are solved by rescheduling the move.
-
-1. After the moves are complete, [query projects](../../api/projects.md#list-all-projects)
- using the API to confirm that all projects have moved. No projects should be returned
- with `repository_storage` field set to the old storage.
-
- ```shell
- curl --header "Private-Token: <your_access_token>" --header "Content-Type: application/json" \
- "https://gitlab.example.com/api/v4/projects?repository_storage=<original_storage_name>"
- ```
-
- Alternatively use [the rails console](../operations/rails_console.md) to
- confirm that all projects have moved. Run the following in the rails console:
-
- ```ruby
- ProjectRepository.for_repository_storage('<original_storage_name>')
- ```
-
-1. Repeat for each storage as required.
-
-#### Bulk schedule snippet moves
-
-1. [Schedule repository storage moves for all snippets on a storage shard](../../api/snippet_repository_storage_moves.md#schedule-repository-storage-moves-for-all-snippets-on-a-storage-shard) using the API. For example:
-
- ```shell
- curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
- --header "Content-Type: application/json" \
- --data '{"source_storage_name":"<original_storage_name>","destination_storage_name":"<cluster_storage_name>"}' \
- "https://gitlab.example.com/api/v4/snippet_repository_storage_moves"
- ```
-
-1. [Query the most recent repository moves](../../api/snippet_repository_storage_moves.md#retrieve-all-snippet-repository-storage-moves)
- using the API. The query indicates either:
- - The moves have completed successfully. The `state` field is `finished`.
- - The moves are in progress. Re-query the repository move until it completes successfully.
- - The moves have failed. Most failures are temporary and are solved by rescheduling the move.
-
-1. After the moves are complete, use [the rails console](../operations/rails_console.md) to
- confirm that all snippets have moved. No snippets should be returned for the original
- storage. Run the following in the rails console:
-
- ```ruby
- SnippetRepository.for_repository_storage('<original_storage_name>')
- ```
-
-1. Repeat for each storage as required.
-
-#### Bulk schedule group moves **(PREMIUM SELF)**
-
-1. [Schedule repository storage moves for all groups on a storage shard](../../api/group_repository_storage_moves.md#schedule-repository-storage-moves-for-all-groups-on-a-storage-shard) using the API.
-
- ```shell
- curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
- --header "Content-Type: application/json" \
- --data '{"source_storage_name":"<original_storage_name>","destination_storage_name":"<cluster_storage_name>"}' \
- "https://gitlab.example.com/api/v4/group_repository_storage_moves"
- ```
-
-1. [Query the most recent repository moves](../../api/group_repository_storage_moves.md#retrieve-all-group-repository-storage-moves)
- using the API. The query indicates either:
- - The moves have completed successfully. The `state` field is `finished`.
- - The moves are in progress. Re-query the repository move until it completes successfully.
- - The moves have failed. Most failures are temporary and are solved by rescheduling the move.
-
-1. After the moves are complete, use [the rails console](../operations/rails_console.md) to
- confirm that all groups have moved. No groups should be returned for the original
- storage. Run the following in the rails console:
-
- ```ruby
- GroupWikiRepository.for_repository_storage('<original_storage_name>')
- ```
-
-1. Repeat for each storage as required.
diff --git a/doc/administration/gitaly/reference.md b/doc/administration/gitaly/reference.md
index ec5a8d47ae2..9fe09be10a3 100644
--- a/doc/administration/gitaly/reference.md
+++ b/doc/administration/gitaly/reference.md
@@ -71,7 +71,7 @@ Remember to disable `transitioning` when you are done
changing your token settings.
All authentication attempts are counted in Prometheus under
-the `gitaly_authentications_total` metric.
+the [`gitaly_authentications_total` metric](index.md#useful-queries).
### TLS
diff --git a/doc/administration/gitaly/troubleshooting.md b/doc/administration/gitaly/troubleshooting.md
index ab6f493cf0f..3dd700968f9 100644
--- a/doc/administration/gitaly/troubleshooting.md
+++ b/doc/administration/gitaly/troubleshooting.md
@@ -223,6 +223,28 @@ on the Gitaly server matches the one on Gitaly client. If it doesn't match,
update the secrets file on the Gitaly server to match the Gitaly client, then
[reconfigure](../restart_gitlab.md#omnibus-gitlab-reconfigure).
+### Repository pushes fail with a `deny updating a hidden ref` error
+
+Due to [a change](https://gitlab.com/gitlab-org/gitaly/-/merge_requests/3426)
+introduced in GitLab 13.12, Gitaly has read-only, internal GitLab references that users are not
+permitted to update. If you attempt to update internal references with `git push --mirror`, Git
+returns the rejection error, `deny updating a hidden ref`.
+
+The following references are read-only:
+
+- refs/environments/
+- refs/keep-around/
+- refs/merge-requests/
+- refs/pipelines/
+
+To mirror-push branches and tags only, and avoid attempting to mirror-push protected refs, run:
+
+```shell
+git push origin +refs/heads/*:refs/heads/* +refs/tags/*:refs/tags/*
+```
+
+Any other namespaces that the admin wants to push can be included there as well via additional patterns.
+
### Command line tools cannot connect to Gitaly
gRPC cannot reach your Gitaly server if:
@@ -370,3 +392,11 @@ the `praefect` command:
$ sudo /opt/gitlab/embedded/bin/praefect -config /var/opt/gitlab/praefect/config.toml sql-migrate
praefect sql-migrate: OK (applied 21 migrations)
```
+
+### Requests fail with 'repo scoped: invalid Repository' errors
+
+This indicates that the virtual storage name used in the
+[Praefect configuration](praefect.md#praefect) does not match the storage name used in
+[`git_data_dirs` setting](praefect.md#gitaly) for GitLab.
+
+Resolve this by matching the virtual storage names used in Praefect and GitLab configuration.
diff --git a/doc/administration/img/time_zone_settings.png b/doc/administration/img/time_zone_settings.png
deleted file mode 100644
index e735a8bc5ec..00000000000
--- a/doc/administration/img/time_zone_settings.png
+++ /dev/null
Binary files differ
diff --git a/doc/administration/index.md b/doc/administration/index.md
index 74c89b4d5c0..46624ab39a3 100644
--- a/doc/administration/index.md
+++ b/doc/administration/index.md
@@ -121,7 +121,7 @@ Learn how to install, configure, update, and maintain your GitLab instance.
- [Creating users](../user/profile/account/create_accounts.md): Create users manually or through authentication integrations.
- [Libravatar](libravatar.md): Use Libravatar instead of Gravatar for user avatars.
- [Sign-up restrictions](../user/admin_area/settings/sign_up_restrictions.md): block email addresses of specific domains, or whitelist only specific domains.
-- [Access restrictions](../user/admin_area/settings/visibility_and_access_controls.md#enabled-git-access-protocols): Define which Git access protocols can be used to talk to GitLab (SSH, HTTP, HTTPS).
+- [Access restrictions](../user/admin_area/settings/visibility_and_access_controls.md#configure-enabled-git-access-protocols): Define which Git access protocols can be used to talk to GitLab (SSH, HTTP, HTTPS).
- [Authentication and Authorization](auth/index.md): Configure external authentication with LDAP, SAML, CAS, and additional providers.
- [Sync LDAP](auth/ldap/index.md)
- [Kerberos authentication](../integration/kerberos.md)
@@ -166,7 +166,7 @@ Learn how to install, configure, update, and maintain your GitLab instance.
## Continuous Integration settings
-- [Enable/disable GitLab CI/CD](../ci/enable_or_disable_ci.md#site-wide-admin-setting): Enable or disable GitLab CI/CD for your instance.
+- [Enable/disable GitLab CI/CD](../ci/enable_or_disable_ci.md#make-gitlab-cicd-disabled-by-default-in-new-projects): Enable or disable GitLab CI/CD for your instance.
- [GitLab CI/CD administration settings](../user/admin_area/settings/continuous_integration.md): Enable or disable Auto DevOps site-wide and define the artifacts' max size and expiration time.
- [External Pipeline Validation](external_pipeline_validation.md): Enable, disable, and configure external pipeline validation.
- [Job artifacts](job_artifacts.md): Enable, disable, and configure job artifacts (a set of files and directories which are outputted by a job when it completes successfully).
diff --git a/doc/administration/instance_limits.md b/doc/administration/instance_limits.md
index 5e0d87cd7b6..1ea2ec4c904 100644
--- a/doc/administration/instance_limits.md
+++ b/doc/administration/instance_limits.md
@@ -230,8 +230,10 @@ Set the limit to `0` to disable it.
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/237891) in GitLab 13.7.
-The [minimum time between pull refreshes](../user/project/repository/repository_mirroring.md)
-defaults to 300 seconds (5 minutes).
+The [minimum wait time between pull refreshes](../user/project/repository/repository_mirroring.md)
+defaults to 300 seconds (5 minutes). For example, by default a pull refresh will only run once in a given 300 second period regardless of how many times you try to trigger it.
+
+This setting applies in the context of pull refreshes invoked via the [projects API](../api/projects.md#start-the-pull-mirroring-process-for-a-project), or when forcing an update by selecting the **Update now** (**{retry}**) button within **Settings > Repository > Mirroring repositories**. This setting has no effect on the automatic 30 minute interval schedule used by Sidekiq for [pull mirroring](../user/project/repository/repository_mirroring.md#how-it-works).
To change this limit for a self-managed installation, run the following in the
[GitLab Rails console](operations/rails_console.md#starting-a-rails-console-session):
@@ -457,6 +459,21 @@ installation, run the following in the [GitLab Rails console](operations/rails_c
Plan.default.actual_limits.update!(ci_max_artifact_size_junit: 10)
```
+### Number of files per GitLab Pages web-site
+
+The total number of file entries (including directories and symlinks) is limited to `100000` per
+GitLab Pages website.
+
+This is the default limit for all [GitLab self-managed and SaaS plans](https://about.gitlab.com/pricing/).
+
+You can update the limit in your self-managed instance using the
+[GitLab Rails console](operations/rails_console.md#starting-a-rails-console-session).
+For example, to change the limit to `100`:
+
+```ruby
+Plan.default.actual_limits.update!(pages_file_entries: 100)
+```
+
### Number of registered runners per scope
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/321368) in GitLab 13.12.
@@ -484,15 +501,8 @@ A runner's registration fails if it exceeds the limit for the scope determined b
### Maximum file size for job logs
-> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/276192) in GitLab 14.1.
-> - [Deployed behind a feature flag](../user/feature_flags.md), disabled by default.
-> - Disabled on GitLab.com.
-> - Not recommended for production use.
-> - To use in GitLab self-managed instances, ask a GitLab administrator to [enable it](#enable-or-disable-job-log-limits). **(FREE SELF)**
-
-This in-development feature might not be available for your use. There can be
-[risks when enabling features still in development](../user/feature_flags.md#risks-when-enabling-features-still-in-development).
-Refer to this feature's version history for more details.
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/276192) in GitLab 14.1, disabled by default.
+> - Enabled by default and [feature flag `ci_jobs_trace_size_limit` removed](https://gitlab.com/gitlab-org/gitlab/-/issues/335259) in GitLab 14.2.
The job log file size limit is 100 megabytes by default. Any job that exceeds this value is dropped.
@@ -503,25 +513,6 @@ Update `ci_jobs_trace_size_limit` with the new value in megabytes:
Plan.default.actual_limits.update!(ci_jobs_trace_size_limit: 125)
```
-#### Enable or disable job log limits **(FREE SELF)**
-
-This feature is under development and not ready for production use. It is
-deployed behind a feature flag that is **disabled by default**.
-[GitLab administrators with access to the GitLab Rails console](feature_flags.md)
-can enable it.
-
-To enable it:
-
-```ruby
-Feature.enable(:ci_jobs_trace_size_limit)
-```
-
-To disable it:
-
-```ruby
-Feature.disable(:ci_jobs_trace_size_limit)
-```
-
## Instance monitoring and metrics
### Incident Management inbound alert limits
@@ -626,8 +617,8 @@ Reports that go over the 20 MB limit won't be loaded. Affected reports:
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/8638) in GitLab 13.3.
You can set a limit on the content of repository files that are indexed in
-Elasticsearch. Any files larger than this limit is neither indexed
-nor searchable.
+Elasticsearch. Any files larger than this limit only index the file name.
+The file content is neither indexed nor searchable.
Setting a limit helps reduce the memory usage of the indexing processes and
the overall index size. This value defaults to `1024 KiB` (1 MiB) as any
diff --git a/doc/administration/integration/kroki.md b/doc/administration/integration/kroki.md
index e36b8a0be9d..729894052b2 100644
--- a/doc/administration/integration/kroki.md
+++ b/doc/administration/integration/kroki.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/administration/integration/plantuml.md b/doc/administration/integration/plantuml.md
index 2b18efde95d..9f83ba8e972 100644
--- a/doc/administration/integration/plantuml.md
+++ b/doc/administration/integration/plantuml.md
@@ -208,7 +208,7 @@ After configuring your local PlantUML server, you're ready to enable the PlantUM
1. Sign in to GitLab as an [Administrator](../../user/permissions.md) user.
1. On the top bar, select **Menu >** **{admin}** **Admin**.
1. In the left sidebar, go to **Settings > General** and expand the **PlantUML** section.
-1. Select the **Enable PlantUML** check box.
+1. Select the **Enable PlantUML** checkbox.
1. Set the PlantUML instance as `https://gitlab.example.com/-/plantuml/`,
and click **Save changes**.
diff --git a/doc/administration/integration/terminal.md b/doc/administration/integration/terminal.md
index 9302e9a1edc..1be234c2771 100644
--- a/doc/administration/integration/terminal.md
+++ b/doc/administration/integration/terminal.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/administration/job_logs.md b/doc/administration/job_logs.md
index 87dd365769f..a4fdf734c2e 100644
--- a/doc/administration/job_logs.md
+++ b/doc/administration/job_logs.md
@@ -101,7 +101,7 @@ Archived logs are considered as [job artifacts](job_artifacts.md).
Therefore, when you [set up the object storage integration](job_artifacts.md#object-storage-settings),
job logs are automatically migrated to it along with the other job artifacts.
-See "Phase 4: uploading" in [Data flow](#data-flow) to learn about the process.
+See "Phase 3: uploading" in [Data flow](#data-flow) to learn about the process.
## Prevent local disk usage
diff --git a/doc/administration/lfs/index.md b/doc/administration/lfs/index.md
index edf0e324a5c..682352d8f59 100644
--- a/doc/administration/lfs/index.md
+++ b/doc/administration/lfs/index.md
@@ -323,7 +323,7 @@ See more information in [!19581](https://gitlab.com/gitlab-org/gitlab-foss/-/mer
### LFS commands fail on TLS v1.3 server
-If you configure GitLab to [disable TLS v1.2](https://docs.gitlab.com/omnibus/settings/nginx.md)
+If you configure GitLab to [disable TLS v1.2](https://docs.gitlab.com/omnibus/settings/nginx.html)
and only enable TLS v1.3 connections, LFS operations require a
[Git LFS client](https://git-lfs.github.com) version 2.11.0 or later. If you use
a Git LFS client earlier than version 2.11.0, GitLab displays an error:
@@ -334,7 +334,7 @@ error: failed to fetch some objects from 'https://username:[MASKED]@gitlab.examp
```
When using GitLab CI over a TLS v1.3 configured GitLab server, you must
-[upgrade to GitLab Runner](https://docs.gitlab.com/runner/install/index.md) 13.2.0
+[upgrade to GitLab Runner](https://docs.gitlab.com/runner/install/index.html) 13.2.0
or later to receive an updated Git LFS client version via
the included [GitLab Runner Helper image](https://docs.gitlab.com/runner/configuration/advanced-configuration.html#helper-image).
diff --git a/doc/administration/libravatar.md b/doc/administration/libravatar.md
index b62e2ed4313..142cf2f3685 100644
--- a/doc/administration/libravatar.md
+++ b/doc/administration/libravatar.md
@@ -82,7 +82,7 @@ which case the URL would look like: `plain_url: "http://cdn.libravatar.org/avata
## Usage examples for Microsoft Office 365
If your users are Office 365 users, the `GetPersonaPhoto` service can be used.
-Note that this service requires a login, so this use case is most useful in a
+This service requires a login, so this use case is most useful in a
corporate installation where all users have access to Office 365.
```ruby
diff --git a/doc/administration/logs.md b/doc/administration/logs.md
index b1605604df5..883f1db8e09 100644
--- a/doc/administration/logs.md
+++ b/doc/administration/logs.md
@@ -97,7 +97,8 @@ Line breaks were added to examples for legibility:
"cpu_s":17.50,
"db_duration_s":0.08,
"view_duration_s":2.39,
- "duration_s":20.54
+ "duration_s":20.54,
+ "pid": 81836
}
```
@@ -120,6 +121,7 @@ seconds:
- `redis_<instance>_duration_s`: Total time to retrieve data from a Redis instance
- `redis_<instance>_read_bytes`: Total bytes read from a Redis instance
- `redis_<instance>_write_bytes`: Total bytes written to a Redis instance
+- `pid`: Process ID of the Puma worker
User clone and fetch activity using HTTP transport appears in the log as `action: git_upload_pack`.
@@ -190,7 +192,8 @@ Starting with GitLab 12.5, if an error occurs, an
"cpu_s":17.50,
"db_duration_s":0.08,
"view_duration_s":2.39,
- "duration_s":20.54
+ "duration_s":20.54,
+ "pid": 81836,
"exception.class": "NameError",
"exception.message": "undefined local variable or method `adsf' for #<Admin::DashboardController:0x00007ff3c9648588>",
"exception.backtrace": [
@@ -342,7 +345,7 @@ Depending on your installation method, this file is located at:
- Installations from source: `/home/git/gitlab/log/integrations_json.log`
It contains information about [integration](../user/project/integrations/overview.md)
-activities, such as Jira, Asana, and Irker services. It uses JSON format,
+activities, such as Jira, Asana, and irker services. It uses JSON format,
like this example:
```json
diff --git a/doc/administration/maintenance_mode/index.md b/doc/administration/maintenance_mode/index.md
index 37415468517..7664c7c1751 100644
--- a/doc/administration/maintenance_mode/index.md
+++ b/doc/administration/maintenance_mode/index.md
@@ -60,7 +60,7 @@ There are three ways to disable Maintenance Mode:
- [**Rails console**](../operations/rails_console.md#starting-a-rails-console-session):
```ruby
- ::Gitlab::CurrentSettings.update_attributes!(maintenance_mode: false)
+ ::Gitlab::CurrentSettings.update!(maintenance_mode: false)
```
## Behavior of GitLab features in Maintenance Mode
diff --git a/doc/administration/monitoring/gitlab_self_monitoring_project/index.md b/doc/administration/monitoring/gitlab_self_monitoring_project/index.md
index b1ec74c2f40..f8764468256 100644
--- a/doc/administration/monitoring/gitlab_self_monitoring_project/index.md
+++ b/doc/administration/monitoring/gitlab_self_monitoring_project/index.md
@@ -4,43 +4,44 @@ group: Monitor
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
-# GitLab self monitoring project **(FREE SELF)**
+# Self monitoring project **(FREE SELF)**
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/32351) in GitLab 12.7, behind a disabled feature flag (`self_monitoring_project`).
-> - The feature flag was removed and the Self Monitoring Project was [made generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/198511) in GitLab 12.8.
+> - The feature flag was removed and the self monitoring project was [made generally available](https://gitlab.com/gitlab-org/gitlab/-/issues/198511) in GitLab 12.8.
-GitLab has been adding the ability for administrators to see insights into the
-health of their GitLab instance. To surface this experience in a native way
-(similar to how you would interact with an application deployed using GitLab),
-a base project called "GitLab self monitoring" with
-[internal visibility](../../../public_access/public_access.md#internal-projects)
-is added under a group called "GitLab Instance Administrators"
-specifically created for visualizing and configuring the monitoring of your
-GitLab instance.
+GitLab provides administrators insights into the health of their GitLab instance.
-All administrators at the time of creation of the project and group are
-added as maintainers of the group and project, and as an administrator, you can
-add new members to the group to give them the [Maintainer role](../../../user/permissions.md) for
-the project.
+To provide a native experience (similar interacting with an application deployed using GitLab), a
+project called **Monitoring** is created:
-This project is used to self monitor your GitLab instance. The metrics dashboard
-of the project shows some basic resource usage charts, such as CPU and memory usage
-of each server in [Omnibus GitLab](https://docs.gitlab.com/omnibus/) installations.
+- With [internal visibility](../../../public_access/public_access.md#internal-projects).
+- Under a group called **GitLab Instance**.
-You can also use the project to configure your own
-[custom metrics](../../../operations/metrics/index.md#adding-custom-metrics) using
-metrics exposed by the [GitLab exporter](../prometheus/gitlab_metrics.md#metrics-available).
+The project is created specifically for visualizing and configuring the monitoring of your GitLab
+instance.
-## Creating the self monitoring project
+When the project and group are created, all administrators are added as maintainers. As an
+administrator, you can add new members to the group to give them the
+[Maintainer role](../../../user/permissions.md) for the project.
+
+This project can be used to:
+
+- Self monitor your GitLab instance. The metrics dashboard of the project shows some basic resource
+ usage charts, such as CPU and memory usage of each server in
+ [Omnibus GitLab](https://docs.gitlab.com/omnibus/) installations.
+- Also configure your own [custom metrics](../../../operations/metrics/index.md#adding-custom-metrics)
+ using metrics exposed by the [GitLab exporter](../prometheus/gitlab_metrics.md#metrics-available).
+
+## Create the self monitoring project
1. On the top bar, select **Menu >** **{admin}** **Admin**.
1. On the left sidebar, select **Settings > Metrics and profiling** and expand **Self monitoring**.
-1. Toggle the **Create Project** button on.
+1. Toggle **Self monitoring** on.
1. After your GitLab instance creates the project, GitLab displays a link to the
- project in the text above the **Create Project** toggle. You can also find it
+ project in the text above the **Self monitoring** toggle. You can also find it
from the top bar by selecting **Menu > Project**, then selecting **Your projects**.
-## Deleting the self monitoring project
+## Delete the self monitoring project
WARNING:
Deleting the self monitoring project removes any changes made to the project. If
@@ -48,8 +49,8 @@ you create the project again, it's created in its default state.
1. On the top bar, select **Menu >** **{admin}** **Admin**.
1. On the left sidebar, go to **Settings > Metrics and profiling** and expand **Self monitoring**.
-1. Toggle the **Create Project** button off.
-1. In the confirmation dialog that opens, click **Delete project**.
+1. Toggle **Self monitoring** off.
+1. In the confirmation dialog that opens, click **Delete self monitoring project**.
It can take a few seconds for it to be deleted.
1. After the project is deleted, GitLab displays a message confirming your action.
@@ -66,27 +67,24 @@ The dashboard uses metrics available in
You can also
[create your own dashboards](../../../operations/metrics/dashboards/index.md).
-## Connection to Prometheus
+## Connect to Prometheus
The project is automatically configured to connect to the
-[internal Prometheus](../prometheus/index.md) instance if the Prometheus
-instance is present (should be the case if GitLab was installed via Omnibus
-and you haven't disabled it).
+[internal Prometheus](../prometheus/index.md) instance if the Prometheus instance is present.
+This should be the case if GitLab was installed using Omnibus GitLab and you haven't disabled it.
-If that's not the case or if you have an external Prometheus instance or a customized setup,
-you should
-[configure it manually](../../../user/project/integrations/prometheus.md#manual-configuration-of-prometheus).
+If that's not the case, or if you have an external Prometheus instance or a customized setup,
+you [configure it manually](../../../user/project/integrations/prometheus.md#manual-configuration-of-prometheus).
-## Taking action on Prometheus alerts **(ULTIMATE)**
+## Take action on Prometheus alerts **(ULTIMATE)**
You can [add a webhook](../../../operations/metrics/alerts.md#external-prometheus-instances)
-to the Prometheus configuration for GitLab to receive notifications of any
-alerts.
+to the Prometheus configuration for GitLab to receive notifications of any alerts.
Once the webhook is setup, you can
[take action on incoming alerts](../../../operations/metrics/alerts.md#trigger-actions-from-alerts).
-## Adding custom metrics to the self monitoring project
+## Add custom metrics to the self monitoring project
You can add custom metrics in the self monitoring project by:
@@ -95,11 +93,10 @@ You can add custom metrics in the self monitoring project by:
## Troubleshooting
-### Getting error message in logs: `Could not create instance administrators group. Errors: ["You don't have permission to create groups."]`
+### Error message in logs: `Could not create instance administrators group. Errors: ["You don't have permission to create groups."]`
-There is [a bug](https://gitlab.com/gitlab-org/gitlab/-/issues/208676) which causes
-project creation to fail with the following error (which appears in the log file)
-when the first administrator user is an
+A [bug](https://gitlab.com/gitlab-org/gitlab/-/issues/208676) causes project creation to fail with
+the following error in the log file when the first administrator user is an
[external user](../../../user/permissions.md#external-users):
```plaintext
diff --git a/doc/administration/monitoring/ip_whitelist.md b/doc/administration/monitoring/ip_whitelist.md
index 20c97a0df8f..b6df176ea87 100644
--- a/doc/administration/monitoring/ip_whitelist.md
+++ b/doc/administration/monitoring/ip_whitelist.md
@@ -9,7 +9,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
> Introduced in GitLab 9.4.
NOTE:
-We intend to [rename IP whitelist as `IP allowlist`](https://gitlab.com/gitlab-org/gitlab/-/issues/7554).
+We intend to [rename IP whitelist as `IP allowlist`](https://gitlab.com/groups/gitlab-org/-/epics/3478).
GitLab provides some [monitoring endpoints](../../user/admin_area/monitoring/health_check.md)
that provide health check information when probed.
diff --git a/doc/administration/monitoring/performance/grafana_configuration.md b/doc/administration/monitoring/performance/grafana_configuration.md
index 3b82b0e4bb8..0f40fd3c0e7 100644
--- a/doc/administration/monitoring/performance/grafana_configuration.md
+++ b/doc/administration/monitoring/performance/grafana_configuration.md
@@ -65,15 +65,41 @@ GitLab sidebar:
1. On the top bar, select **Menu >** **{admin}** **Admin**.
1. On the left sidebar, select **Settings > Metrics and profiling**
and expand **Metrics - Grafana**.
-1. Check the **Enable access to Grafana** checkbox.
+1. Select the **Add a link to Grafana** checkbox.
1. Configure the **Grafana URL**:
- *If Grafana is enabled through Omnibus GitLab and on the same server,*
leave **Grafana URL** unchanged. It should be `/-/grafana`.
- *Otherwise,* enter the full URL of the Grafana instance.
-1. Click **Save changes**.
+1. Select **Save changes**.
GitLab displays your link in the **Menu > Admin > Monitoring > Metrics Dashboard**.
+## Required Scopes
+
+> [Introduced](https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/5822) in GitLab 13.10.
+
+When setting up Grafana through the process above, no scope shows in the screen at
+**Menu >** **{admin}** **Admin > Applications > GitLab Grafana**. However, the `read_user` scope is
+required and is provided to the application automatically. Setting any scope other than
+`read_user` without also including `read_user` leads to this error when you try to log in using
+GitLab as the OAuth provider:
+
+```plaintext
+The requested scope is invalid, unknown, or malformed.
+```
+
+If you see this error, make sure that one of the following is true in the GitLab Grafana
+configuration screen:
+
+- No scopes appear.
+- The `read_user` scope is included.
+
+> Versions of GitLab prior 13.10 use the API scope instead of `read_user`. In versions of GitLab
+> prior to 13.10, the API scope:
+>
+> - Is required to access Grafana through the GitLab OAuth provider.
+> - Is set by enabling the Grafana application as shown in [Integration with GitLab UI](#integration-with-gitlab-ui).
+
## Security Update
Users running GitLab version 12.0 or later should immediately upgrade to one of the
diff --git a/doc/administration/monitoring/performance/performance_bar.md b/doc/administration/monitoring/performance/performance_bar.md
index 5a7e8e12a38..6d9418133d8 100644
--- a/doc/administration/monitoring/performance/performance_bar.md
+++ b/doc/administration/monitoring/performance/performance_bar.md
@@ -4,22 +4,37 @@ group: Monitor
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
-# Performance Bar **(FREE SELF)**
+# Performance bar **(FREE SELF)**
-> The **Stats** field [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/271551) in GitLab 13.9.
-> The **Memory** field [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/330736) in GitLab 14.0.
+> - The **Stats** field [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/271551) in GitLab 13.9.
+> - The **Memory** field [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/330736) in GitLab 14.0.
-You can display the GitLab Performance Bar to see statistics for the performance
-of a page. When activated, it looks as follows:
+You can display the performance bar to see statistics for the performance of a GitLab UI page.
+For example:
-![Performance Bar](img/performance_bar_v14_0.png)
+![Performance bar](img/performance_bar_v14_0.png)
-From left to right, it displays:
+## Available information
+
+From left to right, the performance bar displays:
- **Current Host**: the current host serving the page.
- **Database queries**: the time taken (in milliseconds) and the total number
of database queries, displayed in the format `00ms / 00 (00 cached) pg`. Click to display
- a modal window with more details.
+ a modal window with more details. You can use this to see the following
+ details for each query:
+ - **In a transaction**: shows up below the query if it was executed in
+ the context of a transaction
+ - **Role**: shows up when [database load
+ balancing](../../database_load_balancing.md) is enabled. It shows
+ which server role was used for the query. "Primary" means that the query
+ was sent to the read/write primary server. "Replica" means it was sent
+ to a read-only replica.
+ - **Config name**: shows up only when the
+ `GITLAB_MULTIPLE_DATABASE_METRICS` environment variable is set. This is
+ used to distinguish between different databases configured for different
+ GitLab features. The name shown is the same name used to configure database
+ connections in GitLab.
- **Gitaly calls**: the time taken (in milliseconds) and the total number of
[Gitaly](../../gitaly/index.md) calls. Click to display a modal window with more
details.
@@ -57,8 +72,17 @@ From left to right, it displays:
NOTE:
Not all indicators are available in all environments. For instance, the memory view
-requires to run Ruby with [specific patches](https://gitlab.com/gitlab-org/gitlab-build-images/-/blob/master/patches/ruby/2.7.2/thread-memory-allocations-2.7.patch) applied.
-When running GitLab locally using the GDK this is typically not the case and the memory view cannot be used.
+requires running Ruby with [specific patches](https://gitlab.com/gitlab-org/gitlab-build-images/-/blob/master/patches/ruby/2.7.2/thread-memory-allocations-2.7.patch)
+applied. When running GitLab locally using [GDK](../../../development/contributing/index.md#gitlab-development-kit),
+this is typically not the case and the memory view cannot be used.
+
+## Keyboard shortcut
+
+Press the [<kbd>p</kbd> + <kbd>b</kbd> keyboard shortcut](../../../user/shortcuts.md) to display
+the performance bar, and again to hide it.
+
+For non-administrators to display the performance bar, it must be
+[enabled for them](#enable-the-performance-bar-for-non-administrators).
## Request warnings
@@ -74,23 +98,17 @@ appears next to requests with warnings.
![Request selector showing two requests with warnings](img/performance_bar_request_selector_warning.png)
-## Enable the Performance Bar via the Admin Area
+## Enable the performance bar for non-administrators
-The GitLab Performance Bar is disabled by default for non-administrators. To enable it
+The performance bar is disabled by default for non-administrators. To enable it
for a given group:
-1. Sign in as a user with Administrator [permissions](../../../user/permissions.md).
+1. Sign in as a user with Administrator [role](../../../user/permissions.md).
1. On the top bar, select **Menu >** **{admin}** **Admin**.
1. On the left sidebar, select **Settings > Metrics and profiling**
(`admin/application_settings/metrics_and_profiling`), and expand
**Profiling - Performance bar**.
-1. Click **Enable access to the Performance Bar**.
-1. In the **Allowed group** field, provide the full path of the group allowed
- to access the GitLab Performance Bar.
+1. Click **Allow non-administrators to access to the performance bar**.
+1. In the **Allow access to members of the following group** field, provide the full path of the
+ group allowed to access the performance.
1. Click **Save changes**.
-
-## Keyboard shortcut for the Performance Bar
-
-After enabling the GitLab Performance Bar, press the [<kbd>p</kbd> +
-<kbd>b</kbd> keyboard shortcut](../../../user/shortcuts.md) to display it, and
-again to hide it.
diff --git a/doc/administration/monitoring/prometheus/gitlab_metrics.md b/doc/administration/monitoring/prometheus/gitlab_metrics.md
index 2aa95a2b0f1..459eb259498 100644
--- a/doc/administration/monitoring/prometheus/gitlab_metrics.md
+++ b/doc/administration/monitoring/prometheus/gitlab_metrics.md
@@ -8,10 +8,10 @@ info: To determine the technical writer assigned to the Stage/Group associated w
To enable the GitLab Prometheus metrics:
-1. Log into GitLab as a user with [administrator permissions](../../../user/permissions.md).
+1. Log in to GitLab as a user with Administrator [role](../../../user/permissions.md).
1. On the top bar, select **Menu >** **{admin}** **Admin**.
1. On the left sidebar, select **Settings > Metrics and profiling**.
-1. Find the **Metrics - Prometheus** section, and click **Enable Prometheus Metrics**.
+1. Find the **Metrics - Prometheus** section, and select **Add link to Prometheus**.
1. [Restart GitLab](../../restart_gitlab.md#omnibus-gitlab-restart) for the changes to take effect.
For installations from source you must configure it yourself.
@@ -45,6 +45,7 @@ The following metrics are available:
| `gitlab_ci_pipeline_size_builds` | Histogram | 13.1 | Total number of builds within a pipeline grouped by a pipeline source | `source` |
| `job_waiter_started_total` | Counter | 12.9 | Number of batches of jobs started where a web request is waiting for the jobs to complete | `worker` |
| `job_waiter_timeouts_total` | Counter | 12.9 | Number of batches of jobs that timed out where a web request is waiting for the jobs to complete | `worker` |
+| `gitlab_ci_active_jobs` | Histogram | 14.2 | Count of active jobs when pipeline is created | |
| `gitlab_database_transaction_seconds` | Histogram | 12.1 | Time spent in database transactions, in seconds | |
| `gitlab_method_call_duration_seconds` | Histogram | 10.2 | Method calls real duration | `controller`, `action`, `module`, `method` |
| `gitlab_page_out_of_bounds` | Counter | 12.8 | Counter for the PageLimiter pagination limit being hit | `controller`, `action`, `bot` |
@@ -152,15 +153,8 @@ The following metrics can be controlled by feature flags:
## Praefect metrics
-You can [configure Praefect to report metrics](../../gitaly/praefect.md#praefect).
-These are some of the Praefect metrics served from the `/metrics` path on the [configured port](index.md#changing-the-port-and-address-prometheus-listens-on)
-(9652 by default).
-
-| Metric | Type | Since | Description | Labels |
-| :----- | :--- | ----: | :---------- | :----- |
-| `gitaly_praefect_replication_latency_bucket` | Histogram | 12.10 | The amount of time it takes for replication to complete once the replication job starts. | |
-| `gitaly_praefect_replication_delay_bucket` | Histogram | 12.10 | A measure of how much time passes between when the replication job is created and when it starts. | |
-| `gitaly_praefect_node_latency_bucket` | Histogram | 12.10 | The latency in Gitaly returning health check information to Praefect. This indicates Praefect connection saturation. | |
+You can [configure Praefect](../../gitaly/praefect.md#praefect) to report metrics. For information
+on available metrics, see the [relevant documentation](../../gitaly/index.md#monitor-gitaly-cluster).
## Sidekiq metrics
diff --git a/doc/administration/monitoring/prometheus/index.md b/doc/administration/monitoring/prometheus/index.md
index dd402f800e3..dd81f71d418 100644
--- a/doc/administration/monitoring/prometheus/index.md
+++ b/doc/administration/monitoring/prometheus/index.md
@@ -8,18 +8,19 @@ info: To determine the technical writer assigned to the Stage/Group associated w
[Prometheus](https://prometheus.io) is a powerful time-series monitoring service, providing a flexible
platform for monitoring GitLab and other software products.
+
GitLab provides out-of-the-box monitoring with Prometheus, providing easy
access to high quality time-series monitoring of GitLab services.
-> **Notes:**
->
-> - Prometheus and the various exporters listed in this page are bundled in the
-> Omnibus GitLab package. Check each exporter's documentation for the timeline
-> they got added. For installations from source you must install them
-> yourself. Over subsequent releases additional GitLab metrics are captured.
-> - Prometheus services are on by default with GitLab 9.0.
-> - Prometheus and its exporters don't authenticate users, and are available
-> to anyone who can access them.
+Prometheus and the various exporters listed in this page are bundled in the
+Omnibus GitLab package. Check each exporter's documentation for the timeline
+they got added. For installations from source you must install them
+yourself. Over subsequent releases additional GitLab metrics are captured.
+
+Prometheus services are on by default.
+
+Prometheus and its exporters don't authenticate users, and are available to anyone who can access
+them.
## Overview
@@ -33,7 +34,7 @@ dashboard tool like [Grafana](https://grafana.com).
For installations from source, you must install and configure it yourself.
-Prometheus and its exporters are on by default, starting with GitLab 9.0.
+Prometheus and its exporters are on by default.
Prometheus runs as the `gitlab-prometheus` user and listen on
`http://localhost:9090`. By default, Prometheus is only accessible from the GitLab server itself.
Each exporter is automatically set up as a
@@ -294,8 +295,8 @@ To use an external Prometheus server:
You can visit `http://localhost:9090` for the dashboard that Prometheus offers by default.
If SSL has been enabled on your GitLab instance, you may not be able to access
-Prometheus on the same browser as GitLab if using the same FQDN due to [HSTS](https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security). We plan to
-[provide access via GitLab](https://gitlab.com/gitlab-org/multi-user-prometheus), but in the interim there are
+Prometheus on the same browser as GitLab if using the same FQDN due to [HSTS](https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security).
+[A test project exists](https://gitlab.com/gitlab-org/multi-user-prometheus) to provide access via GitLab, but in the interim there are
some workarounds: using a separate FQDN, using server IP, using a separate browser for Prometheus, resetting HSTS, or
having [NGINX proxy it](https://docs.gitlab.com/omnibus/settings/nginx.html#inserting-custom-nginx-settings-into-the-gitlab-server-block).
diff --git a/doc/administration/nfs.md b/doc/administration/nfs.md
index c4ff19ec3ea..0cab46a95c9 100644
--- a/doc/administration/nfs.md
+++ b/doc/administration/nfs.md
@@ -86,7 +86,7 @@ options:
users. However, in this case only GitLab uses the NFS share so it
is safe. GitLab recommends the `no_root_squash` setting because we need to
manage file permissions automatically. Without the setting you may receive
- errors when the Omnibus package tries to alter permissions. Note that GitLab
+ errors when the Omnibus package tries to alter permissions. GitLab
and other bundled components do **not** run as `root` but as non-privileged
users. The recommendation for `no_root_squash` is to allow the Omnibus package
to set ownership and permissions on files, as needed. In some cases where the
diff --git a/doc/administration/object_storage.md b/doc/administration/object_storage.md
index 525b41359cf..b8a6f2acc56 100644
--- a/doc/administration/object_storage.md
+++ b/doc/administration/object_storage.md
@@ -241,7 +241,7 @@ The connection settings match those provided by [fog-aws](https://github.com/fog
#### Oracle Cloud S3 connection settings
-Note that Oracle Cloud S3 must be sure to use the following settings:
+Oracle Cloud S3 must be sure to use the following settings:
| Setting | Value |
|---------------------------------|---------|
@@ -365,7 +365,7 @@ settings are populated from the previous settings.
azure_storage_access_key = "<AZURE STORAGE ACCESS KEY>"
```
-If you are using a custom Azure storage domain, note that
+If you are using a custom Azure storage domain,
`azure_storage_domain` does **not** have to be set in the Workhorse
configuration. This information is exchanged in an API call between
GitLab Rails and Workhorse.
@@ -690,7 +690,7 @@ When configured either with an instance profile or with the consolidated
object configuration, GitLab Workhorse properly uploads files to S3
buckets that have [SSE-S3 or SSE-KMS encryption enabled by
default](https://docs.aws.amazon.com/kms/latest/developerguide/services-s3.html).
-Note that customer master keys (CMKs) and SSE-C encryption are [not
+Customer master keys (CMKs) and SSE-C encryption are [not
supported since this requires sending the encryption keys in every request](https://gitlab.com/gitlab-org/gitlab/-/issues/226006).
##### Server-side encryption headers
diff --git a/doc/administration/operations/extra_sidekiq_processes.md b/doc/administration/operations/extra_sidekiq_processes.md
index 1f195bcc378..2cc4e3a4551 100644
--- a/doc/administration/operations/extra_sidekiq_processes.md
+++ b/doc/administration/operations/extra_sidekiq_processes.md
@@ -95,14 +95,14 @@ To view the Sidekiq processes in GitLab:
## Negate settings
-To have the additional Sidekiq processes work on every queue **except** the ones
+To have the Sidekiq process work on every queue **except** the ones
you list. In this example, we exclude all import-related jobs from a Sidekiq node:
-1. After you follow the steps for [starting extra processes](#start-multiple-processes),
- edit `/etc/gitlab/gitlab.rb` and add:
+1. Edit `/etc/gitlab/gitlab.rb` and add:
```ruby
sidekiq['negate'] = true
+ sidekiq['queue_selector'] = true
sidekiq['queue_groups'] = [
"feature_category=importers"
]
@@ -140,50 +140,6 @@ sidekiq['queue_groups'] = [
]
```
-### Disable Sidekiq cluster
-
-WARNING:
-Sidekiq cluster is [scheduled](https://gitlab.com/gitlab-com/gl-infra/scalability/-/issues/240)
-to be the only way to start Sidekiq in GitLab 14.0.
-
-By default, the Sidekiq service runs `sidekiq-cluster`. To disable this behavior,
-add the following to the Sidekiq configuration:
-
-```ruby
-sidekiq['enable'] = true
-sidekiq['cluster'] = false
-```
-
-All of the aforementioned configuration options for `sidekiq`
-are available. By default, they are configured as follows:
-
-```ruby
-sidekiq['queue_selector'] = false
-sidekiq['interval'] = nil
-sidekiq['max_concurrency'] = 50
-sidekiq['min_concurrency'] = nil
-sidekiq['negate'] = false
-sidekiq['queue_groups'] = ['*']
-sidekiq['shutdown_timeout'] = 25
-```
-
-`sidekiq_cluster` must be disabled if you decide to configure the
-cluster as above.
-
-When disabling `sidekiq_cluster`, you must copy your configuration for
-`sidekiq_cluster`over to `sidekiq`. Anything configured for
-`sidekiq_cluster` is overridden by the options for `sidekiq` when
-setting `sidekiq['cluster'] = true`.
-
-When using this feature, the service called `sidekiq` is now
-running `sidekiq-cluster`.
-
-The [concurrency](#manage-concurrency) and other options configured
-for Sidekiq are respected.
-
-By default, logs for `sidekiq-cluster` go to `/var/log/gitlab/sidekiq`
-like regular Sidekiq logs.
-
## Ignore all import queues
When [importing from GitHub](../../user/project/import/github.md) or
@@ -264,7 +220,7 @@ being equal to `max_concurrency`.
Running a single Sidekiq process is the default in GitLab 12.10 and earlier.
WARNING:
-Running Sidekiq directly is scheduled to be removed in GitLab
+Running Sidekiq directly was removed in GitLab
[14.0](https://gitlab.com/gitlab-com/gl-infra/scalability/-/issues/240).
1. Edit `/etc/gitlab/gitlab.rb` and add:
diff --git a/doc/administration/operations/extra_sidekiq_routing.md b/doc/administration/operations/extra_sidekiq_routing.md
index 80540b7ba46..6938f8a7012 100644
--- a/doc/administration/operations/extra_sidekiq_routing.md
+++ b/doc/administration/operations/extra_sidekiq_routing.md
@@ -103,9 +103,11 @@ based on a subset of worker attributes:
- `worker_name` - the worker name. The other attributes are typically more useful as
they are more general, but this is available in case a particular worker needs
to be selected.
-- `name` - the queue name. The other attributes are typically more useful as
- they are more general, but this is available in case a particular queue needs
- to be selected.
+- `name` - the queue name generated from the worker name. The other attributes
+ are typically more useful as they are more general, but this is available in
+ case a particular queue needs to be selected. Because this is generated from
+ the worker name, it does not change based on the result of other routing
+ rules.
- `resource_boundary` - if the queue is bound by `cpu`, `memory`, or
`unknown`. For example, the `ProjectExportWorker` is memory bound as it has
to load data in memory before saving it for export.
diff --git a/doc/administration/operations/fast_ssh_key_lookup.md b/doc/administration/operations/fast_ssh_key_lookup.md
index bb0756cf948..5c1271486c0 100644
--- a/doc/administration/operations/fast_ssh_key_lookup.md
+++ b/doc/administration/operations/fast_ssh_key_lookup.md
@@ -48,7 +48,7 @@ lookups via database lookup.
As part of [setting up Geo](../geo/index.md#setup-instructions),
you are required to follow the steps outlined below for both the primary and
-secondary nodes, but note that the `Write to "authorized keys" file` checkbox
+secondary nodes, but the `Write to "authorized keys" file` checkbox
only needs to be unchecked on the primary node since it is reflected
automatically on the secondary if database replication is working.
diff --git a/doc/administration/operations/moving_repositories.md b/doc/administration/operations/moving_repositories.md
index fba20da9aea..765cf64e735 100644
--- a/doc/administration/operations/moving_repositories.md
+++ b/doc/administration/operations/moving_repositories.md
@@ -7,8 +7,7 @@ type: reference
# Moving repositories managed by GitLab **(FREE SELF)**
-Sometimes you need to move all repositories managed by GitLab to
-another file system or another server.
+You can move all repositories managed by GitLab to another file system or another server.
## Moving data within a GitLab instance
@@ -28,7 +27,128 @@ For more information, see:
querying and scheduling snippet repository moves.
- [The API documentation](../../api/group_repository_storage_moves.md) details the endpoints for
querying and scheduling group repository moves **(PREMIUM SELF)**.
-- [Migrate to Gitaly Cluster](../gitaly/praefect.md#migrate-to-gitaly-cluster).
+- [Migrate to Gitaly Cluster](../gitaly/index.md#migrate-to-gitaly-cluster).
+
+### Move Repositories
+
+GitLab repositories can be associated with projects, groups, and snippets. Each of these types
+have a separate API to schedule the respective repositories to move. To move all repositories
+on a GitLab instance, each of these types must be scheduled to move for each storage.
+
+WARNING:
+To move repositories into a [Gitaly Cluster](../gitaly/index.md#gitaly-cluster) in GitLab versions
+13.12 to 14.1, you must [enable the `gitaly_replicate_repository_direct_fetch` feature flag](../feature_flags.md).
+
+Each repository is made read-only for the duration of the move. The repository is not writable
+until the move has completed.
+
+To move repositories:
+
+1. Ensure all storages are accessible to the GitLab instance. In this example, these are
+ `<original_storage_name>` and `<cluster_storage_name>`.
+1. [Configure repository storage weights](../repository_storage_paths.md#configure-where-new-repositories-are-stored)
+ so that the new storages receives all new projects. This stops new projects from being created
+ on existing storages while the migration is in progress.
+1. Schedule repository moves for:
+ - [Projects](#bulk-schedule-project-moves).
+ - [Snippets](#bulk-schedule-snippet-moves).
+ - [Groups](#bulk-schedule-group-moves). **(PREMIUM SELF)**
+
+### Bulk schedule project moves
+
+Use the API to schedule project moves:
+
+1. [Schedule repository storage moves for all projects on a storage shard](../../api/project_repository_storage_moves.md#schedule-repository-storage-moves-for-all-projects-on-a-storage-shard)
+ using the API. For example:
+
+ ```shell
+ curl --request POST --header "Private-Token: <your_access_token>" \
+ --header "Content-Type: application/json" \
+ --data '{"source_storage_name":"<original_storage_name>","destination_storage_name":"<cluster_storage_name>"}' \
+ "https://gitlab.example.com/api/v4/project_repository_storage_moves"
+ ```
+
+1. [Query the most recent repository moves](../../api/project_repository_storage_moves.md#retrieve-all-project-repository-storage-moves)
+ using the API. The response indicates either:
+ - The moves have completed successfully. The `state` field is `finished`.
+ - The moves are in progress. Re-query the repository move until it completes successfully.
+ - The moves have failed. Most failures are temporary and are solved by rescheduling the move.
+
+1. After the moves are complete, use the API to [query projects](../../api/projects.md#list-all-projects) and confirm that all projects have moved. None of the projects should be returned with the
+ `repository_storage` field set to the old storage. For example:
+
+ ```shell
+ curl --header "Private-Token: <your_access_token>" --header "Content-Type: application/json" \
+ "https://gitlab.example.com/api/v4/projects?repository_storage=<original_storage_name>"
+ ```
+
+ Alternatively use [the rails console](../operations/rails_console.md) to confirm that all
+ projects have moved. Run the following in the rails console:
+
+ ```ruby
+ ProjectRepository.for_repository_storage('<original_storage_name>')
+ ```
+
+1. Repeat for each storage as required.
+
+### Bulk schedule snippet moves
+
+Use the API to schedule snippet moves:
+
+1. [Schedule repository storage moves for all snippets on a storage shard](../../api/snippet_repository_storage_moves.md#schedule-repository-storage-moves-for-all-snippets-on-a-storage-shard). For example:
+
+ ```shell
+ curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
+ --header "Content-Type: application/json" \
+ --data '{"source_storage_name":"<original_storage_name>","destination_storage_name":"<cluster_storage_name>"}' \
+ "https://gitlab.example.com/api/v4/snippet_repository_storage_moves"
+ ```
+
+1. [Query the most recent repository moves](../../api/snippet_repository_storage_moves.md#retrieve-all-snippet-repository-storage-moves)
+The response indicates either:
+ - The moves have completed successfully. The `state` field is `finished`.
+ - The moves are in progress. Re-query the repository move until it completes successfully.
+ - The moves have failed. Most failures are temporary and are solved by rescheduling the move.
+
+1. After the moves are complete, use [the rails console](../operations/rails_console.md) to confirm
+ that all snippets have moved. No snippets should be returned for the original storage. Run the
+ following in the rails console:
+
+ ```ruby
+ SnippetRepository.for_repository_storage('<original_storage_name>')
+ ```
+
+1. Repeat for each storage as required.
+
+### Bulk schedule group moves **(PREMIUM SELF)**
+
+Use the API to schedule group moves:
+
+1. [Schedule repository storage moves for all groups on a storage shard](../../api/group_repository_storage_moves.md#schedule-repository-storage-moves-for-all-groups-on-a-storage-shard)
+. For example:
+
+ ```shell
+ curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
+ --header "Content-Type: application/json" \
+ --data '{"source_storage_name":"<original_storage_name>","destination_storage_name":"<cluster_storage_name>"}' \
+ "https://gitlab.example.com/api/v4/group_repository_storage_moves"
+ ```
+
+1. [Query the most recent repository moves](../../api/group_repository_storage_moves.md#retrieve-all-group-repository-storage-moves)
+. The response indicates either:
+ - The moves have completed successfully. The `state` field is `finished`.
+ - The moves are in progress. Re-query the repository move until it completes successfully.
+ - The moves have failed. Most failures are temporary and are solved by rescheduling the move.
+
+1. After the moves are complete, use [the rails console](../operations/rails_console.md) to confirm
+ that all groups have moved. No groups should be returned for the original storage. Run the
+ following in the rails console:
+
+ ```ruby
+ GroupWikiRepository.for_repository_storage('<original_storage_name>')
+ ```
+
+1. Repeat for each storage as required.
## Migrating to another GitLab instance
diff --git a/doc/administration/packages/container_registry.md b/doc/administration/packages/container_registry.md
index 74483b65c4d..eb118709f94 100644
--- a/doc/administration/packages/container_registry.md
+++ b/doc/administration/packages/container_registry.md
@@ -580,6 +580,54 @@ However, this behavior is undesirable for registries used by internal hosts that
1. Save the file and [restart GitLab](../restart_gitlab.md#installations-from-source) for the changes to take effect.
+#### Encrypted S3 buckets
+
+You can use server-side encryption with AWS KMS for S3 buckets that have
+[SSE-S3 or SSE-KMS encryption enabled by default](https://docs.aws.amazon.com/kms/latest/developerguide/services-s3.html).
+Customer master keys (CMKs) and SSE-C encryption aren't supported since this requires sending the
+encryption keys in every request.
+
+For SSE-S3, you must enable the `encrypt` option in the registry settings. How you do this depends
+on how you installed GitLab. Follow the instructions here that match your installation method.
+
+For Omnibus GitLab installations:
+
+1. Edit `/etc/gitlab/gitlab.rb`:
+
+ ```ruby
+ registry['storage'] = {
+ 's3' => {
+ 'accesskey' => 's3-access-key',
+ 'secretkey' => 's3-secret-key-for-access-key',
+ 'bucket' => 'your-s3-bucket',
+ 'region' => 'your-s3-region',
+ 'regionendpoint' => 'your-s3-regionendpoint',
+ 'encrypt' => true
+ }
+ }
+ ```
+
+1. Save the file and [reconfigure GitLab](../restart_gitlab.md#omnibus-gitlab-reconfigure)
+ for the changes to take effect.
+
+For installations from source:
+
+1. Edit your registry configuration YML file:
+
+ ```yaml
+ storage:
+ s3:
+ accesskey: 'AKIAKIAKI'
+ secretkey: 'secret123'
+ bucket: 'gitlab-registry-bucket-AKIAKIAKI'
+ region: 'your-s3-region'
+ regionendpoint: 'your-s3-regionendpoint'
+ encrypt: true
+ ```
+
+1. Save the file and [restart GitLab](../restart_gitlab.md#installations-from-source)
+ for the changes to take effect.
+
### Storage limitations
Currently, there is no storage limitation, which means a user can upload an
@@ -617,8 +665,7 @@ In the examples below we set the Registry's port to `5001`.
## Disable Container Registry per project
If Registry is enabled in your GitLab instance, but you don't need it for your
-project, you can disable it from your project's settings. Read the user guide
-on how to achieve that.
+project, you can [disable it from your project's settings](../../user/project/settings/index.md#sharing-and-permissions).
## Use an external container registry with GitLab as an auth endpoint
@@ -777,6 +824,13 @@ notifications:
## Run the Cleanup policy now
+WARNING:
+If you're using a distributed architecture and Sidekiq is running on a different node, the cleanup
+policies don't work. To fix this, you must configure the `gitlab.rb` file on the Sidekiq nodes to
+point to the correct registry URL and copy the `registry.key` file to each Sidekiq node. For more
+information, see the [Sidekiq configuration](../sidekiq.md)
+page.
+
To reduce the amount of [Container Registry disk space used by a given project](../troubleshooting/gitlab_rails_cheat_sheet.md#registry-disk-space-usage-by-project),
administrators can clean up image tags
and [run garbage collection](#container-registry-garbage-collection).
@@ -892,26 +946,6 @@ understand the implications.
WARNING:
This is a destructive operation.
-When you run `registry-garbage-collect` with the -m flag, garbage collection unlinks manifests that
-are part of a multi-arch manifest, unless they're tagged in the same repository.
-See [this issue](https://gitlab.com/gitlab-org/container-registry/-/issues/149) for details.
-
-To work around this issue, instead of:
-
-```plaintext
-myrepo/multiarchmanifest:latest
-myrepo/manifest/amd-64:latest
-myrepo/manifest/arm:latest
-```
-
-Use:
-
-```plaintext
-myrepo/multiarchmanifest:latest
-myrepo/manifest:amd-64-latest
-myrepo/manifest:arm-latest
-```
-
The GitLab Container Registry follows the same default workflow as Docker Distribution:
retain untagged manifests and all layers, even ones that are not referenced directly. All content
can be accessed by using context addressable identifiers.
diff --git a/doc/administration/pages/img/lets_encrypt_integration_v12_1.png b/doc/administration/pages/img/lets_encrypt_integration_v12_1.png
deleted file mode 100644
index 0f3ca25ce55..00000000000
--- a/doc/administration/pages/img/lets_encrypt_integration_v12_1.png
+++ /dev/null
Binary files differ
diff --git a/doc/administration/pages/index.md b/doc/administration/pages/index.md
index ea1e99524b8..5aeb3eaef7f 100644
--- a/doc/administration/pages/index.md
+++ b/doc/administration/pages/index.md
@@ -41,7 +41,7 @@ which you can set it up:
the Pages daemon is installed, so you must share it through the network.
- Run the Pages daemon in the same server as GitLab, listening on the same IP
but on different ports. In that case, you must proxy the traffic with
- a load balancer. If you choose that route note that you should use TCP load
+ a load balancer. If you choose that route, you should use TCP load
balancing for HTTPS. If you use TLS-termination (HTTPS-load balancing), the
pages can't be served with user-provided certificates. For
HTTP it's OK to use HTTP or TCP load balancing.
@@ -407,17 +407,15 @@ verification requirement:
allows users to add Let's Encrypt SSL certificates for GitLab Pages
sites served under a custom domain.
-To enable it, you must:
+To enable it:
1. Choose an email address on which you want to receive notifications about expiring domains.
1. On the top bar, select **Menu >** **{admin}** **Admin**.
1. On the left sidebar, select **Settings > Preferences**.
1. Expand **Pages**.
-1. Enter the email address for receiving notifications and accept Let's Encrypt's Terms of Service as shown below.
+1. Enter the email address for receiving notifications and accept Let's Encrypt's Terms of Service.
1. Select **Save changes**.
-![Let's Encrypt settings](img/lets_encrypt_integration_v12_1.png)
-
### Access control
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/33422) in GitLab 11.5.
@@ -466,6 +464,7 @@ The scope to use for authentication must match the GitLab Pages OAuth applicatio
pre-existing applications must modify the GitLab Pages OAuth application. Follow these steps to do
this:
+1. Enable [access control](#access-control).
1. On the top bar, select **Menu >** **{admin}** **Admin**.
1. On the left sidebar, select **Settings > Applications**.
1. Expand **GitLab Pages**.
@@ -473,7 +472,7 @@ this:
`read_api`).
1. Select **Save changes**.
-#### Disabling public access to all Pages websites
+#### Disable public access to all Pages sites
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/32095) in GitLab 12.7.
@@ -662,6 +661,16 @@ Follow the steps below to configure the proxy listener of GitLab Pages.
1. [Reconfigure GitLab](../restart_gitlab.md#omnibus-gitlab-reconfigure).
+## Set global maximum pages size per project **(FREE SELF)**
+
+To set the global maximum pages size for a project:
+
+1. On the top bar, select **Menu >** **{admin}** **Admin**.
+1. On the left sidebar, select **Settings > Preferences**.
+1. Expand **Pages**.
+1. Edit the **Maximum size of pages**.
+1. Select **Save changes**.
+
## Override maximum pages size per project or group **(PREMIUM SELF)**
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/16610) in GitLab 12.7.
diff --git a/doc/administration/pages/source.md b/doc/administration/pages/source.md
index 4aaf430db97..b5c3330b2ce 100644
--- a/doc/administration/pages/source.md
+++ b/doc/administration/pages/source.md
@@ -41,7 +41,7 @@ which you can set it up:
the Pages daemon is installed, so you must share it through the network.
1. Run the Pages daemon in the same server as GitLab, listening on the same IP
but on different ports. In that case, you must proxy the traffic with
- a load balancer. If you choose that route, note that you should use TCP load
+ a load balancer. If you choose that route, you should use TCP load
balancing for HTTPS. If you use TLS-termination (HTTPS-load balancing), the
pages aren't able to be served with user-provided certificates. For
HTTP, it's OK to use HTTP or TCP load balancing.
@@ -127,17 +127,43 @@ The Pages daemon doesn't listen to the outside world.
# path: shared/pages
host: example.io
- port: 80
+ access_control: false
+ port: 8090
https: false
+ artifacts_server: false
+ external_http: ["127.0.0.1:8090"]
+ secret_file: /home/git/gitlab/gitlab-pages/gitlab-pages-secret
+ ```
+
+1. Add the following configuration file to
+ `/home/git/gitlab/gitlab-pages/gitlab-pages.conf`, and be sure to change
+ `example.io` to the FQDN from which you want to serve GitLab Pages and
+ `gitlab.example.com` to the URL of your GitLab instance:
+
+ ```ini
+ listen-http=:8090
+ pages-root=/home/git/gitlab/shared/pages
+ api-secret-key=/home/git/gitlab/gitlab-pages-secret
+ pages-domain=example.io
+ internal-gitlab-server=https://gitlab.example.com
+ ```
+
+ You may use an `http` address, when running GitLab Pages and GitLab on the
+ same host. If you use `https` and use a self-signed certificate, be sure to
+ make your custom CA available to GitLab Pages, for example by setting the
+ `SSL_CERT_DIR` environment variable.
+
+1. Add the secret API key:
+
+ ```shell
+ sudo -u git -H openssl rand -base64 32 > /home/git/gitlab/gitlab-pages-secret
```
1. Edit `/etc/default/gitlab` and set `gitlab_pages_enabled` to `true` in
- order to enable the pages daemon. In `gitlab_pages_options` the
- `-pages-domain` must match the `host` setting that you set above.
+ order to enable the pages daemon:
```ini
gitlab_pages_enabled=true
- gitlab_pages_options="-pages-domain example.io -pages-root $app_root/shared/pages -listen-proxy 127.0.0.1:8090"
```
1. Copy the `gitlab-pages` NGINX configuration file:
diff --git a/doc/administration/polling.md b/doc/administration/polling.md
index ec5d6cd45d8..5c4ee837057 100644
--- a/doc/administration/polling.md
+++ b/doc/administration/polling.md
@@ -4,29 +4,31 @@ group: Distribution
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
-# Polling configuration **(FREE SELF)**
+# Polling interval multiplier **(FREE SELF)**
-The GitLab UI polls for updates for different resources (issue notes, issue
-titles, pipeline statuses, and so on) on a schedule appropriate to the resource.
+The GitLab UI polls for updates for different resources (issue notes, issue titles, pipeline
+statuses, and so on) on a schedule appropriate to the resource.
-To configure the polling interval multiplier:
+Adjust the multiplier on these schedules to adjust how frequently the GitLab UI polls for updates. If
+you set the multiplier to:
+
+- A value greater than `1`, UI polling slows down. If you see issues with database load from lots of
+ clients polling for updates, increasing the multiplier can be a good alternative to disabling
+ polling completely. For example, if you set the value to `2`, all polling intervals
+ are multiplied by 2, which means that polling happens half as frequently.
+- A value between `0` and `1`, the UI polls more frequently so updates occur more frequently.
+ **Not recommended**.
+- `0`, all polling is disabled. On the next poll, clients stop polling for updates.
+
+The default value (`1`) is recommended for the majority of GitLab installations.
+
+## Configure
+
+To adjust the polling interval multiplier:
1. On the top bar, select **Menu >** **{admin}** **Admin**.
1. On the left sidebar, select **Settings > Preferences**.
-1. Expand **Real-time features**.
-1. Set a value for the polling interval multiplier. This multiplier is applied
- to all resources at once, and decimal values are supported:
-
- - `1.0` is the default, and recommended for most installations.
- - `0` disables UI polling completely. On the next poll, clients stop
- polling for updates.
- - A value greater than `1` slows polling down. If you see issues with
- database load from lots of clients polling for updates, increasing the
- multiplier from 1 can be a good compromise, rather than disabling polling
- completely. For example, if you set the value to `2`, all polling intervals
- are multiplied by 2, which means that polling happens half as frequently.
- - A value between `0` and `1` makes the UI poll more frequently (so updates
- show in other sessions faster), but is **not recommended**. `1` should be
- fast enough.
-
+1. Expand **Polling interval multiplier**.
+1. Set a value for the polling interval multiplier. This multiplier is applied to all resources at
+ once.
1. Select **Save changes**.
diff --git a/doc/administration/postgresql/pgbouncer.md b/doc/administration/postgresql/pgbouncer.md
index 4f9056b9b50..7171e90949e 100644
--- a/doc/administration/postgresql/pgbouncer.md
+++ b/doc/administration/postgresql/pgbouncer.md
@@ -200,6 +200,45 @@ Once you've performed the tasks or procedure, switch back to using PgBouncer:
sudo gitlab-ctl reconfigure
```
+## Fine tuning
+
+PgBouncer's default settings suit the majority of installations.
+In specific cases you may want to change the performance-specific and resource-specific variables to either increase possible
+throughput or to limit resource utilization that could cause memory exhaustion on the database.
+
+You can find the parameters and respective documentation on the [official PgBouncer documentation](https://www.pgbouncer.org/config.html).
+Listed below are the most relevant ones and their defaults on an Omnibus GitLab installation:
+
+- `pgbouncer['max_client_conn']` (default: `2048`, depends on server file descriptor limits)
+ This is the "frontend" pool in PgBouncer: connections from Rails to PgBouncer.
+- `pgbouncer['default_pool_size']` (default: `100`)
+ This is the "backend" pool in PgBouncer: connections from PgBouncer to the database.
+
+The ideal number for `default_pool_size` must be enough to handle all provisioned services that need to access
+the database. Each of the listed services below use the following formula to define database pool size:
+
+- `puma` : `max_threads + headroom` (default `14`)
+ - `max_threads` is configured via: `gitlab['puma']['max_threads']` (default: `4`)
+ - `headroom` can be configured via `DB_POOL_HEADROOM` env variable (default to `10`)
+- `sidekiq` : `max_concurrency + 1 + headroom` (default: `61`)
+ - `max_concurrency` is configured via: `sidekiq['max_concurrency']` (default: `50`)
+ - `headroom` can be configured via `DB_POOL_HEADROOM` env variable (default to `10`)
+- `geo-logcursor`: `1+headroom` (default: `11`)
+ - `headroom` can be configured via `DB_POOL_HEADROOM` env variable (default to `10`)
+
+To calculate the `default_pool_size`, multiply the number of instances of `puma`, `sidekiq` and `geo-logcursor` by the
+number of connections each can consume as per listed above. The total will be the suggested `default_pool_size`.
+
+If you are using more than one PgBouncer with an internal Load Balancer, you may be able to divide the
+`default_pool_size` by the number of instances to guarantee an evenly distributed load between them.
+
+The `pgbouncer['max_client_conn']` is the hard-limit of connections PgBouncer can accept. It's unlikely you will need
+to change this. If you are hitting that limit, you may want to consider adding additional PgBouncers with an internal
+Load Balancer.
+
+When setting up the limits for a PgBouncer that points to the Geo Tracking Database,
+you can likely ignore `puma` from the equation, as it is only accessing that database sporadically.
+
## Troubleshooting
In case you are experiencing any issues connecting through PgBouncer, the first
diff --git a/doc/administration/postgresql/replication_and_failover.md b/doc/administration/postgresql/replication_and_failover.md
index d1dd233f08b..1308697c16e 100644
--- a/doc/administration/postgresql/replication_and_failover.md
+++ b/doc/administration/postgresql/replication_and_failover.md
@@ -57,7 +57,7 @@ consists of:
### Consul server node
-The Consul server node runs the Consul server service. These nodes must have reached the quorum and elected a leader _before_ Patroni cluster bootstrap otherwise database nodes will wait until such Consul leader is elected.
+The Consul server node runs the Consul server service. These nodes must have reached the quorum and elected a leader _before_ Patroni cluster bootstrap otherwise database nodes wait until such Consul leader is elected.
### PgBouncer node
@@ -67,7 +67,7 @@ Each PgBouncer node runs two services:
`Consul` agent - Watches the status of the PostgreSQL service definition on the
Consul cluster. If that status changes, Consul runs a script which updates the
-PgBouncer configuration to point to the new PostgreSQL master node and reloads
+PgBouncer configuration to point to the new PostgreSQL leader node and reloads
the PgBouncer service.
### Connection flow
@@ -84,7 +84,7 @@ Each service in the package comes with a set of [default ports](https://docs.git
### Required information
-Before proceeding with configuration, you will need to collect all the necessary
+Before proceeding with configuration, you need to collect all the necessary
information.
#### Network information
@@ -93,12 +93,12 @@ PostgreSQL doesn't listen on any network interface by default. It needs to know
which IP address to listen on to be accessible to other services. Similarly,
PostgreSQL access is controlled based on the network source.
-This is why you will need:
+This is why you need:
-- IP address of each nodes network interface. This can be set to `0.0.0.0` to
+- The IP address of each node's network interface. This can be set to `0.0.0.0` to
listen on all interfaces. It cannot be set to the loopback address `127.0.0.1`.
- Network Address. This can be in subnet (that is, `192.168.0.0/255.255.255.0`)
- or CIDR (that is, `192.168.0.0/24`) form.
+ or Classless Inter-Domain Routing (CIDR) (`192.168.0.0/24`) form.
#### Consul information
@@ -141,12 +141,12 @@ patroni['postgresql']['max_replication_slots'] = 6
patroni['postgresql']['max_wal_senders'] = 7
```
-As previously mentioned, you'll have to prepare the network subnets that will
-be allowed to authenticate with the database.
-You'll also need to supply the IP addresses or DNS records of Consul
-server nodes.
+As previously mentioned, prepare the network subnets that need permission
+to authenticate with the database.
+You also need to have the IP addresses or DNS records of Consul
+server nodes on hand.
-We will need the following password information for the application's database user:
+You need the following password information for the application's database user:
- `POSTGRESQL_USERNAME`. The default user for Omnibus GitLab is `gitlab`
- `POSTGRESQL_USER_PASSWORD`. The password for the database user
@@ -159,14 +159,14 @@ We will need the following password information for the application's database u
#### Patroni information
-We will need the following password information for the Patroni API:
+You need the following password information for the Patroni API:
- `PATRONI_API_USERNAME`. A username for basic auth to the API
- `PATRONI_API_PASSWORD`. A password for basic auth to the API
#### PgBouncer information
-When using default setup, minimum configuration requires:
+When using a default setup, the minimum configuration requires:
- `PGBOUNCER_USERNAME`. The default user for Omnibus GitLab is `pgbouncer`
- `PGBOUNCER_PASSWORD`. This is a password for PgBouncer service.
@@ -179,11 +179,11 @@ When using default setup, minimum configuration requires:
- `PGBOUNCER_NODE`, is the IP address or a FQDN of the node running PgBouncer.
-Few notes on the service itself:
+Few things to remember about the service itself:
- The service runs as the same system account as the database
- In the package, this is by default `gitlab-psql`
-- If you use a non-default user account for PgBouncer service (by default `pgbouncer`), you will have to specify this username. We will refer to this requirement with `PGBOUNCER_USERNAME`.
+- If you use a non-default user account for PgBouncer service (by default `pgbouncer`), you need to specify this username.
- Passwords are stored in the following locations:
- `/etc/gitlab/gitlab.rb`: hashed, and in plain text
- `/var/opt/gitlab/pgbouncer/pg_auth`: hashed
@@ -207,7 +207,7 @@ When installing the GitLab package, do not supply `EXTERNAL_URL` value.
You must enable Patroni explicitly to be able to use it (with `patroni['enable'] = true`).
Any PostgreSQL configuration item that controls replication, for example `wal_level`, `max_wal_senders`, etc, are strictly
-controlled by Patroni and will override the original settings that you make with the `postgresql[...]` configuration key.
+controlled by Patroni. These configurations override the original settings that you make with the `postgresql[...]` configuration key.
Hence, they are all separated and placed under `patroni['postgresql'][...]`. This behavior is limited to replication.
Patroni honours any other PostgreSQL configuration that was made with the `postgresql[...]` configuration key. For example,
`max_wal_senders` by default is set to `5`. If you wish to change this you must set it with the `patroni['postgresql']['max_wal_senders']`
@@ -257,6 +257,9 @@ patroni['postgresql']['max_replication_slots'] = X
# available database connections.
patroni['postgresql']['max_wal_senders'] = X+1
+# Replace XXX.XXX.XXX.XXX/YY with Network Addresses for your other patroni nodes
+patroni['allowlist'] = %w(XXX.XXX.XXX.XXX/YY 127.0.0.1/32)
+
# Replace XXX.XXX.XXX.XXX/YY with Network Address
postgresql['trust_auth_cidr_addresses'] = %w(XXX.XXX.XXX.XXX/YY 127.0.0.1/32)
@@ -274,12 +277,12 @@ consul['configuration'] = {
All database nodes use the same configuration. The leader node is not determined in configuration,
and there is no additional or different configuration for either leader or replica nodes.
-Once the configuration of a node is done, you must [reconfigure Omnibus GitLab](../restart_gitlab.md#omnibus-gitlab-reconfigure)
+After the configuration of a node is complete, you must [reconfigure Omnibus GitLab](../restart_gitlab.md#omnibus-gitlab-reconfigure)
on each node for the changes to take effect.
Generally, when Consul cluster is ready, the first node that [reconfigures](../restart_gitlab.md#omnibus-gitlab-reconfigure)
becomes the leader. You do not need to sequence the nodes reconfiguration. You can run them in parallel or in any order.
-If you choose an arbitrary order you do not have any predetermined master.
+If you choose an arbitrary order you do not have any predetermined leader.
#### Enable Monitoring
@@ -300,6 +303,63 @@ If you enable Monitoring, it must be enabled on **all** database servers.
1. Run `sudo gitlab-ctl reconfigure` to compile the configuration.
+#### Enable TLS support for the Patroni API
+
+By default, Patroni's [REST API](https://patroni.readthedocs.io/en/latest/rest_api.html#rest-api) is served over HTTP.
+You have the option to enable TLS and use HTTPS over the same [port](https://docs.gitlab.com/omnibus/package-information/defaults.html#patroni).
+
+To enable TLS, you need PEM-formatted certificate and private key files. Both files must be readable by the PostgreSQL user (`gitlab-psql` by default, or the one set by `postgresql['username']`):
+
+```ruby
+patroni['tls_certificate_file'] = '/path/to/server/certificate.pem'
+patroni['tls_key_file'] = '/path/to/server/key.pem'
+```
+
+If the server's private key is encrypted, specify the password to decrypt it:
+
+```ruby
+patroni['tls_key_password'] = 'private-key-password' # This is the plain-text password.
+```
+
+If you are using a self-signed certificate or an internal CA, you need to either disable the TLS verification or pass the certificate of the
+internal CA, otherwise you may run into an unexpected error when using the `gitlab-ctl patroni ....` commands. Omnibus ensures that Patroni API
+clients honor this configuration.
+
+TLS certificate verification is enabled by default. To disable it:
+
+```ruby
+patroni['tls_verify'] = false
+```
+
+Alternatively, you can pass a PEM-formatted certificate of the internal CA. Again, the file must be readable by the PostgreSQL user:
+
+```ruby
+patroni['tls_ca_file'] = '/path/to/ca.pem'
+```
+
+When TLS is enabled, mutual authentication of the API server and client is possible for all endpoints, the extent of which depends on
+the `patroni['tls_client_mode']` attribute:
+
+- `none` (default): the API will not check for any client certificates.
+- `optional`: client certificates are required for all [unsafe](https://patroni.readthedocs.io/en/latest/security.html#protecting-the-rest-api) API calls.
+- `required`: client certificates are required for all API calls.
+
+The client certificates are verified against the CA certificate that is specified with the `patroni['tls_ca_file']` attribute. Therefore,
+this attribute is required for mutual TLS authentication. You also need to specify PEM-formatted client certificate and private key files.
+Both files must be readable by the PostgreSQL user:
+
+```ruby
+patroni['tls_client_mode'] = 'required'
+patroni['tls_ca_file'] = '/path/to/ca.pem'
+
+patroni['tls_client_certificate_file'] = '/path/to/client/certificate.pem'
+patroni['tls_client_key_file'] = '/path/to/client/key.pem'
+```
+
+You can use different certificates and keys for both API server and client on different Patroni nodes as long as they can be verified.
+However, the CA certificate (`patroni['tls_ca_file']`), TLS certificate verification (`patroni['tls_verify']`), and client TLS
+authentication mode (`patroni['tls_client_mode']`), must each have the same value on all nodes.
+
### Configuring the PgBouncer node
1. Make sure you collect [`CONSUL_SERVER_NODES`](#consul-information), [`CONSUL_PASSWORD_HASH`](#consul-information), and [`PGBOUNCER_PASSWORD_HASH`](#pgbouncer-information) before executing the next step.
@@ -355,19 +415,19 @@ If you enable Monitoring, it must be enabled on **all** database servers.
#### PgBouncer Checkpoint
-1. Ensure each node is talking to the current master:
+1. Ensure each node is talking to the current node leader:
```shell
gitlab-ctl pgb-console # Supply PGBOUNCER_PASSWORD when prompted
```
If there is an error `psql: ERROR: Auth failed` after typing in the
- password, ensure you previously generated the MD5 password hashes with the correct
+ password, ensure you have previously generated the MD5 password hashes with the correct
format. The correct format is to concatenate the password and the username:
`PASSWORDUSERNAME`. For example, `Sup3rS3cr3tpgbouncer` would be the text
needed to generate an MD5 password hash for the `pgbouncer` user.
-1. Once the console prompt is available, run the following queries:
+1. After the console prompt has become available, run the following queries:
```shell
show databases ; show clients ;
@@ -390,7 +450,7 @@ If you enable Monitoring, it must be enabled on **all** database servers.
#### Configure the internal load balancer
-If you're running more than one PgBouncer node as recommended, then at this time you'll need to set up a TCP internal load balancer to serve each correctly. This can be done with any reputable TCP load balancer.
+If you're running more than one PgBouncer node as recommended, then you need to set up a TCP internal load balancer to serve each correctly. This can be accomplished with any reputable TCP load balancer.
As an example here's how you could do it with [HAProxy](https://www.haproxy.org/):
@@ -450,8 +510,7 @@ Ensure that all migrations ran:
gitlab-rake gitlab:db:configure
```
-> **Note**: If you encounter a `rake aborted!` error stating that PgBouncer is failing to connect to
-PostgreSQL it may be that your PgBouncer node's IP address is missing from
+> **Note**: If you encounter a `rake aborted!` error stating that PgBouncer is failing to connect to PostgreSQL it may be that your PgBouncer node's IP address is missing from
PostgreSQL's `trust_auth_cidr_addresses` in `gitlab.rb` on your database nodes. See
[PgBouncer error `ERROR: pgbouncer cannot connect to server`](#pgbouncer-error-error-pgbouncer-cannot-connect-to-server)
in the Troubleshooting section before proceeding.
@@ -497,7 +556,7 @@ Here is a list and description of each machine and the assigned IP:
All passwords are set to `toomanysecrets`, please do not use this password or derived hashes and the `external_url` for GitLab is `http://gitlab.example.com`.
-Please note that after the initial configuration, if a failover occurs, the PostgresSQL master will change to one of the available secondaries until it is failed back.
+After the initial configuration, if a failover occurs, the PostgresSQL leader node changes to one of the available secondaries until it is failed back.
#### Example recommended setup for Consul servers
@@ -572,6 +631,7 @@ patroni['password'] = 'PATRONI_API_PASSWORD'
patroni['postgresql']['max_replication_slots'] = 6
patroni['postgresql']['max_wal_senders'] = 7
+patroni['allowlist'] = = %w(10.6.0.0/16 127.0.0.1/32)
postgresql['trust_auth_cidr_addresses'] = %w(10.6.0.0/16 127.0.0.1/32)
# Configure the Consul agent
@@ -628,7 +688,7 @@ All passwords are set to `toomanysecrets`, please do not use this password or de
The `external_url` for GitLab is `http://gitlab.example.com`
-Please note that after the initial configuration, if a failover occurs, the PostgresSQL master will change to one of the available secondaries until it is failed back.
+After the initial configuration, if a failover occurs, the PostgresSQL leader node changes to one of the available secondaries until it is failed back.
#### Example minimal configuration for database servers
@@ -664,6 +724,7 @@ patroni['password'] = 'PATRONI_API_PASSWORD'
# available database connections.
patroni['postgresql']['max_wal_senders'] = 7
+patroni['allowlist'] = = %w(10.6.0.0/16 127.0.0.1/32)
postgresql['trust_auth_cidr_addresses'] = %w(10.6.0.0/16 127.0.0.1/32)
consul['configuration'] = {
@@ -721,21 +782,14 @@ The manual steps for this configuration are the same as for the [example recomme
NOTE:
Using Patroni instead of Repmgr is supported for PostgreSQL 11 and required for PostgreSQL 12. Starting with GitLab 14.0, only PostgreSQL 12 is available and hence Patroni is mandatory to achieve failover and replication.
-Patroni is an opinionated solution for PostgreSQL high-availability. It takes the control of PostgreSQL, overrides its
-configuration and manages its lifecycle (start, stop, restart). Patroni is the only option for PostgreSQL 12 clustering and for cascading replication for Geo deployments.
+Patroni is an opinionated solution for PostgreSQL high-availability. It takes the control of PostgreSQL, overrides its configuration, and manages its lifecycle (start, stop, restart). Patroni is the only option for PostgreSQL 12 clustering and for cascading replication for Geo deployments.
-The [architecture](#example-recommended-setup-manual-steps) (that was mentioned above) does not change for Patroni.
-You do not need any special consideration for Patroni while provisioning your database nodes. Patroni heavily relies on
-Consul to store the state of the cluster and elect a leader. Any failure in Consul cluster and its leader election will
-propagate to Patroni cluster as well.
+The fundamental [architecture](#example-recommended-setup-manual-steps) (mentioned above) does not change for Patroni.
+You do not need any special consideration for Patroni while provisioning your database nodes. Patroni heavily relies on Consul to store the state of the cluster and elect a leader. Any failure in Consul cluster and its leader election propagates to the Patroni cluster as well.
-Patroni monitors the cluster and handles failover. When the primary node fails it works with Consul to notify PgBouncer. On failure, Patroni handles the transitioning of the old primary to a replica and rejoins it to the cluster automatically.
+Patroni monitors the cluster and handles any failover. When the primary node fails it works with Consul to notify PgBouncer. On failure, Patroni handles the transitioning of the old primary to a replica and rejoins it to the cluster automatically.
-With Patroni the connection flow is slightly different. Patroni on each node connects to Consul agent to join the
-cluster. Only after this point it decides if the node is the primary or a replica. Based on this decision, it configures
-and starts PostgreSQL which it communicates with directly over a Unix socket. This implies that if Consul cluster is not
-functional or does not have a leader, Patroni and by extension PostgreSQL will not start. Patroni also exposes a REST
-API which can be accessed via its [default port](https://docs.gitlab.com/omnibus/package-information/defaults.html#patroni)
+With Patroni, the connection flow is slightly different. Patroni on each node connects to Consul agent to join the cluster. Only after this point it decides if the node is the primary or a replica. Based on this decision, it configures and starts PostgreSQL which it communicates with directly over a Unix socket. This means that if the Consul cluster is not functional or does not have a leader, Patroni and by extension PostgreSQL does not start. Patroni also exposes a REST API which can be accessed via its [default port](https://docs.gitlab.com/omnibus/package-information/defaults.html#patroni)
on each node.
### Check replication status
@@ -758,7 +812,7 @@ To verify the status of replication:
echo 'select * from pg_stat_wal_receiver\x\g\x \n select * from pg_stat_replication\x\g\x' | gitlab-psql
```
-The same command can be run on all three database servers, and will return any information
+The same command can be run on all three database servers. It returns any information
about replication available depending on the role the server is performing.
The leader should return one record per replica:
@@ -858,7 +912,7 @@ patroni['remove_data_directory_on_rewind_failure'] = false
patroni['remove_data_directory_on_diverged_timelines'] = false
```
-[The upstream documentation will always be more up to date](https://patroni.readthedocs.io/en/latest/SETTINGS.html#postgresql), but the table below should provide a minimal overview of functionality.
+[The upstream documentation is always more up to date](https://patroni.readthedocs.io/en/latest/SETTINGS.html#postgresql), but the table below should provide a minimal overview of functionality.
|Setting|Overview|
|-|-|
@@ -868,11 +922,11 @@ patroni['remove_data_directory_on_diverged_timelines'] = false
### Database authorization for Patroni
-Patroni uses Unix socket to manage PostgreSQL instance. Therefore, the connection from the `local` socket must be trusted.
+Patroni uses a Unix socket to manage the PostgreSQL instance. Therefore, a connection from the `local` socket must be trusted.
Also, replicas use the replication user (`gitlab_replicator` by default) to communicate with the leader. For this user,
you can choose between `trust` and `md5` authentication. If you set `postgresql['sql_replication_password']`,
-Patroni will use `md5` authentication, otherwise it falls back to `trust`. You must to specify the cluster CIDR in
+Patroni uses `md5` authentication, and otherwise falls back to `trust`. You must to specify the cluster CIDR in
`postgresql['md5_auth_cidr_addresses']` or `postgresql['trust_auth_cidr_addresses']` respectively.
### Interacting with Patroni cluster
@@ -881,18 +935,14 @@ You can use `gitlab-ctl patroni members` to check the status of the cluster memb
`gitlab-ctl patroni` provides two additional sub-commands, `check-leader` and `check-replica` which indicate if a node
is the primary or a replica.
-When Patroni is enabled, you don't have direct control over `postgresql` service. Patroni will signal PostgreSQL's startup,
-shutdown, and restart. For example, for shutting down PostgreSQL on a node, you must shutdown Patroni on the same node
-with:
+When Patroni is enabled, it exclusively controls PostgreSQL's startup,
+shutdown, and restart. This means, to shut down PostgreSQL on a certain node you must shutdown Patroni on the same node with:
```shell
sudo gitlab-ctl stop patroni
```
-Note that stopping or restarting Patroni service on the leader node will trigger the automatic failover. If you
-want to signal Patroni to reload its configuration or restart PostgreSQL process without triggering the failover, you
-must use the `reload` or `restart` sub-commands of `gitlab-ctl patroni` instead. These two sub-commands are wrappers of
-the same `patronictl` commands.
+Stopping or restarting the Patroni service on the leader node triggers an automatic failover. If you need Patroni to reload its configuration or restart the PostgreSQL process without triggering the failover, you must use the `reload` or `restart` sub-commands of `gitlab-ctl patroni` instead. These two sub-commands are wrappers of the same `patronictl` commands.
### Manual failover procedure for Patroni
@@ -918,17 +968,17 @@ For further details on this subject, see the
#### Geo secondary site considerations
-When a Geo secondary site is replicating from a primary site that uses `Patroni` and `PgBouncer`, [replicating through PgBouncer is not supported](https://github.com/pgbouncer/pgbouncer/issues/382#issuecomment-517911529) and the secondary must replicate directly from the leader node in the `Patroni` cluster. Therefore, when there is an automatic or manual failover in the `Patroni` cluster, you will need to manually re-point your secondary site to replicate from the new leader with:
+When a Geo secondary site is replicating from a primary site that uses `Patroni` and `PgBouncer`, [replicating through PgBouncer is not supported](https://github.com/pgbouncer/pgbouncer/issues/382#issuecomment-517911529). The secondary *must* replicate directly from the leader node in the `Patroni` cluster. When there is an automatic or manual failover in the `Patroni` cluster, you can manually re-point your secondary site to replicate from the new leader with:
```shell
sudo gitlab-ctl replicate-geo-database --host=<new_leader_ip> --replication-slot=<slot_name>
```
-Otherwise, the replication will not happen anymore, even if the original node gets re-added as a follower node. This will re-sync your secondary site database and may take a long time depending on the amount of data to sync. You may also need to run `gitlab-ctl reconfigure` if replication is still not working after re-syncing.
+Otherwise, the replication will not happen, even if the original node gets re-added as a follower node. This re-syncs your secondary site database and may take a long time depending on the amount of data to sync. You may also need to run `gitlab-ctl reconfigure` if replication is still not working after re-syncing.
### Recovering the Patroni cluster
-To recover the old primary and rejoin it to the cluster as a replica, you can simply start Patroni with:
+To recover the old primary and rejoin it to the cluster as a replica, you can start Patroni with:
```shell
sudo gitlab-ctl start patroni
@@ -938,14 +988,13 @@ No further configuration or intervention is needed.
### Maintenance procedure for Patroni
-With Patroni enabled, you can run a planned maintenance. If you want to do some maintenance work on one node and you
-don't want Patroni to manage it, you can use put it into maintenance mode:
+With Patroni enabled, you can run planned maintenance on your nodes. To perform maintenance on one node without Patroni, you can put it into maintenance mode with:
```shell
sudo gitlab-ctl patroni pause
```
-When Patroni runs in a paused mode, it does not change the state of PostgreSQL. Once you are done you can resume Patroni:
+When Patroni runs in a paused mode, it does not change the state of PostgreSQL. After you are done, you can resume Patroni:
```shell
sudo gitlab-ctl patroni resume
@@ -956,9 +1005,7 @@ For further details, see [Patroni documentation on this subject](https://patroni
### Switching from repmgr to Patroni
WARNING:
-Although switching from repmgr to Patroni is fairly straightforward the other way around is not. Rolling back from
-Patroni to repmgr can be complicated and may involve deletion of data directory. If you need to do that, please contact
-GitLab support.
+Switching from repmgr to Patroni is straightforward, the other way around is *not*. Rolling back from Patroni to repmgr can be complicated and may involve deletion of data directory. If you need to do that, please contact GitLab support.
You can switch an exiting database cluster to use Patroni instead of repmgr with the following steps:
@@ -989,7 +1036,7 @@ You can switch an exiting database cluster to use Patroni instead of repmgr with
1. Repeat the last two steps for all replica nodes. `gitlab.rb` should look the same on all nodes.
1. If present, remove the `gitlab_repmgr` database and role on the primary. If you don't delete the `gitlab_repmgr`
- database, upgrading PostgreSQL 11 to 12 will fail with:
+ database, upgrading PostgreSQL 11 to 12 fails with:
```plaintext
could not load library "$libdir/repmgr_funcs": ERROR: could not access file "$libdir/repmgr_funcs": No such file or directory
@@ -997,9 +1044,7 @@ You can switch an exiting database cluster to use Patroni instead of repmgr with
### Upgrading PostgreSQL major version in a Patroni cluster
-As of GitLab 13.3, PostgreSQL 11.7 and 12.3 are both shipped with Omnibus GitLab, and as of GitLab 13.7
-PostgreSQL 12 is used by default. If you want to upgrade to PostgreSQL 12 in versions prior to GitLab 13.7,
-you must ask for it explicitly.
+As of GitLab 13.3, PostgreSQL 11.7 and 12.3 are both shipped with Omnibus GitLab by default. As of GitLab 13.7, PostgreSQL 12 is the default. If you want to upgrade to PostgreSQL 12 in versions prior to GitLab 13.7, you must ask for it explicitly.
WARNING:
The procedure for upgrading PostgreSQL in a Patroni cluster is different than when upgrading using repmgr.
@@ -1008,20 +1053,16 @@ upgrading PostgreSQL.
Here are a few key facts that you must consider before upgrading PostgreSQL:
-- The main point is that you will have to **shut down the Patroni cluster**. This means that your
+- The main point is that you have to **shut down the Patroni cluster**. This means that your
GitLab deployment is down for the duration of database upgrade or, at least, as long as your leader
node is upgraded. This can be **a significant downtime depending on the size of your database**.
-- Upgrading PostgreSQL creates a new data directory with a new control data. From Patroni's perspective
- this is a new cluster that needs to be bootstrapped again. Therefore, as part of the upgrade procedure,
- the cluster state (stored in Consul) is wiped out. Once the upgrade is completed, Patroni
- bootstraps a new cluster. **Note that this changes your _cluster ID_**.
+- Upgrading PostgreSQL creates a new data directory with a new control data. From Patroni's perspective this is a new cluster that needs to be bootstrapped again. Therefore, as part of the upgrade procedure, the cluster state (stored in Consul) is wiped out. After the upgrade is complete, Patroni bootstraps a new cluster. **This changes your _cluster ID_**.
-- The procedures for upgrading leader and replicas are not the same. That is why it is important to use the
- right procedure on each node.
+- The procedures for upgrading leader and replicas are not the same. That is why it is important to use the right procedure on each node.
- Upgrading a replica node **deletes the data directory and resynchronizes it** from the leader using the
- configured replication method (currently `pg_basebackup` is the only available option). It might take some
+ configured replication method (`pg_basebackup` is the only available option). It might take some
time for replica to catch up with the leader, depending on the size of your database.
- An overview of the upgrade procedure is outlined in [Patoni's documentation](https://patroni.readthedocs.io/en/latest/existing_data.html#major-upgrade-of-postgresql-version).
@@ -1036,9 +1077,7 @@ Considering these, you should carefully plan your PostgreSQL upgrade:
```
NOTE:
- `gitlab-ctl pg-upgrade` tries to detect the role of the node. If for any reason the auto-detection
- does not work or you believe it did not detect the role correctly, you can use the `--leader` or `--replica`
- arguments to manually override it.
+ `gitlab-ctl pg-upgrade` tries to detect the role of the node. If for any reason the auto-detection does not work or you believe it did not detect the role correctly, you can use the `--leader` or `--replica` arguments to manually override it.
1. Stop Patroni **only on replicas**.
@@ -1081,7 +1120,7 @@ Considering these, you should carefully plan your PostgreSQL upgrade:
```
NOTE:
-Reverting PostgreSQL upgrade with `gitlab-ctl revert-pg-upgrade` has the same considerations as
+Reverting the PostgreSQL upgrade with `gitlab-ctl revert-pg-upgrade` has the same considerations as
`gitlab-ctl pg-upgrade`. You should follow the same procedure by first stopping the replicas,
then reverting the leader, and finally reverting the replicas.
@@ -1089,11 +1128,11 @@ then reverting the leader, and finally reverting the replicas.
### Consul and PostgreSQL changes not taking effect
-Due to the potential impacts, `gitlab-ctl reconfigure` only reloads Consul and PostgreSQL, it will not restart the services. However, not all changes can be activated by reloading.
+Due to the potential impacts, `gitlab-ctl reconfigure` only reloads Consul and PostgreSQL, it does not restart the services. However, not all changes can be activated by reloading.
To restart either service, run `gitlab-ctl restart SERVICE`
-For PostgreSQL, it is usually safe to restart the master node by default. Automatic failover defaults to a 1 minute timeout. Provided the database returns before then, nothing else needs to be done.
+For PostgreSQL, it is usually safe to restart the leader node by default. Automatic failover defaults to a 1 minute timeout. Provided the database returns before then, nothing else needs to be done.
On the Consul server nodes, it is important to [restart the Consul service](../consul.md#restart-consul) in a controlled manner.
@@ -1109,7 +1148,7 @@ PG::ConnectionBad: ERROR: pgbouncer cannot connect to server
The problem may be that your PgBouncer node's IP address is not included in the
`trust_auth_cidr_addresses` setting in `/etc/gitlab/gitlab.rb` on the database nodes.
-You can confirm that this is the issue by checking the PostgreSQL log on the master
+You can confirm that this is the issue by checking the PostgreSQL log on the leader
database node. If you see the following error then `trust_auth_cidr_addresses`
is the problem.
@@ -1172,16 +1211,16 @@ To reset the Patroni state in Consul:
/opt/gitlab/embedded/bin/consul kv delete -recurse /service/postgresql-ha/
```
-1. Start one Patroni node, which will initialize the Patroni cluster and be elected as a leader.
+1. Start one Patroni node, which initializes the Patroni cluster to elect as a leader.
It's highly recommended to start the previous leader (noted in the first step),
- in order to not lose existing writes that may have not been replicated because
+ so as to not lose existing writes that may have not been replicated because
of the broken cluster state:
```shell
sudo gitlab-ctl start patroni
```
-1. Start all other Patroni nodes that will join the Patroni cluster as replicas:
+1. Start all other Patroni nodes that join the Patroni cluster as replicas:
```shell
sudo gitlab-ctl start patroni
@@ -1238,9 +1277,7 @@ Traceback (most recent call last):
If the stack trace ends with `CFUNCTYPE(c_int)(lambda: None)`, this code triggers `MemoryError`
if the Linux server has been hardened for security.
-The code causes Python to write temporary executable files, and if it cannot find a filesystem
-in which to do this, for example if `noexec` is set on the `/tmp` filesystem, it fails with
-`MemoryError` ([read more in the issue](https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/6184)).
+The code causes Python to write temporary executable files, and if it cannot find a file system in which to do this. For example, if `noexec` is set on the `/tmp` file system, it fails with `MemoryError` ([read more in the issue](https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/6184)).
Workarounds:
@@ -1248,7 +1285,7 @@ Workarounds:
- If set to enforcing, SELinux may also prevent these operations. Verify the issue is fixed by setting
SELinux to permissive.
-Omnibus GitLab has shipped with Patroni since 13.1 along with a build of Python 3.7.
+Patroni has been shipping with Omnibus GitLab since 13.1, along with a build of Python 3.7.
Workarounds should stop being required when GitLab 14.x starts shipping with
[a later version of Python](https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/6164) as
the code which causes this was removed from Python 3.8.
diff --git a/doc/administration/raketasks/check.md b/doc/administration/raketasks/check.md
index bcc2f838565..56bf711f187 100644
--- a/doc/administration/raketasks/check.md
+++ b/doc/administration/raketasks/check.md
@@ -21,7 +21,7 @@ There are 3 things that are checked to determine integrity.
1. Check for `config.lock` in the repository directory.
1. Check for any branch/references lock files in `refs/heads`.
-It's important to note that the existence of `config.lock` or reference locks
+The existence of `config.lock` or reference locks
alone do not necessarily indicate a problem. Lock files are routinely created
and removed as Git and GitLab perform operations on the repository. They serve
to prevent data integrity issues. However, if a Git operation is interrupted these
diff --git a/doc/administration/raketasks/doctor.md b/doc/administration/raketasks/doctor.md
index ec3f7835b9c..02d1557b6a4 100644
--- a/doc/administration/raketasks/doctor.md
+++ b/doc/administration/raketasks/doctor.md
@@ -70,6 +70,7 @@ bundle exec rake gitlab:doctor:secrets RAILS_ENV=production VERBOSE=1
**Example verbose output**
<!-- vale gitlab.SentenceSpacing = NO -->
+
```plaintext
I, [2020-06-11T17:17:54.951815 #27148] INFO -- : Checking encrypted values in the database
I, [2020-06-11T17:18:12.677708 #27148] INFO -- : - ApplicationSetting failures: 0
@@ -83,4 +84,5 @@ I, [2020-06-11T17:18:15.575533 #27148] INFO -- : - ScimOauthAccessToken failure
I, [2020-06-11T17:18:15.575678 #27148] INFO -- : Total: 1 row(s) affected
I, [2020-06-11T17:18:15.575711 #27148] INFO -- : Done!
```
+
<!-- vale gitlab.SentenceSpacing = YES -->
diff --git a/doc/administration/raketasks/smtp.md b/doc/administration/raketasks/smtp.md
new file mode 100644
index 00000000000..c738f1dcd00
--- /dev/null
+++ b/doc/administration/raketasks/smtp.md
@@ -0,0 +1,103 @@
+---
+stage: Enablement
+group: Distribution
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# SMTP Rake tasks **(FREE SELF)**
+
+[Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/67802) in GitLab 14.2.
+
+The following are SMTP-related Rake tasks.
+
+## Secrets
+
+GitLab can use SMTP configuration secrets to read from an encrypted file. The following Rake tasks are provided for updating the contents of the encrypted file.
+
+### Show secret
+
+Show the contents of the current SMTP secrets.
+
+**Omnibus Installation**
+
+```shell
+sudo gitlab-rake gitlab:smtp:secret:show
+```
+
+**Source Installation**
+
+```shell
+bundle exec rake gitlab:smtp:secret:show RAILS_ENV=production
+```
+
+**Example output:**
+
+```plaintext
+password: '123'
+user_name: 'gitlab-inst'
+```
+
+### Edit secret
+
+Opens the secret contents in your editor, and writes the resulting content to the encrypted secret file when you exit.
+
+**Omnibus Installation**
+
+```shell
+sudo gitlab-rake gitlab:smtp:secret:edit EDITOR=vim
+```
+
+**Source Installation**
+
+```shell
+bundle exec rake gitlab:smtp:secret:edit RAILS_ENV=production EDITOR=vim
+```
+
+### Write raw secret
+
+Write new secret content by providing it on STDIN.
+
+**Omnibus Installation**
+
+```shell
+echo -e "password: '123'" | sudo gitlab-rake gitlab:smtp:secret:write
+```
+
+**Source Installation**
+
+```shell
+echo -e "password: '123'" | bundle exec rake gitlab:smtp:secret:write RAILS_ENV=production
+```
+
+### Secrets examples
+
+**Editor example**
+
+The write task can be used in cases where the edit command does not work with your editor:
+
+```shell
+# Write the existing secret to a plaintext file
+sudo gitlab-rake gitlab:smtp:secret:show > smtp.yaml
+# Edit the smtp file in your editor
+...
+# Re-encrypt the file
+cat smtp.yaml | sudo gitlab-rake gitlab:smtp:secret:write
+# Remove the plaintext file
+rm smtp.yaml
+```
+
+**KMS integration example**
+
+It can also be used as a receiving application for content encrypted with a KMS:
+
+```shell
+gcloud kms decrypt --key my-key --keyring my-test-kms --plaintext-file=- --ciphertext-file=my-file --location=us-west1 | sudo gitlab-rake gitlab:smtp:secret:write
+```
+
+**Google Cloud secret integration example**
+
+It can also be used as a receiving application for secrets out of Google Cloud:
+
+```shell
+gcloud secrets versions access latest --secret="my-test-secret" > $1 | sudo gitlab-rake gitlab:smtp:secret:write
+```
diff --git a/doc/administration/raketasks/uploads/migrate.md b/doc/administration/raketasks/uploads/migrate.md
index ab0a51ba8d6..0628e351b63 100644
--- a/doc/administration/raketasks/uploads/migrate.md
+++ b/doc/administration/raketasks/uploads/migrate.md
@@ -133,9 +133,9 @@ migrate your data out of object storage and back into your local storage.
WARNING:
**Extended downtime is required** so no new files are created in object storage during
-the migration. A configuration setting is planned to allow migrating
-from object storage to local files with only a brief moment of downtime for configuration changes.
-To follow progress, see the [relevant issue](https://gitlab.com/gitlab-org/gitlab/-/issues/30979).
+the migration. A configuration setting to allow migrating
+from object storage to local files with only a brief moment of downtime for configuration changes
+is tracked [in this issue](https://gitlab.com/gitlab-org/gitlab/-/issues/30979).
### All-in-one Rake task
diff --git a/doc/administration/read_only_gitlab.md b/doc/administration/read_only_gitlab.md
index c8931eb79df..cf45d3e15cf 100644
--- a/doc/administration/read_only_gitlab.md
+++ b/doc/administration/read_only_gitlab.md
@@ -76,7 +76,7 @@ the database is read-only:
-h /var/opt/gitlab/postgresql gitlabhq_production
```
-1. Create the `gitlab_read_only` user. Note that the password is set to `mypassword`,
+1. Create the `gitlab_read_only` user. The password is set to `mypassword`,
change that to your liking:
```sql
diff --git a/doc/administration/redis/replication_and_failover.md b/doc/administration/redis/replication_and_failover.md
index 37d586b1d32..48db734b1af 100644
--- a/doc/administration/redis/replication_and_failover.md
+++ b/doc/administration/redis/replication_and_failover.md
@@ -106,7 +106,7 @@ is not initiated.
As an example, if you have `6` Redis nodes, a maximum of `3` can be
simultaneously down.
-Please note that there are different requirements for Sentinel nodes.
+There are different requirements for Sentinel nodes.
If you host them in the same Redis machines, you may need to take
that restrictions into consideration when calculating the amount of
nodes to be provisioned. See [Sentinel setup overview](#sentinel-setup-overview)
@@ -539,7 +539,7 @@ Here is a list and description of each **machine** and the assigned **IP**:
- `10.0.0.3`: Redis Replica 2 + Sentinel 3
- `10.0.0.4`: GitLab application
-Please note that after the initial configuration, if a failover is initiated
+After the initial configuration, if a failover is initiated
by the Sentinel nodes, the Redis nodes are reconfigured and the **Primary**
changes permanently (including in `redis.conf`) from one node to the other,
until a new failover is initiated again.
@@ -683,8 +683,6 @@ To make this work with Sentinel:
]
```
- Note that:
-
- Redis URLs should be in the format: `redis://:PASSWORD@SENTINEL_PRIMARY_NAME`, where:
- `PASSWORD` is the plaintext password for the Redis instance.
- `SENTINEL_PRIMARY_NAME` is the Sentinel primary name set with `redis['master_name']`,
@@ -731,7 +729,7 @@ redis_master_role['enable'] = true # enable only one of them
redis_replica_role['enable'] = true # enable only one of them
# When Redis primary or Replica role are enabled, the following services are
-# enabled/disabled. Note that if Redis and Sentinel roles are combined, both
+# enabled/disabled. If Redis and Sentinel roles are combined, both
# services are enabled.
# The following services are disabled
diff --git a/doc/administration/redis/replication_and_failover_external.md b/doc/administration/redis/replication_and_failover_external.md
index 65ec8eb50e5..234b1aa7fb9 100644
--- a/doc/administration/redis/replication_and_failover_external.md
+++ b/doc/administration/redis/replication_and_failover_external.md
@@ -260,7 +260,7 @@ Here is a list and description of each **machine** and the assigned **IP**:
- `10.0.0.3`: Redis Replica 2 + Sentinel 3
- `10.0.0.4`: GitLab application
-Please note that after the initial configuration, if a failover is initiated
+After the initial configuration, if a failover is initiated
by the Sentinel nodes, the Redis nodes are reconfigured and the **Primary**
changes permanently (including in `redis.conf`) from one node to the other,
until a new failover is initiated again.
diff --git a/doc/administration/reference_architectures/10k_users.md b/doc/administration/reference_architectures/10k_users.md
index 1fc3483fbd4..f9397e6dbca 100644
--- a/doc/administration/reference_architectures/10k_users.md
+++ b/doc/administration/reference_architectures/10k_users.md
@@ -1,5 +1,4 @@
---
-reading_time: true
stage: Enablement
group: Distribution
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
@@ -14,33 +13,34 @@ full list of reference architectures, see
> - **Supported users (approximate):** 10,000
> - **High Availability:** Yes ([Praefect](#configure-praefect-postgresql) needs a third-party PostgreSQL solution for HA)
> - **Test requests per second (RPS) rates:** API: 200 RPS, Web: 20 RPS, Git (Pull): 20 RPS, Git (Push): 4 RPS
-
-| Service | Nodes | Configuration | GCP | AWS | Azure |
-|--------------------------------------------|-------------|-------------------------|------------------|--------------|-----------|
-| External load balancing node(3) | 1 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
-| Consul(1) | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
-| PostgreSQL(1) | 3 | 8 vCPU, 30 GB memory | `n1-standard-8` | `m5.2xlarge` | `D8s v3` |
-| PgBouncer(1) | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
-| Internal load balancing node(3) | 1 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
-| Redis - Cache(2) | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
-| Redis - Queues / Shared State(2) | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
-| Redis Sentinel - Cache(2) | 3 | 1 vCPU, 3.75 GB memory | `n1-standard-1` | `c5.large` | `A1 v2` |
-| Redis Sentinel - Queues / Shared State(2) | 3 | 1 vCPU, 3.75 GB memory | `n1-standard-1` | `c5.large` | `A1 v2` |
-| Gitaly | 3 | 16 vCPU, 60 GB memory | `n1-standard-16` | `m5.4xlarge` | `D16s v3` |
-| Praefect | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
-| Praefect PostgreSQL(1) | 1+ | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
-| Sidekiq | 4 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
-| GitLab Rails | 3 | 32 vCPU, 28.8 GB memory | `n1-highcpu-32` | `c5.9xlarge` | `F32s v2` |
-| Monitoring node | 1 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
-| Object storage(4) | n/a | n/a | n/a | n/a | n/a |
-| NFS server (optional, not recommended) | 1 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
+> - **[Latest 10k weekly performance testing results](https://gitlab.com/gitlab-org/quality/performance/-/wikis/Benchmarks/Latest/10k)**
+
+| Service | Nodes | Configuration | GCP | AWS | Azure |
+|-----------------------------------------------------|-------------|-------------------------|------------------|--------------|-----------|
+| External load balancing node<sup>3</sup> | 1 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
+| Consul<sup>1</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
+| PostgreSQL<sup>1</sup> | 3 | 8 vCPU, 30 GB memory | `n1-standard-8` | `m5.2xlarge` | `D8s v3` |
+| PgBouncer<sup>1</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
+| Internal load balancing node<sup>3</sup> | 1 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
+| Redis - Cache<sup>2</sup> | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
+| Redis - Queues / Shared State<sup>2</sup> | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
+| Redis Sentinel - Cache<sup>2</sup> | 3 | 1 vCPU, 3.75 GB memory | `n1-standard-1` | `c5.large` | `A1 v2` |
+| Redis Sentinel - Queues / Shared State<sup>2</sup> | 3 | 1 vCPU, 3.75 GB memory | `n1-standard-1` | `c5.large` | `A1 v2` |
+| Gitaly | 3 | 16 vCPU, 60 GB memory | `n1-standard-16` | `m5.4xlarge` | `D16s v3` |
+| Praefect | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
+| Praefect PostgreSQL<sup>1</sup> | 1+ | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
+| Sidekiq | 4 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
+| GitLab Rails | 3 | 32 vCPU, 28.8 GB memory | `n1-highcpu-32` | `c5.9xlarge` | `F32s v2` |
+| Monitoring node | 1 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
+| Object storage<sup>4</sup> | n/a | n/a | n/a | n/a | n/a |
+| NFS server (optional, not recommended) | 1 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
<!-- Disable ordered list rule https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md029---ordered-list-item-prefix -->
<!-- markdownlint-disable MD029 -->
1. Can be optionally run on reputable third-party external PaaS PostgreSQL solutions. Google Cloud SQL and AWS RDS are known to work, however Azure Database for PostgreSQL is [not recommended](https://gitlab.com/gitlab-org/quality/reference-architectures/-/issues/61) due to performance issues. Consul is primarily used for PostgreSQL high availability so can be ignored when using a PostgreSQL PaaS setup. However it is also used optionally by Prometheus for Omnibus auto host discovery.
2. Can be optionally run on reputable third-party external PaaS Redis solutions. Google Memorystore and AWS Elasticache are known to work.
3. Can be optionally run on reputable third-party load balancing services (LB PaaS). AWS ELB is known to work.
-4. Should be run on reputable third party object storage (storage PaaS) for cloud implementations. Google Cloud Storage and AWS S3 are known to work.
+4. Should be run on reputable third-party object storage (storage PaaS) for cloud implementations. Google Cloud Storage and AWS S3 are known to work.
<!-- markdownlint-enable MD029 -->
NOTE:
@@ -141,7 +141,7 @@ is recommended instead of using NFS. Using an object storage service also
doesn't require you to provision and maintain a node.
It's also worth noting that at this time [Praefect requires its own database server](../gitaly/praefect.md#postgresql) and
-that to achieve full High Availability a third party PostgreSQL database solution will be required.
+that to achieve full High Availability a third-party PostgreSQL database solution will be required.
We hope to offer a built in solutions for these restrictions in the future but in the meantime a non HA PostgreSQL server
can be set up via Omnibus GitLab, which the above specs reflect. Refer to the following issues for more information: [`omnibus-gitlab#5919`](https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/5919) & [`gitaly#3398`](https://gitlab.com/gitlab-org/gitaly/-/issues/3398)
@@ -345,7 +345,7 @@ Configure DNS for an alternate SSH hostname such as `altssh.gitlab.example.com`.
The Internal Load Balancer is used to balance any internal connections the GitLab environment requires
such as connections to [PgBouncer](#configure-pgbouncer) and [Praefect](#configure-praefect) (Gitaly Cluster).
-Note that it's a separate node from the External Load Balancer and shouldn't have any access externally.
+It's a separate node from the External Load Balancer and shouldn't have any access externally.
The following IP will be used as an example:
@@ -569,12 +569,12 @@ in the second step, do not supply the `EXTERNAL_URL` value.
# Sets `max_replication_slots` to double the number of database nodes.
# Patroni uses one extra slot per node when initiating the replication.
- patroni['postgresql']['max_replication_slots'] = 8
+ patroni['postgresql']['max_replication_slots'] = 6
# Set `max_wal_senders` to one more than the number of replication slots in the cluster.
# This is used to prevent replication from using up all of the
# available database connections.
- patroni['postgresql']['max_wal_senders'] = 9
+ patroni['postgresql']['max_wal_senders'] = 7
# Incoming recommended value for max connections is 500. See https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/5691.
patroni['postgresql']['max_connections'] = 500
@@ -601,7 +601,10 @@ in the second step, do not supply the `EXTERNAL_URL` value.
patroni['username'] = '<patroni_api_username>'
patroni['password'] = '<patroni_api_password>'
- # Replace XXX.XXX.XXX.XXX/YY with Network Address
+ # Replace 10.6.0.0/24 with Network Addresses for your other patroni nodes
+ patroni['allowlist'] = %w(10.6.0.0/24 127.0.0.1/32)
+
+ # Replace 10.6.0.0/24 with Network Address
postgresql['trust_auth_cidr_addresses'] = %w(10.6.0.0/24 127.0.0.1/32)
# Set the network addresses that the exporters will listen on for monitoring
@@ -2368,7 +2371,7 @@ in Kubernetes via our official [Helm Charts](https://docs.gitlab.com/charts/).
In this setup, we support running the equivalent of GitLab Rails and Sidekiq nodes
in a Kubernetes cluster, named Webservice and Sidekiq respectively. In addition,
the following other supporting services are supported: NGINX, Task Runner, Migrations,
-Prometheus and Grafana.
+Prometheus, and Grafana.
Hybrid installations leverage the benefits of both cloud native and traditional
compute deployments. With this, _stateless_ components can benefit from cloud native
@@ -2379,23 +2382,23 @@ NOTE:
This is an **advanced** setup. Running services in Kubernetes is well known
to be complex. **This setup is only recommended** if you have strong working
knowledge and experience in Kubernetes. The rest of this
-section will assume this.
+section assumes this.
### Cluster topology
-The following tables and diagram details the hybrid environment using the same formats
+The following tables and diagram detail the hybrid environment using the same formats
as the normal environment above.
-First starting with the components that run in Kubernetes. The recommendations at this
-time use Google Cloud’s Kubernetes Engine (GKE) and associated machine types, but the memory
+First are the components that run in Kubernetes. The recommendation at this time is to
+use Google Cloud’s Kubernetes Engine (GKE) and associated machine types, but the memory
and CPU requirements should translate to most other providers. We hope to update this in the
future with further specific cloud provider details.
-| Service | Nodes(1) | Configuration | GCP | Allocatable CPUs and Memory |
-|-------------------------------------------------------|----------|-------------------------|------------------|-----------------------------|
-| Webservice | 4 | 32 vCPU, 28.8 GB memory | `n1-highcpu-32` | 127.5 vCPU, 118 GB memory |
-| Sidekiq | 4 | 4 vCPU, 15 GB memory | `n1-standard-4` | 15.5 vCPU, 50 GB memory |
-| Supporting services such as NGINX or Prometheus | 2 | 4 vCPU, 15 GB memory | `n1-standard-4` | 7.75 vCPU, 25 GB memory |
+| Service | Nodes<sup>1</sup> | Configuration | GCP | Allocatable CPUs and Memory |
+|-------------------------------------------------------|-------------------|-------------------------|------------------|-----------------------------|
+| Webservice | 4 | 32 vCPU, 28.8 GB memory | `n1-highcpu-32` | 127.5 vCPU, 118 GB memory |
+| Sidekiq | 4 | 4 vCPU, 15 GB memory | `n1-standard-4` | 15.5 vCPU, 50 GB memory |
+| Supporting services such as NGINX, Prometheus | 2 | 4 vCPU, 15 GB memory | `n1-standard-4` | 7.75 vCPU, 25 GB memory |
<!-- Disable ordered list rule https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md029---ordered-list-item-prefix -->
<!-- markdownlint-disable MD029 -->
@@ -2406,27 +2409,27 @@ future with further specific cloud provider details.
Next are the backend components that run on static compute VMs via Omnibus (or External PaaS
services where applicable):
-| Service | Nodes | Configuration | GCP |
-|--------------------------------------------|-------|-------------------------|------------------|
-| Consul(1) | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
-| PostgreSQL(1) | 3 | 8 vCPU, 30 GB memory | `n1-standard-8` |
-| PgBouncer(1) | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
-| Internal load balancing node(3) | 1 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
-| Redis - Cache(2) | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` |
-| Redis - Queues / Shared State(2) | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` |
-| Redis Sentinel - Cache(2) | 3 | 1 vCPU, 3.75 GB memory | `n1-standard-1` |
-| Redis Sentinel - Queues / Shared State(2) | 3 | 1 vCPU, 3.75 GB memory | `n1-standard-1` |
-| Gitaly | 3 | 16 vCPU, 60 GB memory | `n1-standard-16` |
-| Praefect | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
-| Praefect PostgreSQL(1) | 1+ | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
-| Object storage(4) | n/a | n/a | n/a |
+| Service | Nodes | Configuration | GCP |
+|-----------------------------------------------------|-------|-------------------------|------------------|
+| Consul<sup>1</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
+| PostgreSQL<sup>1</sup> | 3 | 8 vCPU, 30 GB memory | `n1-standard-8` |
+| PgBouncer<sup>1</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
+| Internal load balancing node<sup>3</sup> | 1 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
+| Redis - Cache<sup>2</sup> | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` |
+| Redis - Queues / Shared State<sup>2</sup> | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` |
+| Redis Sentinel - Cache<sup>2</sup> | 3 | 1 vCPU, 3.75 GB memory | `n1-standard-1` |
+| Redis Sentinel - Queues / Shared State<sup>2</sup> | 3 | 1 vCPU, 3.75 GB memory | `n1-standard-1` |
+| Gitaly | 3 | 16 vCPU, 60 GB memory | `n1-standard-16` |
+| Praefect | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
+| Praefect PostgreSQL<sup>1</sup> | 1+ | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
+| Object storage<sup>4</sup> | n/a | n/a | n/a |
<!-- Disable ordered list rule https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md029---ordered-list-item-prefix -->
<!-- markdownlint-disable MD029 -->
1. Can be optionally run on reputable third-party external PaaS PostgreSQL solutions. Google Cloud SQL and AWS RDS are known to work, however Azure Database for PostgreSQL is [not recommended](https://gitlab.com/gitlab-org/quality/reference-architectures/-/issues/61) due to performance issues. Consul is primarily used for PostgreSQL high availability so can be ignored when using a PostgreSQL PaaS setup. However it is also used optionally by Prometheus for Omnibus auto host discovery.
2. Can be optionally run on reputable third-party external PaaS Redis solutions. Google Memorystore and AWS Elasticache are known to work.
3. Can be optionally run on reputable third-party load balancing services (LB PaaS). AWS ELB is known to work.
-4. Should be run on reputable third party object storage (storage PaaS) for cloud implementations. Google Cloud Storage and AWS S3 are known to work.
+4. Should be run on reputable third-party object storage (storage PaaS) for cloud implementations. Google Cloud Storage and AWS S3 are known to work.
<!-- markdownlint-enable MD029 -->
NOTE:
@@ -2520,11 +2523,11 @@ documents how to apply the calculated configuration to the Helm Chart.
#### Webservice
Webservice pods typically need about 1 vCPU and 1.25 GB of memory _per worker_.
-Each Webservice pod will consume roughly 4 vCPUs and 5 GB of memory using
+Each Webservice pod consumes roughly 4 vCPUs and 5 GB of memory using
the [recommended topology](#cluster-topology) because four worker processes
are created by default and each pod has other small processes running.
-For 10k users we recommend a total Puma worker count of around 80.
+For 10,000 users we recommend a total Puma worker count of around 80.
With the [provided recommendations](#cluster-topology) this allows the deployment of up to 20
Webservice pods with 4 workers per pod and 5 pods per node. Expand available resources using
the ratio of 1 vCPU to 1.25 GB of memory _per each worker process_ for each additional
diff --git a/doc/administration/reference_architectures/1k_users.md b/doc/administration/reference_architectures/1k_users.md
index 6ad4e0f05e3..18e34711953 100644
--- a/doc/administration/reference_architectures/1k_users.md
+++ b/doc/administration/reference_architectures/1k_users.md
@@ -19,6 +19,7 @@ many organizations .
> - **High Availability:** No. For a highly-available environment, you can
> follow a modified [3K reference architecture](3k_users.md#supported-modifications-for-lower-user-counts-ha).
> - **Test requests per second (RPS) rates:** API: 20 RPS, Web: 2 RPS, Git (Pull): 2 RPS, Git (Push): 1 RPS
+> - **[Latest 1k weekly performance testing results](https://gitlab.com/gitlab-org/quality/performance/-/wikis/Benchmarks/Latest/1k)**
| Users | Configuration | GCP | AWS | Azure |
|--------------|-------------------------|----------------|--------------|----------|
diff --git a/doc/administration/reference_architectures/25k_users.md b/doc/administration/reference_architectures/25k_users.md
index e45a8f6963c..65d59422da8 100644
--- a/doc/administration/reference_architectures/25k_users.md
+++ b/doc/administration/reference_architectures/25k_users.md
@@ -1,5 +1,4 @@
---
-reading_time: true
stage: Enablement
group: Distribution
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
@@ -14,33 +13,34 @@ full list of reference architectures, see
> - **Supported users (approximate):** 25,000
> - **High Availability:** Yes ([Praefect](#configure-praefect-postgresql) needs a third-party PostgreSQL solution for HA)
> - **Test requests per second (RPS) rates:** API: 500 RPS, Web: 50 RPS, Git (Pull): 50 RPS, Git (Push): 10 RPS
-
-| Service | Nodes | Configuration | GCP | AWS | Azure |
-|------------------------------------------|-------------|-------------------------|------------------|--------------|-----------|
-| External load balancing node(3) | 1 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
-| Consul(1) | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
-| PostgreSQL(1) | 3 | 16 vCPU, 60 GB memory | `n1-standard-16` | `m5.4xlarge` | `D16s v3` |
-| PgBouncer(1) | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
-| Internal load balancing node(3) | 1 | 4 vCPU, 3.6GB memory | `n1-highcpu-4` | `c5.large` | `F2s v2` |
-| Redis - Cache(2) | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
-| Redis - Queues / Shared State(2) | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
-| Redis Sentinel - Cache(2) | 3 | 1 vCPU, 3.75 GB memory | `n1-standard-1` | `c5.large` | `A1 v2` |
-| Redis Sentinel - Queues / Shared State(2)| 3 | 1 vCPU, 3.75 GB memory | `n1-standard-1` | `c5.large` | `A1 v2` |
-| Gitaly | 3 | 32 vCPU, 120 GB memory | `n1-standard-32` | `m5.8xlarge` | `D32s v3` |
-| Praefect | 3 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
-| Praefect PostgreSQL(1) | 1+ | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
-| Sidekiq | 4 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
-| GitLab Rails | 5 | 32 vCPU, 28.8 GB memory | `n1-highcpu-32` | `c5.9xlarge` | `F32s v2` |
-| Monitoring node | 1 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
-| Object storage(4) | n/a | n/a | n/a | n/a | n/a |
-| NFS server (optional, not recommended) | 1 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
+> - **[Latest 25k weekly performance testing results](https://gitlab.com/gitlab-org/quality/performance/-/wikis/Benchmarks/Latest/25k)**
+
+| Service | Nodes | Configuration | GCP | AWS | Azure |
+|---------------------------------------------------|-------------|-------------------------|------------------|--------------|-----------|
+| External load balancing node<sup>3</sup> | 1 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
+| Consul<sup>1</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
+| PostgreSQL<sup>1</sup> | 3 | 16 vCPU, 60 GB memory | `n1-standard-16` | `m5.4xlarge` | `D16s v3` |
+| PgBouncer<sup>1</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
+| Internal load balancing node<sup>3</sup> | 1 | 4 vCPU, 3.6GB memory | `n1-highcpu-4` | `c5.large` | `F2s v2` |
+| Redis - Cache<sup>2</sup> | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
+| Redis - Queues / Shared State<sup>2</sup> | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
+| Redis Sentinel - Cache<sup>2</sup> | 3 | 1 vCPU, 3.75 GB memory | `n1-standard-1` | `c5.large` | `A1 v2` |
+| Redis Sentinel - Queues / Shared State<sup>2</sup>| 3 | 1 vCPU, 3.75 GB memory | `n1-standard-1` | `c5.large` | `A1 v2` |
+| Gitaly | 3 | 32 vCPU, 120 GB memory | `n1-standard-32` | `m5.8xlarge` | `D32s v3` |
+| Praefect | 3 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
+| Praefect PostgreSQL<sup>1</sup> | 1+ | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
+| Sidekiq | 4 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
+| GitLab Rails | 5 | 32 vCPU, 28.8 GB memory | `n1-highcpu-32` | `c5.9xlarge` | `F32s v2` |
+| Monitoring node | 1 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
+| Object storage<sup>4</sup> | n/a | n/a | n/a | n/a | n/a |
+| NFS server (optional, not recommended) | 1 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
<!-- Disable ordered list rule https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md029---ordered-list-item-prefix -->
<!-- markdownlint-disable MD029 -->
1. Can be optionally run on reputable third-party external PaaS PostgreSQL solutions. Google Cloud SQL and AWS RDS are known to work, however Azure Database for PostgreSQL is [not recommended](https://gitlab.com/gitlab-org/quality/reference-architectures/-/issues/61) due to performance issues. Consul is primarily used for PostgreSQL high availability so can be ignored when using a PostgreSQL PaaS setup. However it is also used optionally by Prometheus for Omnibus auto host discovery.
2. Can be optionally run on reputable third-party external PaaS Redis solutions. Google Memorystore and AWS Elasticache are known to work.
3. Can be optionally run on reputable third-party load balancing services (LB PaaS). AWS ELB is known to work.
-4. Should be run on reputable third party object storage (storage PaaS) for cloud implementations. Google Cloud Storage and AWS S3 are known to work.
+4. Should be run on reputable third-party object storage (storage PaaS) for cloud implementations. Google Cloud Storage and AWS S3 are known to work.
<!-- markdownlint-enable MD029 -->
NOTE:
@@ -141,7 +141,7 @@ is recommended instead of using NFS. Using an object storage service also
doesn't require you to provision and maintain a node.
It's also worth noting that at this time [Praefect requires its own database server](../gitaly/praefect.md#postgresql) and
-that to achieve full High Availability a third party PostgreSQL database solution will be required.
+that to achieve full High Availability a third-party PostgreSQL database solution will be required.
We hope to offer a built in solutions for these restrictions in the future but in the meantime a non HA PostgreSQL server
can be set up via Omnibus GitLab, which the above specs reflect. Refer to the following issues for more information: [`omnibus-gitlab#5919`](https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/5919) & [`gitaly#3398`](https://gitlab.com/gitlab-org/gitaly/-/issues/3398)
@@ -347,7 +347,7 @@ Configure DNS for an alternate SSH hostname such as `altssh.gitlab.example.com`.
The Internal Load Balancer is used to balance any internal connections the GitLab environment requires
such as connections to [PgBouncer](#configure-pgbouncer) and [Praefect](#configure-praefect) (Gitaly Cluster).
-Note that it's a separate node from the External Load Balancer and shouldn't have any access externally.
+It's a separate node from the External Load Balancer and shouldn't have any access externally.
The following IP will be used as an example:
@@ -571,12 +571,12 @@ in the second step, do not supply the `EXTERNAL_URL` value.
# Sets `max_replication_slots` to double the number of database nodes.
# Patroni uses one extra slot per node when initiating the replication.
- patroni['postgresql']['max_replication_slots'] = 8
+ patroni['postgresql']['max_replication_slots'] = 6
# Set `max_wal_senders` to one more than the number of replication slots in the cluster.
# This is used to prevent replication from using up all of the
# available database connections.
- patroni['postgresql']['max_wal_senders'] = 9
+ patroni['postgresql']['max_wal_senders'] = 7
# Incoming recommended value for max connections is 500. See https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/5691.
patroni['postgresql']['max_connections'] = 500
@@ -603,7 +603,10 @@ in the second step, do not supply the `EXTERNAL_URL` value.
patroni['username'] = '<patroni_api_username>'
patroni['password'] = '<patroni_api_password>'
- # Replace XXX.XXX.XXX.XXX/YY with Network Address
+ # Replace 10.6.0.0/24 with Network Addresses for your other patroni nodes
+ patroni['allowlist'] = %w(10.6.0.0/24 127.0.0.1/32)
+
+ # Replace 10.6.0.0/24 with Network Address
postgresql['trust_auth_cidr_addresses'] = %w(10.6.0.0/24 127.0.0.1/32)
# Set the network addresses that the exporters will listen on for monitoring
@@ -2380,7 +2383,7 @@ in Kubernetes via our official [Helm Charts](https://docs.gitlab.com/charts/).
In this setup, we support running the equivalent of GitLab Rails and Sidekiq nodes
in a Kubernetes cluster, named Webservice and Sidekiq respectively. In addition,
the following other supporting services are supported: NGINX, Task Runner, Migrations,
-Prometheus and Grafana.
+Prometheus, and Grafana.
Hybrid installations leverage the benefits of both cloud native and traditional
compute deployments. With this, _stateless_ components can benefit from cloud native
@@ -2391,23 +2394,23 @@ NOTE:
This is an **advanced** setup. Running services in Kubernetes is well known
to be complex. **This setup is only recommended** if you have strong working
knowledge and experience in Kubernetes. The rest of this
-section will assume this.
+section assumes this.
### Cluster topology
-The following tables and diagram details the hybrid environment using the same formats
+The following tables and diagram detail the hybrid environment using the same formats
as the normal environment above.
-First starting with the components that run in Kubernetes. The recommendations at this
-time use Google Cloud’s Kubernetes Engine (GKE) and associated machine types, but the memory
+First are the components that run in Kubernetes. The recommendation at this time is to
+use Google Cloud’s Kubernetes Engine (GKE) and associated machine types, but the memory
and CPU requirements should translate to most other providers. We hope to update this in the
future with further specific cloud provider details.
-| Service | Nodes(1) | Configuration | GCP | Allocatable CPUs and Memory |
-|-------------------------------------------------------|----------|-------------------------|------------------|-----------------------------|
-| Webservice | 7 | 32 vCPU, 28.8 GB memory | `n1-highcpu-32` | 223 vCPU, 206.5 GB memory |
-| Sidekiq | 4 | 4 vCPU, 15 GB memory | `n1-standard-4` | 15.5 vCPU, 50 GB memory |
-| Supporting services such as NGINX, Prometheus, etc. | 2 | 4 vCPU, 15 GB memory | `n1-standard-4` | 7.75 vCPU, 25 GB memory |
+| Service | Nodes<sup>1</sup> | Configuration | GCP | Allocatable CPUs and Memory |
+|-------------------------------------------------------|-------------------|-------------------------|------------------|-----------------------------|
+| Webservice | 7 | 32 vCPU, 28.8 GB memory | `n1-highcpu-32` | 223 vCPU, 206.5 GB memory |
+| Sidekiq | 4 | 4 vCPU, 15 GB memory | `n1-standard-4` | 15.5 vCPU, 50 GB memory |
+| Supporting services such as NGINX, Prometheus | 2 | 4 vCPU, 15 GB memory | `n1-standard-4` | 7.75 vCPU, 25 GB memory |
<!-- Disable ordered list rule https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md029---ordered-list-item-prefix -->
<!-- markdownlint-disable MD029 -->
@@ -2418,27 +2421,27 @@ future with further specific cloud provider details.
Next are the backend components that run on static compute VMs via Omnibus (or External PaaS
services where applicable):
-| Service | Nodes | Configuration | GCP |
-|--------------------------------------------|-------|-------------------------|------------------|
-| Consul(1) | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
-| PostgreSQL(1) | 3 | 16 vCPU, 60 GB memory | `n1-standard-16` |
-| PgBouncer(1) | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
-| Internal load balancing node(3) | 1 | 4 vCPU, 3.6GB memory | `n1-highcpu-4` |
-| Redis - Cache(2) | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` |
-| Redis - Queues / Shared State(2) | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` |
-| Redis Sentinel - Cache(2) | 3 | 1 vCPU, 3.75 GB memory | `n1-standard-1` |
-| Redis Sentinel - Queues / Shared State(2) | 3 | 1 vCPU, 3.75 GB memory | `n1-standard-1` |
-| Gitaly | 3 | 32 vCPU, 120 GB memory | `n1-standard-32` |
-| Praefect | 3 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` |
-| Praefect PostgreSQL(1) | 1+ | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
-| Object storage(4) | n/a | n/a | n/a |
+| Service | Nodes | Configuration | GCP |
+|-----------------------------------------------------|-------|-------------------------|------------------|
+| Consul<sup>1</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
+| PostgreSQL<sup>1</sup> | 3 | 16 vCPU, 60 GB memory | `n1-standard-16` |
+| PgBouncer<sup>1</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
+| Internal load balancing node<sup>3</sup> | 1 | 4 vCPU, 3.6GB memory | `n1-highcpu-4` |
+| Redis - Cache<sup>2</sup> | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` |
+| Redis - Queues / Shared State<sup>2</sup> | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` |
+| Redis Sentinel - Cache<sup>2</sup> | 3 | 1 vCPU, 3.75 GB memory | `n1-standard-1` |
+| Redis Sentinel - Queues / Shared State<sup>2</sup> | 3 | 1 vCPU, 3.75 GB memory | `n1-standard-1` |
+| Gitaly | 3 | 32 vCPU, 120 GB memory | `n1-standard-32` |
+| Praefect | 3 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` |
+| Praefect PostgreSQL<sup>1</sup> | 1+ | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
+| Object storage<sup>4</sup> | n/a | n/a | n/a |
<!-- Disable ordered list rule https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md029---ordered-list-item-prefix -->
<!-- markdownlint-disable MD029 -->
1. Can be optionally run on reputable third-party external PaaS PostgreSQL solutions. Google Cloud SQL and AWS RDS are known to work, however Azure Database for PostgreSQL is [not recommended](https://gitlab.com/gitlab-org/quality/reference-architectures/-/issues/61) due to performance issues. Consul is primarily used for PostgreSQL high availability so can be ignored when using a PostgreSQL PaaS setup. However it is also used optionally by Prometheus for Omnibus auto host discovery.
2. Can be optionally run on reputable third-party external PaaS Redis solutions. Google Memorystore and AWS Elasticache are known to work.
3. Can be optionally run on reputable third-party load balancing services (LB PaaS). AWS ELB is known to work.
-4. Should be run on reputable third party object storage (storage PaaS) for cloud implementations. Google Cloud Storage and AWS S3 are known to work.
+4. Should be run on reputable third-party object storage (storage PaaS) for cloud implementations. Google Cloud Storage and AWS S3 are known to work.
<!-- markdownlint-enable MD029 -->
NOTE:
@@ -2532,11 +2535,11 @@ documents how to apply the calculated configuration to the Helm Chart.
#### Webservice
Webservice pods typically need about 1 vCPU and 1.25 GB of memory _per worker_.
-Each Webservice pod will consume roughly 4 vCPUs and 5 GB of memory using
+Each Webservice pod consumes roughly 4 vCPUs and 5 GB of memory using
the [recommended topology](#cluster-topology) because four worker processes
are created by default and each pod has other small processes running.
-For 25k users we recommend a total Puma worker count of around 140.
+For 25,000 users we recommend a total Puma worker count of around 140.
With the [provided recommendations](#cluster-topology) this allows the deployment of up to 35
Webservice pods with 4 workers per pod and 5 pods per node. Expand available resources using
the ratio of 1 vCPU to 1.25 GB of memory _per each worker process_ for each additional
diff --git a/doc/administration/reference_architectures/2k_users.md b/doc/administration/reference_architectures/2k_users.md
index ff3db877553..0af4dbc8a7f 100644
--- a/doc/administration/reference_architectures/2k_users.md
+++ b/doc/administration/reference_architectures/2k_users.md
@@ -1,5 +1,4 @@
---
-reading_time: true
stage: Enablement
group: Distribution
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
@@ -15,23 +14,24 @@ For a full list of reference architectures, see
> - **High Availability:** No. For a highly-available environment, you can
> follow a modified [3K reference architecture](3k_users.md#supported-modifications-for-lower-user-counts-ha).
> - **Test requests per second (RPS) rates:** API: 40 RPS, Web: 4 RPS, Git (Pull): 4 RPS, Git (Push): 1 RPS
+> - **[Latest 2k weekly performance testing results](https://gitlab.com/gitlab-org/quality/performance/-/wikis/Benchmarks/Latest/2k)**
| Service | Nodes | Configuration | GCP | AWS | Azure |
|------------------------------------------|--------|-------------------------|-----------------|--------------|----------|
-| Load balancer(3) | 1 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
-| PostgreSQL(1) | 1 | 2 vCPU, 7.5 GB memory | `n1-standard-2` | `m5.large` | `D2s v3` |
-| Redis(2) | 1 | 1 vCPU, 3.75 GB memory | `n1-standard-1` | `m5.large` | `D2s v3` |
+| Load balancer<sup>3</sup> | 1 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
+| PostgreSQL<sup>1</sup> | 1 | 2 vCPU, 7.5 GB memory | `n1-standard-2` | `m5.large` | `D2s v3` |
+| Redis<sup>2</sup> | 1 | 1 vCPU, 3.75 GB memory | `n1-standard-1` | `m5.large` | `D2s v3` |
| Gitaly | 1 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
| GitLab Rails | 2 | 8 vCPU, 7.2 GB memory | `n1-highcpu-8` | `c5.2xlarge` | `F8s v2` |
| Monitoring node | 1 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
-| Object storage(4) | n/a | n/a | n/a | n/a | n/a |
+| Object storage<sup>4</sup> | n/a | n/a | n/a | n/a | n/a |
| NFS server (optional, not recommended) | 1 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
<!-- markdownlint-disable MD029 -->
-1. Can be optionally run on reputable third party external PaaS PostgreSQL solutions. Google Cloud SQL and AWS RDS are known to work, however Azure Database for PostgreSQL is [not recommended](https://gitlab.com/gitlab-org/quality/reference-architectures/-/issues/61) due to performance issues. Consul is primarily used for PostgreSQL high availability so can be ignored when using a PostgreSQL PaaS setup. However it is also used optionally by Prometheus for Omnibus auto host discovery.
-2. Can be optionally run as reputable third party external PaaS Redis solutions. Google Memorystore and AWS Elasticache are known to work.
-3. Can be optionally run as reputable third party load balancing services (LB PaaS). AWS ELB is known to work.
-4. Should be run on reputable third party object storage (storage PaaS) for cloud implementations. Google Cloud Storage and AWS S3 are known to work.
+1. Can be optionally run on reputable third-party external PaaS PostgreSQL solutions. Google Cloud SQL and AWS RDS are known to work, however Azure Database for PostgreSQL is [not recommended](https://gitlab.com/gitlab-org/quality/reference-architectures/-/issues/61) due to performance issues. Consul is primarily used for PostgreSQL high availability so can be ignored when using a PostgreSQL PaaS setup. However it is also used optionally by Prometheus for Omnibus auto host discovery.
+2. Can be optionally run as reputable third-party external PaaS Redis solutions. Google Memorystore and AWS Elasticache are known to work.
+3. Can be optionally run as reputable third-party load balancing services (LB PaaS). AWS ELB is known to work.
+4. Should be run on reputable third-party object storage (storage PaaS) for cloud implementations. Google Cloud Storage and AWS S3 are known to work.
<!-- markdownlint-enable MD029 -->
NOTE:
@@ -444,10 +444,7 @@ To configure the Gitaly server, on the server node you want to use for Gitaly:
1. Edit the Gitaly server node's `/etc/gitlab/gitlab.rb` file to configure
storage paths, enable the network listener, and to configure the token:
- <!--
- updates to following example must also be made at
- https://gitlab.com/gitlab-org/charts/gitlab/blob/master/doc/advanced/external-gitaly/external-omnibus-gitaly.md#configure-omnibus-gitlab
- -->
+ <!-- Updates to following example must also be made at https://gitlab.com/gitlab-org/charts/gitlab/blob/master/doc/advanced/external-gitaly/external-omnibus-gitaly.md#configure-omnibus-gitlab -->
```ruby
# /etc/gitlab/gitlab.rb
@@ -557,10 +554,7 @@ To configure Gitaly with TLS:
1. Edit `/etc/gitlab/gitlab.rb` and add:
- <!--
- updates to following example must also be made at
- https://gitlab.com/gitlab-org/charts/gitlab/blob/master/doc/advanced/external-gitaly/external-omnibus-gitaly.md#configure-omnibus-gitlab
- -->
+ <!-- Updates to following example must also be made at https://gitlab.com/gitlab-org/charts/gitlab/blob/master/doc/advanced/external-gitaly/external-omnibus-gitaly.md#configure-omnibus-gitlab -->
```ruby
gitaly['tls_listen_addr'] = "0.0.0.0:9999"
@@ -973,6 +967,143 @@ Read:
- The [Gitaly and NFS deprecation notice](../gitaly/index.md#nfs-deprecation-notice).
- About the [correct mount options to use](../nfs.md#upgrade-to-gitaly-cluster-or-disable-caching-if-experiencing-data-loss).
+## Cloud Native Hybrid reference architecture with Helm Charts (alternative)
+
+As an alternative approach, you can also run select components of GitLab as Cloud Native
+in Kubernetes via our official [Helm Charts](https://docs.gitlab.com/charts/).
+In this setup, we support running the equivalent of GitLab Rails and Sidekiq nodes
+in a Kubernetes cluster, named Webservice and Sidekiq respectively. In addition,
+the following other supporting services are supported: NGINX, Task Runner, Migrations,
+Prometheus, and Grafana.
+
+Hybrid installations leverage the benefits of both cloud native and traditional
+compute deployments. With this, _stateless_ components can benefit from cloud native
+workload management benefits while _stateful_ components are deployed in compute VMs
+with Omnibus to benefit from increased permanence.
+
+The 2,000 reference architecture is not a highly-available setup. To achieve HA, you can follow a modified [3K reference architecture](3k_users.md#cloud-native-hybrid-reference-architecture-with-helm-charts-alternative).
+
+NOTE:
+This is an **advanced** setup. Running services in Kubernetes is well known
+to be complex. **This setup is only recommended** if you have strong working
+knowledge and experience in Kubernetes. The rest of this
+section assumes this.
+
+### Cluster topology
+
+The following tables and diagram detail the hybrid environment using the same formats
+as the normal environment above.
+
+First are the components that run in Kubernetes. The recommendation at this time is to
+use Google Cloud’s Kubernetes Engine (GKE) and associated machine types, but the memory
+and CPU requirements should translate to most other providers. We hope to update this in the
+future with further specific cloud provider details.
+
+| Service | Nodes<sup>1</sup> | Configuration | GCP | Allocatable CPUs and Memory |
+|-------------------------------------------------------|-------------------|------------------------|-----------------|-----------------------------|
+| Webservice | 3 | 8 vCPU, 7.2 GB memory | `n1-highcpu-8` | 23.7 vCPU, 16.9 GB memory |
+| Sidekiq | 2 | 2 vCPU, 7.5 GB memory | `n1-standard-2` | 3.9 vCPU, 11.8 GB memory |
+| Supporting services such as NGINX, Prometheus | 2 | 1 vCPU, 3.75 GB memory | `n1-standard-1` | 1.9 vCPU, 5.5 GB memory |
+
+<!-- Disable ordered list rule https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md029---ordered-list-item-prefix -->
+<!-- markdownlint-disable MD029 -->
+1. Nodes configuration is shown as it is forced to ensure pod vcpu / memory ratios and avoid scaling during **performance testing**.
+ In production deployments there is no need to assign pods to nodes. A minimum of three nodes in three different availability zones is strongly recommended to align with resilient cloud architecture practices.
+<!-- markdownlint-enable MD029 -->
+
+Next are the backend components that run on static compute VMs via Omnibus (or External PaaS
+services where applicable):
+
+| Service | Nodes | Configuration | GCP |
+|--------------------------------------------|-------|-------------------------|------------------|
+| PostgreSQL<sup>1</sup> | 1 | 2 vCPU, 7.5 GB memory | `n1-standard-2` |
+| Redis<sup>2</sup> | 1 | 1 vCPU, 3.75 GB memory | `n1-standard-1` |
+| Gitaly | 1 | 4 vCPU, 15 GB memory | `n1-standard-4` |
+| Object storage<sup>3</sup> | n/a | n/a | n/a |
+
+<!-- Disable ordered list rule https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md029---ordered-list-item-prefix -->
+<!-- markdownlint-disable MD029 -->
+1. Can be optionally run on reputable third-party external PaaS PostgreSQL solutions. Google Cloud SQL and AWS RDS are known to work, however Azure Database for PostgreSQL is [not recommended](https://gitlab.com/gitlab-org/quality/reference-architectures/-/issues/61) due to performance issues. Consul is primarily used for PostgreSQL high availability so can be ignored when using a PostgreSQL PaaS setup. However it is also used optionally by Prometheus for Omnibus auto host discovery.
+2. Can be optionally run on reputable third-party external PaaS Redis solutions. Google Memorystore and AWS Elasticache are known to work.
+3. Should be run on reputable third-party object storage (storage PaaS) for cloud implementations. Google Cloud Storage and AWS S3 are known to work.
+<!-- markdownlint-enable MD029 -->
+
+NOTE:
+For all PaaS solutions that involve configuring instances, it is strongly recommended to implement a minimum of three nodes in three different availability zones to align with resilient cloud architecture practices.
+
+```plantuml
+@startuml 2k
+
+card "Kubernetes via Helm Charts" as kubernetes {
+ card "**External Load Balancer**" as elb #6a9be7
+
+ together {
+ collections "**Webservice** x3" as gitlab #32CD32
+ collections "**Sidekiq** x2" as sidekiq #ff8dd1
+ }
+
+ card "**Prometheus + Grafana**" as monitor #7FFFD4
+ card "**Supporting Services**" as support
+}
+
+card "**Gitaly**" as gitaly #FF8C00
+card "**PostgreSQL**" as postgres #4EA7FF
+card "**Redis**" as redis #FF6347
+cloud "**Object Storage**" as object_storage #white
+
+elb -[#6a9be7]-> gitlab
+elb -[#6a9be7]--> monitor
+
+gitlab -[#32CD32]--> gitaly
+gitlab -[#32CD32]--> postgres
+gitlab -[#32CD32]-> object_storage
+gitlab -[#32CD32]--> redis
+
+sidekiq -[#ff8dd1]--> gitaly
+sidekiq -[#ff8dd1]-> object_storage
+sidekiq -[#ff8dd1]---> postgres
+sidekiq -[#ff8dd1]---> redis
+
+monitor .[#7FFFD4]u-> gitlab
+monitor .[#7FFFD4]-> gitaly
+monitor .[#7FFFD4]-> postgres
+monitor .[#7FFFD4,norank]--> redis
+monitor .[#7FFFD4,norank]u--> elb
+
+@enduml
+```
+
+### Resource usage settings
+
+The following formulas help when calculating how many pods may be deployed within resource constraints.
+The [2k reference architecture example values file](https://gitlab.com/gitlab-org/charts/gitlab/-/blob/master/examples/ref/2k.yaml)
+documents how to apply the calculated configuration to the Helm Chart.
+
+#### Webservice
+
+Webservice pods typically need about 1 vCPU and 1.25 GB of memory _per worker_.
+Each Webservice pod consumes roughly 2 vCPUs and 2.5 GB of memory using
+the [recommended topology](#cluster-topology) because two worker processes
+are created by default and each pod has other small processes running.
+
+For 2,000 users we recommend a total Puma worker count of around 12.
+With the [provided recommendations](#cluster-topology) this allows the deployment of up to 6
+Webservice pods with 2 workers per pod and 2 pods per node. Expand available resources using
+the ratio of 1 vCPU to 1.25 GB of memory _per each worker process_ for each additional
+Webservice pod.
+
+For further information on resource usage, see the [Webservice resources](https://docs.gitlab.com/charts/charts/gitlab/webservice/#resources).
+
+#### Sidekiq
+
+Sidekiq pods should generally have 1 vCPU and 2 GB of memory.
+
+[The provided starting point](#cluster-topology) allows the deployment of up to
+2 Sidekiq pods. Expand available resources using the 1 vCPU to 2GB memory
+ratio for each additional pod.
+
+For further information on resource usage, see the [Sidekiq resources](https://docs.gitlab.com/charts/charts/gitlab/sidekiq/#resources).
+
<div align="right">
<a type="button" class="btn btn-default" href="#setup-components">
Back to setup components <i class="fa fa-angle-double-up" aria-hidden="true"></i>
diff --git a/doc/administration/reference_architectures/3k_users.md b/doc/administration/reference_architectures/3k_users.md
index ef58e69ee27..f4ae01c7442 100644
--- a/doc/administration/reference_architectures/3k_users.md
+++ b/doc/administration/reference_architectures/3k_users.md
@@ -1,5 +1,4 @@
---
-reading_time: true
stage: Enablement
group: Distribution
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
@@ -24,22 +23,23 @@ For a full list of reference architectures, see
> - **Supported users (approximate):** 3,000
> - **High Availability:** Yes, although [Praefect](#configure-praefect-postgresql) needs a third-party PostgreSQL solution
> - **Test requests per second (RPS) rates:** API: 60 RPS, Web: 6 RPS, Git (Pull): 6 RPS, Git (Push): 1 RPS
+> - **[Latest 3k weekly performance testing results](https://gitlab.com/gitlab-org/quality/performance/-/wikis/Benchmarks/Latest/3k)**
| Service | Nodes | Configuration | GCP | AWS | Azure |
|--------------------------------------------|-------------|-----------------------|-----------------|--------------|----------|
-| External load balancing node(3) | 1 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
-| Redis(2) | 3 | 2 vCPU, 7.5 GB memory | `n1-standard-2` | `m5.large` | `D2s v3` |
-| Consul(1) + Sentinel(2) | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
-| PostgreSQL(1) | 3 | 2 vCPU, 7.5 GB memory | `n1-standard-2` | `m5.large` | `D2s v3` |
-| PgBouncer(1) | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
-| Internal load balancing node(3) | 1 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
+| External load balancing node<sup>3</sup> | 1 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
+| Redis<sup>2</sup> | 3 | 2 vCPU, 7.5 GB memory | `n1-standard-2` | `m5.large` | `D2s v3` |
+| Consul<sup>1</sup> + Sentinel<sup>2</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
+| PostgreSQL<sup>1</sup> | 3 | 2 vCPU, 7.5 GB memory | `n1-standard-2` | `m5.large` | `D2s v3` |
+| PgBouncer<sup>1</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
+| Internal load balancing node<sup>3</sup> | 1 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
| Gitaly | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
| Praefect | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
-| Praefect PostgreSQL(1) | 1+ | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
+| Praefect PostgreSQL<sup>1</sup> | 1+ | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
| Sidekiq | 4 | 2 vCPU, 7.5 GB memory | `n1-standard-2` | `m5.large` | `D2s v3` |
| GitLab Rails | 3 | 8 vCPU, 7.2 GB memory | `n1-highcpu-8` | `c5.2xlarge` | `F8s v2` |
| Monitoring node | 1 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
-| Object storage(4) | n/a | n/a | n/a | n/a | n/a |
+| Object storage<sup>4</sup> | n/a | n/a | n/a | n/a | n/a |
| NFS server (optional, not recommended) | 1 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
<!-- Disable ordered list rule https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md029---ordered-list-item-prefix -->
@@ -47,7 +47,7 @@ For a full list of reference architectures, see
1. Can be optionally run on reputable third-party external PaaS PostgreSQL solutions. Google Cloud SQL and AWS RDS are known to work, however Azure Database for PostgreSQL is [not recommended](https://gitlab.com/gitlab-org/quality/reference-architectures/-/issues/61) due to performance issues. Consul is primarily used for PostgreSQL high availability so can be ignored when using a PostgreSQL PaaS setup. However it is also used optionally by Prometheus for Omnibus auto host discovery.
2. Can be optionally run on reputable third-party external PaaS Redis solutions. Google Memorystore and AWS Elasticache are known to work.
3. Can be optionally run on reputable third-party load balancing services (LB PaaS). AWS ELB is known to work.
-4. Should be run on reputable third party object storage (storage PaaS) for cloud implementations. Google Cloud Storage and AWS S3 are known to work.
+4. Should be run on reputable third-party object storage (storage PaaS) for cloud implementations. Google Cloud Storage and AWS S3 are known to work.
<!-- markdownlint-enable MD029 -->
NOTE:
@@ -63,10 +63,7 @@ together {
collections "**Sidekiq** x4" as sidekiq #ff8dd1
}
-together {
- card "**Prometheus + Grafana**" as monitor #7FFFD4
- collections "**Consul** x3" as consul #e76a9b
-}
+card "**Prometheus + Grafana**" as monitor #7FFFD4
card "Gitaly Cluster" as gitaly_cluster {
collections "**Praefect** x3" as praefect #FF8C00
@@ -86,14 +83,15 @@ card "Database" as database {
postgres_primary .[#4EA7FF]> postgres_secondary
}
-card "redis" as redis {
- collections "**Redis Persistent** x3" as redis_persistent #FF6347
- collections "**Redis Cache** x3" as redis_cache #FF6347
- collections "**Redis Persistent Sentinel** x3" as redis_persistent_sentinel #FF6347
- collections "**Redis Cache Sentinel** x3"as redis_cache_sentinel #FF6347
+card "**Consul + Sentinel**" as consul_sentinel {
+ collections "**Consul** x3" as consul #e76a9b
+ collections "**Redis Sentinel** x3" as sentinel #e6e727
+}
- redis_persistent <.[#FF6347]- redis_persistent_sentinel
- redis_cache <.[#FF6347]- redis_cache_sentinel
+card "Redis" as redis {
+ collections "**Redis** x3" as redis_nodes #FF6347
+
+ redis_nodes <.[#FF6347]- sentinel
}
cloud "**Object Storage**" as object_storage #white
@@ -348,7 +346,7 @@ Configure DNS for an alternate SSH hostname such as `altssh.gitlab.example.com`.
The Internal Load Balancer is used to balance any internal connections the GitLab environment requires
such as connections to [PgBouncer](#configure-pgbouncer) and [Praefect](#configure-praefect) (Gitaly Cluster).
-Note that it's a separate node from the External Load Balancer and shouldn't have any access externally.
+It's a separate node from the External Load Balancer and shouldn't have any access externally.
The following IP will be used as an example:
@@ -885,7 +883,10 @@ in the second step, do not supply the `EXTERNAL_URL` value.
patroni['username'] = '<patroni_api_username>'
patroni['password'] = '<patroni_api_password>'
- # Replace XXX.XXX.XXX.XXX/YY with Network Address
+ # Replace 10.6.0.0/24 with Network Addresses for your other patroni nodes
+ patroni['allowlist'] = %w(10.6.0.0/24 127.0.0.1/32)
+
+ # Replace 10.6.0.0/24 with Network Address
postgresql['trust_auth_cidr_addresses'] = %w(10.6.0.0/24 127.0.0.1/32)
# Set the network addresses that the exporters will listen on for monitoring
@@ -2088,12 +2089,193 @@ but with smaller performance requirements, several modifications can be consider
- Combining select nodes: Some nodes can be combined to reduce complexity at the cost of some performance:
- GitLab Rails and Sidekiq: Sidekiq nodes can be removed and the component instead enabled on the GitLab Rails nodes.
- PostgreSQL and PgBouncer: PgBouncer nodes can be removed and the component instead enabled on PostgreSQL with the Internal Load Balancer pointing to them instead.
+- Reducing the node counts: Some node types do not need consensus and can run with fewer nodes (but more than one for redundancy). This will also lead to reduced performance.
+ - GitLab Rails and Sidekiq: Stateless services don't have a minimum node count. Two are enough for redundancy.
+ - Gitaly and Praefect: A quorum is not strictly necessary. Two Gitaly nodes and two Praefect nodes are enough for redundancy.
- Running select components in reputable Cloud PaaS solutions: Select components of the GitLab setup can instead be run on Cloud Provider PaaS solutions. By doing this, additional dependent components can also be removed:
- PostgreSQL: Can be run on reputable Cloud PaaS solutions such as Google Cloud SQL or AWS RDS. In this setup, the PgBouncer and Consul nodes are no longer required:
- Consul may still be desired if [Prometheus](../monitoring/prometheus/index.md) auto discovery is a requirement, otherwise you would need to [manually add scrape configurations](../monitoring/prometheus/index.md#adding-custom-scrape-configurations) for all nodes.
- As Redis Sentinel runs on the same box as Consul in this architecture, it may need to be run on a separate box if Redis is still being run via Omnibus.
- Redis: Can be run on reputable Cloud PaaS solutions such as Google Memorystore and AWS ElastiCache. In this setup, the Redis Sentinel is no longer required.
+## Cloud Native Hybrid reference architecture with Helm Charts (alternative)
+
+As an alternative approach, you can also run select components of GitLab as Cloud Native
+in Kubernetes via our official [Helm Charts](https://docs.gitlab.com/charts/).
+In this setup, we support running the equivalent of GitLab Rails and Sidekiq nodes
+in a Kubernetes cluster, named Webservice and Sidekiq respectively. In addition,
+the following other supporting services are supported: NGINX, Task Runner, Migrations,
+Prometheus, and Grafana.
+
+Hybrid installations leverage the benefits of both cloud native and traditional
+compute deployments. With this, _stateless_ components can benefit from cloud native
+workload management benefits while _stateful_ components are deployed in compute VMs
+with Omnibus to benefit from increased permanence.
+
+NOTE:
+This is an **advanced** setup. Running services in Kubernetes is well known
+to be complex. **This setup is only recommended** if you have strong working
+knowledge and experience in Kubernetes. The rest of this
+section assumes this.
+
+### Cluster topology
+
+The following tables and diagram detail the hybrid environment using the same formats
+as the normal environment above.
+
+First are the components that run in Kubernetes. The recommendation at this time is to
+use Google Cloud’s Kubernetes Engine (GKE) and associated machine types, but the memory
+and CPU requirements should translate to most other providers. We hope to update this in the
+future with further specific cloud provider details.
+
+| Service | Nodes<sup>1</sup> | Configuration | GCP | Allocatable CPUs and Memory |
+|-------------------------------------------------------|-------------------|-------------------------|------------------|-----------------------------|
+| Webservice | 2 | 16 vCPU, 14.4 GB memory | `n1-highcpu-16` | 31.8 vCPU, 24.8 GB memory |
+| Sidekiq | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` | 11.8 vCPU, 38.9 GB memory |
+| Supporting services such as NGINX, Prometheus | 2 | 2 vCPU, 7.5 GB memory | `n1-standard-2` | 3.9 vCPU, 11.8 GB memory |
+
+<!-- Disable ordered list rule https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md029---ordered-list-item-prefix -->
+<!-- markdownlint-disable MD029 -->
+1. Nodes configuration is shown as it is forced to ensure pod vcpu / memory ratios and avoid scaling during **performance testing**.
+ In production deployments there is no need to assign pods to nodes. A minimum of three nodes in three different availability zones is strongly recommended to align with resilient cloud architecture practices.
+<!-- markdownlint-enable MD029 -->
+
+Next are the backend components that run on static compute VMs via Omnibus (or External PaaS
+services where applicable):
+
+| Service | Nodes | Configuration | GCP |
+|--------------------------------------------|-------|-------------------------|------------------|
+| Redis<sup>2</sup> | 3 | 2 vCPU, 7.5 GB memory | `n1-standard-2` |
+| Consul<sup>1</sup> + Sentinel<sup>2</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
+| PostgreSQL<sup>1</sup> | 3 | 2 vCPU, 7.5 GB memory | `n1-standard-2` |
+| PgBouncer<sup>1</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
+| Internal load balancing node<sup>3</sup> | 1 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
+| Gitaly | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` |
+| Praefect | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
+| Praefect PostgreSQL<sup>1</sup> | 1+ | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
+| Object storage<sup>4</sup> | n/a | n/a | n/a |
+
+<!-- Disable ordered list rule https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md029---ordered-list-item-prefix -->
+<!-- markdownlint-disable MD029 -->
+1. Can be optionally run on reputable third-party external PaaS PostgreSQL solutions. Google Cloud SQL and AWS RDS are known to work, however Azure Database for PostgreSQL is [not recommended](https://gitlab.com/gitlab-org/quality/reference-architectures/-/issues/61) due to performance issues. Consul is primarily used for PostgreSQL high availability so can be ignored when using a PostgreSQL PaaS setup. However it is also used optionally by Prometheus for Omnibus auto host discovery.
+2. Can be optionally run on reputable third-party external PaaS Redis solutions. Google Memorystore and AWS Elasticache are known to work.
+3. Can be optionally run on reputable third-party load balancing services (LB PaaS). AWS ELB is known to work.
+4. Should be run on reputable third-party object storage (storage PaaS) for cloud implementations. Google Cloud Storage and AWS S3 are known to work.
+<!-- markdownlint-enable MD029 -->
+
+NOTE:
+For all PaaS solutions that involve configuring instances, it is strongly recommended to implement a minimum of three nodes in three different availability zones to align with resilient cloud architecture practices.
+
+```plantuml
+@startuml 3k
+
+card "Kubernetes via Helm Charts" as kubernetes {
+ card "**External Load Balancer**" as elb #6a9be7
+
+ together {
+ collections "**Webservice** x2" as gitlab #32CD32
+ collections "**Sidekiq** x3" as sidekiq #ff8dd1
+ }
+
+ card "**Prometheus + Grafana**" as monitor #7FFFD4
+ card "**Supporting Services**" as support
+}
+
+card "**Internal Load Balancer**" as ilb #9370DB
+
+card "**Consul + Sentinel**" as consul_sentinel {
+ collections "**Consul** x3" as consul #e76a9b
+ collections "**Redis Sentinel** x3" as sentinel #e6e727
+}
+
+card "Gitaly Cluster" as gitaly_cluster {
+ collections "**Praefect** x3" as praefect #FF8C00
+ collections "**Gitaly** x3" as gitaly #FF8C00
+ card "**Praefect PostgreSQL***\n//Non fault-tolerant//" as praefect_postgres #FF8C00
+
+ praefect -[#FF8C00]-> gitaly
+ praefect -[#FF8C00]> praefect_postgres
+}
+
+card "Database" as database {
+ collections "**PGBouncer** x3" as pgbouncer #4EA7FF
+ card "**PostgreSQL** (Primary)" as postgres_primary #4EA7FF
+ collections "**PostgreSQL** (Secondary) x2" as postgres_secondary #4EA7FF
+
+ pgbouncer -[#4EA7FF]-> postgres_primary
+ postgres_primary .[#4EA7FF]> postgres_secondary
+}
+
+card "Redis" as redis {
+ collections "**Redis** x3" as redis_nodes #FF6347
+
+ redis_nodes <.[#FF6347]- sentinel
+}
+
+cloud "**Object Storage**" as object_storage #white
+
+elb -[#6a9be7]-> gitlab
+elb -[#6a9be7]-> monitor
+elb -[hidden]-> support
+
+gitlab -[#32CD32]--> ilb
+gitlab -[#32CD32]-> object_storage
+gitlab -[#32CD32]---> redis
+gitlab -[hidden]--> consul
+
+sidekiq -[#ff8dd1]--> ilb
+sidekiq -[#ff8dd1]-> object_storage
+sidekiq -[#ff8dd1]---> redis
+sidekiq -[hidden]--> consul
+
+ilb -[#9370DB]-> gitaly_cluster
+ilb -[#9370DB]-> database
+
+consul .[#e76a9b]-> database
+consul .[#e76a9b]-> gitaly_cluster
+consul .[#e76a9b,norank]--> redis
+
+monitor .[#7FFFD4]> consul
+monitor .[#7FFFD4]-> database
+monitor .[#7FFFD4]-> gitaly_cluster
+monitor .[#7FFFD4,norank]--> redis
+monitor .[#7FFFD4]> ilb
+monitor .[#7FFFD4,norank]u--> elb
+
+@enduml
+```
+
+### Resource usage settings
+
+The following formulas help when calculating how many pods may be deployed within resource constraints.
+The [3k reference architecture example values file](https://gitlab.com/gitlab-org/charts/gitlab/-/blob/master/examples/ref/3k.yaml)
+documents how to apply the calculated configuration to the Helm Chart.
+
+#### Webservice
+
+Webservice pods typically need about 1 vCPU and 1.25 GB of memory _per worker_.
+Each Webservice pod consumes roughly 4 vCPUs and 5 GB of memory using
+the [recommended topology](#cluster-topology) because four worker processes
+are created by default and each pod has other small processes running.
+
+For 3,000 users we recommend a total Puma worker count of around 16.
+With the [provided recommendations](#cluster-topology) this allows the deployment of up to 4
+Webservice pods with 4 workers per pod and 2 pods per node. Expand available resources using
+the ratio of 1 vCPU to 1.25 GB of memory _per each worker process_ for each additional
+Webservice pod.
+
+For further information on resource usage, see the [Webservice resources](https://docs.gitlab.com/charts/charts/gitlab/webservice/#resources).
+
+#### Sidekiq
+
+Sidekiq pods should generally have 1 vCPU and 2 GB of memory.
+
+[The provided starting point](#cluster-topology) allows the deployment of up to
+8 Sidekiq pods. Expand available resources using the 1 vCPU to 2GB memory
+ratio for each additional pod.
+
+For further information on resource usage, see the [Sidekiq resources](https://docs.gitlab.com/charts/charts/gitlab/sidekiq/#resources).
+
<div align="right">
<a type="button" class="btn btn-default" href="#setup-components">
Back to setup components <i class="fa fa-angle-double-up" aria-hidden="true"></i>
diff --git a/doc/administration/reference_architectures/50k_users.md b/doc/administration/reference_architectures/50k_users.md
index 766f94f6c53..b262545b27d 100644
--- a/doc/administration/reference_architectures/50k_users.md
+++ b/doc/administration/reference_architectures/50k_users.md
@@ -1,5 +1,4 @@
---
-reading_time: true
stage: Enablement
group: Distribution
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
@@ -14,33 +13,34 @@ full list of reference architectures, see
> - **Supported users (approximate):** 50,000
> - **High Availability:** Yes ([Praefect](#configure-praefect-postgresql) needs a third-party PostgreSQL solution for HA)
> - **Test requests per second (RPS) rates:** API: 1000 RPS, Web: 100 RPS, Git (Pull): 100 RPS, Git (Push): 20 RPS
-
-| Service | Nodes | Configuration | GCP | AWS | Azure |
-|------------------------------------------|-------------|-------------------------|------------------|---------------|-----------|
-| External load balancing node(3) | 1 | 8 vCPU, 7.2 GB memory | `n1-highcpu-8` | `c5.2xlarge` | `F8s v2` |
-| Consul(1) | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
-| PostgreSQL(1) | 3 | 32 vCPU, 120 GB memory | `n1-standard-32` | `m5.8xlarge` | `D32s v3` |
-| PgBouncer(1) | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
-| Internal load balancing node(3) | 1 | 8 vCPU, 7.2 GB memory | `n1-highcpu-8` | `c5.2xlarge` | `F8s v2` |
-| Redis - Cache(2) | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
-| Redis - Queues / Shared State(2) | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
-| Redis Sentinel - Cache(2) | 3 | 1 vCPU, 3.75 GB memory | `n1-standard-1` | `c5.large` | `A1 v2` |
-| Redis Sentinel - Queues / Shared State(2)| 3 | 1 vCPU, 3.75 GB memory | `n1-standard-1` | `c5.large` | `A1 v2` |
-| Gitaly | 3 | 64 vCPU, 240 GB memory | `n1-standard-64` | `m5.16xlarge` | `D64s v3` |
-| Praefect | 3 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
-| Praefect PostgreSQL(1) | 1+ | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
-| Sidekiq | 4 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
-| GitLab Rails | 12 | 32 vCPU, 28.8 GB memory | `n1-highcpu-32` | `c5.9xlarge` | `F32s v2` |
-| Monitoring node | 1 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
-| Object storage(4) | n/a | n/a | n/a | n/a | n/a |
-| NFS server (optional, not recommended) | 1 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
+> - **[Latest 50k weekly performance testing results](https://gitlab.com/gitlab-org/quality/performance/-/wikis/Benchmarks/Latest/50k)**
+
+| Service | Nodes | Configuration | GCP | AWS | Azure |
+|---------------------------------------------------|-------------|-------------------------|------------------|---------------|-----------|
+| External load balancing node<sup>3</sup> | 1 | 8 vCPU, 7.2 GB memory | `n1-highcpu-8` | `c5.2xlarge` | `F8s v2` |
+| Consul<sup>1</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
+| PostgreSQL<sup>1</sup> | 3 | 32 vCPU, 120 GB memory | `n1-standard-32` | `m5.8xlarge` | `D32s v3` |
+| PgBouncer<sup>1</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
+| Internal load balancing node<sup>3</sup> | 1 | 8 vCPU, 7.2 GB memory | `n1-highcpu-8` | `c5.2xlarge` | `F8s v2` |
+| Redis - Cache<sup>2</sup> | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
+| Redis - Queues / Shared State<sup>2</sup> | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
+| Redis Sentinel - Cache<sup>2</sup> | 3 | 1 vCPU, 3.75 GB memory | `n1-standard-1` | `c5.large` | `A1 v2` |
+| Redis Sentinel - Queues / Shared State<sup>2</sup>| 3 | 1 vCPU, 3.75 GB memory | `n1-standard-1` | `c5.large` | `A1 v2` |
+| Gitaly | 3 | 64 vCPU, 240 GB memory | `n1-standard-64` | `m5.16xlarge` | `D64s v3` |
+| Praefect | 3 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
+| Praefect PostgreSQL<sup>1</sup> | 1+ | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
+| Sidekiq | 4 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
+| GitLab Rails | 12 | 32 vCPU, 28.8 GB memory | `n1-highcpu-32` | `c5.9xlarge` | `F32s v2` |
+| Monitoring node | 1 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
+| Object storage<sup>4</sup> | n/a | n/a | n/a | n/a | n/a |
+| NFS server (optional, not recommended) | 1 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
<!-- Disable ordered list rule https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md029---ordered-list-item-prefix -->
<!-- markdownlint-disable MD029 -->
1. Can be optionally run on reputable third-party external PaaS PostgreSQL solutions. Google Cloud SQL and AWS RDS are known to work, however Azure Database for PostgreSQL is [not recommended](https://gitlab.com/gitlab-org/quality/reference-architectures/-/issues/61) due to performance issues. Consul is primarily used for PostgreSQL high availability so can be ignored when using a PostgreSQL PaaS setup. However it is also used optionally by Prometheus for Omnibus auto host discovery.
2. Can be optionally run on reputable third-party external PaaS Redis solutions. Google Memorystore and AWS Elasticache are known to work.
3. Can be optionally run on reputable third-party load balancing services (LB PaaS). AWS ELB is known to work.
-4. Should be run on reputable third party object storage (storage PaaS) for cloud implementations. Google Cloud Storage and AWS S3 are known to work.
+4. Should be run on reputable third-party object storage (storage PaaS) for cloud implementations. Google Cloud Storage and AWS S3 are known to work.
<!-- markdownlint-enable MD029 -->
NOTE:
@@ -141,7 +141,7 @@ is recommended instead of using NFS. Using an object storage service also
doesn't require you to provision and maintain a node.
It's also worth noting that at this time [Praefect requires its own database server](../gitaly/praefect.md#postgresql) and
-that to achieve full High Availability a third party PostgreSQL database solution will be required.
+that to achieve full High Availability a third-party PostgreSQL database solution will be required.
We hope to offer a built in solutions for these restrictions in the future but in the meantime a non HA PostgreSQL server
can be set up via Omnibus GitLab, which the above specs reflect. Refer to the following issues for more information: [`omnibus-gitlab#5919`](https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/5919) & [`gitaly#3398`](https://gitlab.com/gitlab-org/gitaly/-/issues/3398)
@@ -354,7 +354,7 @@ Configure DNS for an alternate SSH hostname such as `altssh.gitlab.example.com`.
The Internal Load Balancer is used to balance any internal connections the GitLab environment requires
such as connections to [PgBouncer](#configure-pgbouncer) and [Praefect](#configure-praefect) (Gitaly Cluster).
-Note that it's a separate node from the External Load Balancer and shouldn't have any access externally.
+It's a separate node from the External Load Balancer and shouldn't have any access externally.
The following IP will be used as an example:
@@ -578,12 +578,12 @@ in the second step, do not supply the `EXTERNAL_URL` value.
# Sets `max_replication_slots` to double the number of database nodes.
# Patroni uses one extra slot per node when initiating the replication.
- patroni['postgresql']['max_replication_slots'] = 8
+ patroni['postgresql']['max_replication_slots'] = 6
# Set `max_wal_senders` to one more than the number of replication slots in the cluster.
# This is used to prevent replication from using up all of the
# available database connections.
- patroni['postgresql']['max_wal_senders'] = 9
+ patroni['postgresql']['max_wal_senders'] = 7
# Incoming recommended value for max connections is 500. See https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/5691.
patroni['postgresql']['max_connections'] = 500
@@ -611,7 +611,10 @@ in the second step, do not supply the `EXTERNAL_URL` value.
patroni['username'] = '<patroni_api_username>'
patroni['password'] = '<patroni_api_password>'
- # Replace XXX.XXX.XXX.XXX/YY with Network Address
+ # Replace 10.6.0.0/24 with Network Addresses for your other patroni nodes
+ patroni['allowlist'] = %w(10.6.0.0/24 127.0.0.1/32)
+
+ # Replace 10.6.0.0/24 with Network Address
postgresql['trust_auth_cidr_addresses'] = %w(10.6.0.0/24 127.0.0.1/32)
# Set the network addresses that the exporters will listen on for monitoring
@@ -2391,7 +2394,7 @@ in Kubernetes via our official [Helm Charts](https://docs.gitlab.com/charts/).
In this setup, we support running the equivalent of GitLab Rails and Sidekiq nodes
in a Kubernetes cluster, named Webservice and Sidekiq respectively. In addition,
the following other supporting services are supported: NGINX, Task Runner, Migrations,
-Prometheus and Grafana.
+Prometheus, and Grafana.
Hybrid installations leverage the benefits of both cloud native and traditional
compute deployments. With this, _stateless_ components can benefit from cloud native
@@ -2402,23 +2405,23 @@ NOTE:
This is an **advanced** setup. Running services in Kubernetes is well known
to be complex. **This setup is only recommended** if you have strong working
knowledge and experience in Kubernetes. The rest of this
-section will assume this.
+section assumes this.
### Cluster topology
-The following tables and diagram details the hybrid environment using the same formats
+The following tables and diagram detail the hybrid environment using the same formats
as the normal environment above.
-First starting with the components that run in Kubernetes. The recommendations at this
-time use Google Cloud’s Kubernetes Engine (GKE) and associated machine types, but the memory
+First are the components that run in Kubernetes. The recommendation at this time is to
+use Google Cloud’s Kubernetes Engine (GKE) and associated machine types, but the memory
and CPU requirements should translate to most other providers. We hope to update this in the
future with further specific cloud provider details.
-| Service | Nodes(1) | Configuration | GCP | Allocatable CPUs and Memory |
-|-------------------------------------------------------|----------|-------------------------|------------------|-----------------------------|
-| Webservice | 16 | 32 vCPU, 28.8 GB memory | `n1-highcpu-32` | 510 vCPU, 472 GB memory |
-| Sidekiq | 4 | 4 vCPU, 15 GB memory | `n1-standard-4` | 15.5 vCPU, 50 GB memory |
-| Supporting services such as NGINX, Prometheus, etc. | 2 | 4 vCPU, 15 GB memory | `n1-standard-4` | 7.75 vCPU, 25 GB memory |
+| Service | Nodes<sup>1</sup> | Configuration | GCP | Allocatable CPUs and Memory |
+|-------------------------------------------------------|-------------------|-------------------------|------------------|-----------------------------|
+| Webservice | 16 | 32 vCPU, 28.8 GB memory | `n1-highcpu-32` | 510 vCPU, 472 GB memory |
+| Sidekiq | 4 | 4 vCPU, 15 GB memory | `n1-standard-4` | 15.5 vCPU, 50 GB memory |
+| Supporting services such as NGINX, Prometheus | 2 | 4 vCPU, 15 GB memory | `n1-standard-4` | 7.75 vCPU, 25 GB memory |
<!-- Disable ordered list rule https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md029---ordered-list-item-prefix -->
<!-- markdownlint-disable MD029 -->
@@ -2429,27 +2432,27 @@ future with further specific cloud provider details.
Next are the backend components that run on static compute VMs via Omnibus (or External PaaS
services where applicable):
-| Service | Nodes | Configuration | GCP |
-|--------------------------------------------|-------|-------------------------|------------------|
-| Consul(1) | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
-| PostgreSQL(1) | 3 | 32 vCPU, 120 GB memory | `n1-standard-32` |
-| PgBouncer(1) | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
-| Internal load balancing node(3) | 1 | 8 vCPU, 7.2 GB memory | `n1-highcpu-8` |
-| Redis - Cache(2) | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` |
-| Redis - Queues / Shared State(2) | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` |
-| Redis Sentinel - Cache(2) | 3 | 1 vCPU, 3.75 GB memory | `n1-standard-1` |
-| Redis Sentinel - Queues / Shared State(2) | 3 | 1 vCPU, 3.75 GB memory | `n1-standard-1` |
-| Gitaly | 3 | 64 vCPU, 240 GB memory | `n1-standard-64` |
-| Praefect | 3 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` |
-| Praefect PostgreSQL(1) | 1+ | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
-| Object storage(4) | n/a | n/a | n/a |
+| Service | Nodes | Configuration | GCP |
+|-----------------------------------------------------|-------|-------------------------|------------------|
+| Consul<sup>1</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
+| PostgreSQL<sup>1</sup> | 3 | 32 vCPU, 120 GB memory | `n1-standard-32` |
+| PgBouncer<sup>1</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
+| Internal load balancing node<sup>3</sup> | 1 | 8 vCPU, 7.2 GB memory | `n1-highcpu-8` |
+| Redis - Cache<sup>2</sup> | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` |
+| Redis - Queues / Shared State<sup>2</sup> | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` |
+| Redis Sentinel - Cache<sup>2</sup> | 3 | 1 vCPU, 3.75 GB memory | `n1-standard-1` |
+| Redis Sentinel - Queues / Shared State<sup>2</sup> | 3 | 1 vCPU, 3.75 GB memory | `n1-standard-1` |
+| Gitaly | 3 | 64 vCPU, 240 GB memory | `n1-standard-64` |
+| Praefect | 3 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` |
+| Praefect PostgreSQL<sup>1</sup> | 1+ | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
+| Object storage<sup>4</sup> | n/a | n/a | n/a |
<!-- Disable ordered list rule https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md029---ordered-list-item-prefix -->
<!-- markdownlint-disable MD029 -->
1. Can be optionally run on reputable third-party external PaaS PostgreSQL solutions. Google Cloud SQL and AWS RDS are known to work, however Azure Database for PostgreSQL is [not recommended](https://gitlab.com/gitlab-org/quality/reference-architectures/-/issues/61) due to performance issues. Consul is primarily used for PostgreSQL high availability so can be ignored when using a PostgreSQL PaaS setup. However it is also used optionally by Prometheus for Omnibus auto host discovery.
2. Can be optionally run on reputable third-party external PaaS Redis solutions. Google Memorystore and AWS Elasticache are known to work.
3. Can be optionally run on reputable third-party load balancing services (LB PaaS). AWS ELB is known to work.
-4. Should be run on reputable third party object storage (storage PaaS) for cloud implementations. Google Cloud Storage and AWS S3 are known to work.
+4. Should be run on reputable third-party object storage (storage PaaS) for cloud implementations. Google Cloud Storage and AWS S3 are known to work.
<!-- markdownlint-enable MD029 -->
NOTE:
@@ -2543,11 +2546,11 @@ documents how to apply the calculated configuration to the Helm Chart.
#### Webservice
Webservice pods typically need about 1 vCPU and 1.25 GB of memory _per worker_.
-Each Webservice pod will consume roughly 4 vCPUs and 5 GB of memory using
+Each Webservice pod consumes roughly 4 vCPUs and 5 GB of memory using
the [recommended topology](#cluster-topology) because four worker processes
are created by default and each pod has other small processes running.
-For 50k users we recommend a total Puma worker count of around 320.
+For 50,000 users we recommend a total Puma worker count of around 320.
With the [provided recommendations](#cluster-topology) this allows the deployment of up to 80
Webservice pods with 4 workers per pod and 5 pods per node. Expand available resources using
the ratio of 1 vCPU to 1.25 GB of memory _per each worker process_ for each additional
diff --git a/doc/administration/reference_architectures/5k_users.md b/doc/administration/reference_architectures/5k_users.md
index e57c4545b13..666d18a66fc 100644
--- a/doc/administration/reference_architectures/5k_users.md
+++ b/doc/administration/reference_architectures/5k_users.md
@@ -1,5 +1,4 @@
---
-reading_time: true
stage: Enablement
group: Distribution
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
@@ -21,22 +20,23 @@ costly-to-operate environment by using the
> - **Supported users (approximate):** 5,000
> - **High Availability:** Yes ([Praefect](#configure-praefect-postgresql) needs a third-party PostgreSQL solution for HA)
> - **Test requests per second (RPS) rates:** API: 100 RPS, Web: 10 RPS, Git (Pull): 10 RPS, Git (Push): 2 RPS
+> - **[Latest 5k weekly performance testing results](https://gitlab.com/gitlab-org/quality/performance/-/wikis/Benchmarks/Latest/5k)**
| Service | Nodes | Configuration | GCP | AWS | Azure |
|--------------------------------------------|-------------|-------------------------|-----------------|--------------|----------|
-| External load balancing node(3) | 1 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
-| Redis(2) | 3 | 2 vCPU, 7.5 GB memory | `n1-standard-2` | `m5.large` | `D2s v3` |
-| Consul(1) + Sentinel(2) | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
-| PostgreSQL(1) | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
-| PgBouncer(1) | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
-| Internal load balancing node(3) | 1 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
+| External load balancing node<sup>3</sup> | 1 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
+| Redis<sup>2</sup> | 3 | 2 vCPU, 7.5 GB memory | `n1-standard-2` | `m5.large` | `D2s v3` |
+| Consul<sup>1</sup> + Sentinel<sup>2</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
+| PostgreSQL<sup>1</sup> | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
+| PgBouncer<sup>1</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
+| Internal load balancing node<sup>3</sup> | 1 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
| Gitaly | 3 | 8 vCPU, 30 GB memory | `n1-standard-8` | `m5.2xlarge` | `D8s v3` |
| Praefect | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
-| Praefect PostgreSQL(1) | 1+ | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
+| Praefect PostgreSQL<sup>1</sup> | 1+ | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
| Sidekiq | 4 | 2 vCPU, 7.5 GB memory | `n1-standard-2` | `m5.large` | `D2s v3` |
| GitLab Rails | 3 | 16 vCPU, 14.4 GB memory | `n1-highcpu-16` | `c5.4xlarge` | `F16s v2`|
| Monitoring node | 1 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
-| Object storage(4) | n/a | n/a | n/a | n/a | n/a |
+| Object storage<sup>4</sup> | n/a | n/a | n/a | n/a | n/a |
| NFS server (optional, not recommended) | 1 | 4 vCPU, 3.6 GB memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
<!-- Disable ordered list rule https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md029---ordered-list-item-prefix -->
@@ -44,7 +44,7 @@ costly-to-operate environment by using the
1. Can be optionally run on reputable third-party external PaaS PostgreSQL solutions. Google Cloud SQL and AWS RDS are known to work, however Azure Database for PostgreSQL is [not recommended](https://gitlab.com/gitlab-org/quality/reference-architectures/-/issues/61) due to performance issues. Consul is primarily used for PostgreSQL high availability so can be ignored when using a PostgreSQL PaaS setup. However it is also used optionally by Prometheus for Omnibus auto host discovery.
2. Can be optionally run on reputable third-party external PaaS Redis solutions. Google Memorystore and AWS Elasticache are known to work.
3. Can be optionally run on reputable third-party load balancing services (LB PaaS). AWS ELB is known to work.
-4. Should be run on reputable third party object storage (storage PaaS) for cloud implementations. Google Cloud Storage and AWS S3 are known to work.
+4. Should be run on reputable third-party object storage (storage PaaS) for cloud implementations. Google Cloud Storage and AWS S3 are known to work.
<!-- markdownlint-enable MD029 -->
NOTE:
@@ -80,9 +80,9 @@ card "Database" as database {
postgres_primary .[#4EA7FF]> postgres_secondary
}
-node "**Consul + Sentinel** x3" as consul_sentinel {
- component Consul as consul #e76a9b
- component Sentinel as sentinel #e6e727
+card "**Consul + Sentinel**" as consul_sentinel {
+ collections "**Consul** x3" as consul #e76a9b
+ collections "**Redis Sentinel** x3" as sentinel #e6e727
}
card "Redis" as redis {
@@ -143,7 +143,7 @@ is recommended instead of using NFS. Using an object storage service also
doesn't require you to provision and maintain a node.
It's also worth noting that at this time [Praefect requires its own database server](../gitaly/praefect.md#postgresql) and
-that to achieve full High Availability a third party PostgreSQL database solution will be required.
+that to achieve full High Availability a third-party PostgreSQL database solution will be required.
We hope to offer a built in solutions for these restrictions in the future but in the meantime a non HA PostgreSQL server
can be set up via Omnibus GitLab, which the above specs reflect. Refer to the following issues for more information: [`omnibus-gitlab#5919`](https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/5919) & [`gitaly#3398`](https://gitlab.com/gitlab-org/gitaly/-/issues/3398)
@@ -338,7 +338,7 @@ Configure DNS for an alternate SSH hostname such as `altssh.gitlab.example.com`.
The Internal Load Balancer is used to balance any internal connections the GitLab environment requires
such as connections to [PgBouncer](#configure-pgbouncer) and [Praefect](#configure-praefect) (Gitaly Cluster).
-Note that it's a separate node from the External Load Balancer and shouldn't have any access externally.
+It's a separate node from the External Load Balancer and shouldn't have any access externally.
The following IP will be used as an example:
@@ -842,12 +842,12 @@ in the second step, do not supply the `EXTERNAL_URL` value.
# Sets `max_replication_slots` to double the number of database nodes.
# Patroni uses one extra slot per node when initiating the replication.
- patroni['postgresql']['max_replication_slots'] = 8
+ patroni['postgresql']['max_replication_slots'] = 6
# Set `max_wal_senders` to one more than the number of replication slots in the cluster.
# This is used to prevent replication from using up all of the
# available database connections.
- patroni['postgresql']['max_wal_senders'] = 9
+ patroni['postgresql']['max_wal_senders'] = 7
# Incoming recommended value for max connections is 500. See https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/5691.
patroni['postgresql']['max_connections'] = 500
@@ -874,7 +874,10 @@ in the second step, do not supply the `EXTERNAL_URL` value.
patroni['username'] = '<patroni_api_username>'
patroni['password'] = '<patroni_api_password>'
- # Replace XXX.XXX.XXX.XXX/YY with Network Address
+ # Replace 10.6.0.0/24 with Network Addresses for your other patroni nodes
+ patroni['allowlist'] = %w(10.6.0.0/24 127.0.0.1/32)
+
+ # Replace 10.6.0.0/24 with Network Address
postgresql['trust_auth_cidr_addresses'] = %w(10.6.0.0/24 127.0.0.1/32)
# Set the network addresses that the exporters will listen on for monitoring
@@ -2072,7 +2075,7 @@ in Kubernetes via our official [Helm Charts](https://docs.gitlab.com/charts/).
In this setup, we support running the equivalent of GitLab Rails and Sidekiq nodes
in a Kubernetes cluster, named Webservice and Sidekiq respectively. In addition,
the following other supporting services are supported: NGINX, Task Runner, Migrations,
-Prometheus and Grafana.
+Prometheus, and Grafana.
Hybrid installations leverage the benefits of both cloud native and traditional
compute deployments. With this, _stateless_ components can benefit from cloud native
@@ -2083,23 +2086,23 @@ NOTE:
This is an **advanced** setup. Running services in Kubernetes is well known
to be complex. **This setup is only recommended** if you have strong working
knowledge and experience in Kubernetes. The rest of this
-section will assume this.
+section assumes this.
### Cluster topology
-The following tables and diagram details the hybrid environment using the same formats
+The following tables and diagram detail the hybrid environment using the same formats
as the normal environment above.
-First starting with the components that run in Kubernetes. The recommendations at this
-time use Google Cloud’s Kubernetes Engine (GKE) and associated machine types, but the memory
+First are the components that run in Kubernetes. The recommendation at this time is to
+use Google Cloud’s Kubernetes Engine (GKE) and associated machine types, but the memory
and CPU requirements should translate to most other providers. We hope to update this in the
future with further specific cloud provider details.
-| Service | Nodes(1) | Configuration | GCP | Allocatable CPUs and Memory |
-|-------------------------------------------------------|----------|-------------------------|------------------|-----------------------------|
-| Webservice | 5 | 16 vCPU, 14.4 GB memory | `n1-highcpu-16` | 79.5 vCPU, 62 GB memory |
-| Sidekiq | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` | 11.8 vCPU, 38.9 GB memory |
-| Supporting services such as NGINX, Prometheus, etc. | 2 | 2 vCPU, 7.5 GB memory | `n1-standard-2` | 3.9 vCPU, 11.8 GB memory |
+| Service | Nodes<sup>1</sup> | Configuration | GCP | Allocatable CPUs and Memory |
+|-------------------------------------------------------|-------------------|-------------------------|------------------|-----------------------------|
+| Webservice | 5 | 16 vCPU, 14.4 GB memory | `n1-highcpu-16` | 79.5 vCPU, 62 GB memory |
+| Sidekiq | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` | 11.8 vCPU, 38.9 GB memory |
+| Supporting services such as NGINX, Prometheus | 2 | 2 vCPU, 7.5 GB memory | `n1-standard-2` | 3.9 vCPU, 11.8 GB memory |
<!-- Disable ordered list rule https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md029---ordered-list-item-prefix -->
<!-- markdownlint-disable MD029 -->
@@ -2112,22 +2115,22 @@ services where applicable):
| Service | Nodes | Configuration | GCP |
|--------------------------------------------|-------|-------------------------|------------------|
-| Redis(2) | 3 | 2 vCPU, 7.5 GB memory | `n1-standard-2` |
-| Consul(1) + Sentinel(2) | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
-| PostgreSQL(1) | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` |
-| PgBouncer(1) | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
-| Internal load balancing node(3) | 1 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
+| Redis<sup>2</sup> | 3 | 2 vCPU, 7.5 GB memory | `n1-standard-2` |
+| Consul<sup>1</sup> + Sentinel<sup>2</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
+| PostgreSQL<sup>1</sup> | 3 | 4 vCPU, 15 GB memory | `n1-standard-4` |
+| PgBouncer<sup>1</sup> | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
+| Internal load balancing node<sup>3</sup> | 1 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
| Gitaly | 3 | 8 vCPU, 30 GB memory | `n1-standard-8` |
| Praefect | 3 | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
-| Praefect PostgreSQL(1) | 1+ | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
-| Object storage(4) | n/a | n/a | n/a |
+| Praefect PostgreSQL<sup>1</sup> | 1+ | 2 vCPU, 1.8 GB memory | `n1-highcpu-2` |
+| Object storage<sup>4</sup> | n/a | n/a | n/a |
<!-- Disable ordered list rule https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md029---ordered-list-item-prefix -->
<!-- markdownlint-disable MD029 -->
1. Can be optionally run on reputable third-party external PaaS PostgreSQL solutions. Google Cloud SQL and AWS RDS are known to work, however Azure Database for PostgreSQL is [not recommended](https://gitlab.com/gitlab-org/quality/reference-architectures/-/issues/61) due to performance issues. Consul is primarily used for PostgreSQL high availability so can be ignored when using a PostgreSQL PaaS setup. However it is also used optionally by Prometheus for Omnibus auto host discovery.
2. Can be optionally run on reputable third-party external PaaS Redis solutions. Google Memorystore and AWS Elasticache are known to work.
3. Can be optionally run on reputable third-party load balancing services (LB PaaS). AWS ELB is known to work.
-4. Should be run on reputable third party object storage (storage PaaS) for cloud implementations. Google Cloud Storage and AWS S3 are known to work.
+4. Should be run on reputable third-party object storage (storage PaaS) for cloud implementations. Google Cloud Storage and AWS S3 are known to work.
<!-- markdownlint-enable MD029 -->
NOTE:
@@ -2150,9 +2153,9 @@ card "Kubernetes via Helm Charts" as kubernetes {
card "**Internal Load Balancer**" as ilb #9370DB
-node "**Consul + Sentinel** x3" as consul_sentinel {
- component Consul as consul #e76a9b
- component Sentinel as sentinel #e6e727
+card "**Consul + Sentinel**" as consul_sentinel {
+ collections "**Consul** x3" as consul #e76a9b
+ collections "**Redis Sentinel** x3" as sentinel #e6e727
}
card "Gitaly Cluster" as gitaly_cluster {
@@ -2221,11 +2224,11 @@ documents how to apply the calculated configuration to the Helm Chart.
#### Webservice
Webservice pods typically need about 1 vCPU and 1.25 GB of memory _per worker_.
-Each Webservice pod will consume roughly 4 vCPUs and 5 GB of memory using
+Each Webservice pod consumes roughly 4 vCPUs and 5 GB of memory using
the [recommended topology](#cluster-topology) because four worker processes
are created by default and each pod has other small processes running.
-For 5k users we recommend a total Puma worker count of around 40.
+For 5,000 users we recommend a total Puma worker count of around 40.
With the [provided recommendations](#cluster-topology) this allows the deployment of up to 10
Webservice pods with 4 workers per pod and 2 pods per node. Expand available resources using
the ratio of 1 vCPU to 1.25 GB of memory _per each worker process_ for each additional
diff --git a/doc/administration/reference_architectures/index.md b/doc/administration/reference_architectures/index.md
index 22871f6ea8d..74d8bf39d03 100644
--- a/doc/administration/reference_architectures/index.md
+++ b/doc/administration/reference_architectures/index.md
@@ -71,6 +71,8 @@ The following reference architectures are available:
The following Cloud Native Hybrid reference architectures, where select recommended components can be run in Kubernetes, are available:
+- [Up to 2,000 users](2k_users.md#cloud-native-hybrid-reference-architecture-with-helm-charts-alternative)
+- [Up to 3,000 users](3k_users.md#cloud-native-hybrid-reference-architecture-with-helm-charts-alternative)
- [Up to 5,000 users](5k_users.md#cloud-native-hybrid-reference-architecture-with-helm-charts-alternative)
- [Up to 10,000 users](10k_users.md#cloud-native-hybrid-reference-architecture-with-helm-charts-alternative)
- [Up to 25,000 users](25k_users.md#cloud-native-hybrid-reference-architecture-with-helm-charts-alternative)
diff --git a/doc/administration/repository_storage_paths.md b/doc/administration/repository_storage_paths.md
index 68f351e737a..f4aed0f6a0f 100644
--- a/doc/administration/repository_storage_paths.md
+++ b/doc/administration/repository_storage_paths.md
@@ -120,17 +120,23 @@ For compatibility reasons `gitlab.yml` has a different structure than Omnibus Gi
1. [Restart GitLab](restart_gitlab.md#installations-from-source) for the changes to take effect.
+1. [Configure where new repositories are stored](#configure-where-new-repositories-are-stored).
+
**For Omnibus installations**
-Edit `/etc/gitlab/gitlab.rb` by appending the rest of the paths to the default one:
+1. Edit `/etc/gitlab/gitlab.rb` by appending the rest of the paths to the default one:
+
+ ```ruby
+ git_data_dirs({
+ "default" => { "path" => "/var/opt/gitlab/git-data" },
+ "storage1" => { "path" => "/mnt/storage1/git-data" },
+ "storage2" => { "path" => "/mnt/storage2/git-data" }
+ })
+ ```
+
+1. [Restart GitLab](restart_gitlab.md#omnibus-gitlab-reconfigure) for the changes to take effect.
-```ruby
-git_data_dirs({
- "default" => { "path" => "/var/opt/gitlab/git-data" },
- "storage1" => { "path" => "/mnt/storage1/git-data" },
- "storage2" => { "path" => "/mnt/storage2/git-data" }
-})
-```
+1. [Configure where new repositories are stored](#configure-where-new-repositories-are-stored).
NOTE:
Omnibus stores the repositories in a `repositories` subdirectory of the `git-data` directory.
@@ -153,7 +159,18 @@ The higher the weight of a given repository storage path relative to other repos
paths, the more often it is chosen. That is,
`(storage weight) / (sum of all weights) * 100 = chance %`.
+By default, if repository weights have not been configured earlier:
+
+- `default` is weighted `100`.
+- All other storages are weighted `0`.
+
+NOTE:
+If all storage weights are `0` (for example, when `default` does not exist), GitLab attempts to
+create new repositories on `default`, regardless of the configuration or if `default` exists.
+See [the tracking issue](https://gitlab.com/gitlab-org/gitlab/-/issues/36175) for more information.
+information.
+
## Move repositories
To move a repository to a different repository storage (for example, from `default` to `storage2`), use the
-same process as [migrating to Gitaly Cluster](gitaly/praefect.md#migrate-to-gitaly-cluster).
+same process as [migrating to Gitaly Cluster](gitaly/index.md#migrate-to-gitaly-cluster).
diff --git a/doc/administration/sidekiq.md b/doc/administration/sidekiq.md
index 95fef1255af..e753832f2c3 100644
--- a/doc/administration/sidekiq.md
+++ b/doc/administration/sidekiq.md
@@ -94,6 +94,16 @@ you want using steps 1 and 2 from the GitLab downloads page.
gitlab_exporter['enable'] = false
```
+1. If you're using the Container Registry and it's running on a different node than Sidekiq, then
+ configure the registry URL:
+
+ ```ruby
+ registry_external_url 'https://registry.example.com'
+ gitlab_rails['registry_api_url'] = "https://registry.example.com"
+ ```
+
+ You must also copy the `registry.key` file to each Sidekiq node.
+
1. Run `gitlab-ctl reconfigure`.
You will need to restart the Sidekiq nodes after an update has occurred and database
@@ -180,6 +190,10 @@ node_exporter['listen_address'] = '10.10.1.48:9100'
# Rails Status for prometheus
gitlab_rails['monitoring_whitelist'] = ['10.10.1.42', '127.0.0.1']
+
+# Container Registry URL for cleanup jobs
+registry_external_url 'https://registry.example.com'
+gitlab_rails['registry_api_url'] = "https://registry.example.com"
```
## Further reading
diff --git a/doc/administration/static_objects_external_storage.md b/doc/administration/static_objects_external_storage.md
index 48b98156b4f..2f19a2e5058 100644
--- a/doc/administration/static_objects_external_storage.md
+++ b/doc/administration/static_objects_external_storage.md
@@ -5,22 +5,23 @@ info: "To determine the technical writer assigned to the Stage/Group associated
type: reference
---
-# Static objects external storage **(FREE)**
+# External storage for static objects **(FREE)**
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/31025) in GitLab 12.3.
-You can configure GitLab to serve repository static objects, like archives or raw blobs,
-from an external storage, such as a Content Delivery Network (CDN).
+Configure GitLab to serve repository static objects (such as archives or raw blobs) from external
+storage such as a content delivery network (CDN).
-## Configuring
+## Configure external storage
To configure external storage for static objects:
1. On the top bar, select **Menu >** **{admin}** **Admin**.
1. In the left sidebar, select **Settings > Repository**.
-1. Expand the **Repository static objects** section.
+1. Expand the **External storage for repository static objects** section.
1. Enter the base URL and an arbitrary token. When you [set up external storage](#set-up-external-storage),
use a script that sets these values as `ORIGIN_HOSTNAME` and `STORAGE_TOKEN`.
+1. Select **Save changes**.
The token is required to distinguish requests coming from the external storage, so users don't
circumvent the external storage and access the application directly. GitLab expects
@@ -29,18 +30,23 @@ originating from the external storage.
## Serving private static objects
-GitLab appends a user-specific token for static object URLs belonging to private projects,
-so an external storage can be authenticated on the user's behalf. When processing requests originating
-from the external storage, GitLab checks the following places to confirm the user may
-access the requested object:
+GitLab appends a user-specific token for static object URLs belonging to private projects so
+external storage can be authenticated on the user's behalf.
+
+When processing requests originating
+from the external storage, GitLab checks the following to confirm the user may access the requested
+object:
- The `token` query parameter.
- The `X-Gitlab-Static-Object-Token` header.
## Requests flow example
-The following example shows a sequence of requests and responses between the user,
-GitLab, and the CDN:
+The following example shows a sequence of requests and responses between:
+
+- The user.
+- GitLab.
+- The content delivery network.
```mermaid
sequenceDiagram
@@ -72,7 +78,7 @@ other CDNs or Function as a Service (FaaS) systems should work using the same pr
- `ORIGIN_HOSTNAME`: the hostname of your GitLab installation.
- `STORAGE_TOKEN`: any arbitrary secure token. You can get a token by running
`pwgen -cn1 64` on a UNIX machine. Save this token for the Admin Area, as
- described in the [configuring](#configuring) section.
+ described in the [configuring](#configure-external-storage) section.
```javascript
const ORIGIN_HOSTNAME = 'gitlab.installation.com' // FIXME: SET CORRECT VALUE
@@ -229,4 +235,4 @@ other CDNs or Function as a Service (FaaS) systems should work using the same pr
1. Create a new worker with this script.
1. Copy your values for `ORIGIN_HOSTNAME` and `STORAGE_TOKEN`.
- Use those values [to configure external storage for static objects](#configuring).
+ Use those values [to configure external storage for static objects](#configure-external-storage).
diff --git a/doc/administration/timezone.md b/doc/administration/timezone.md
index bc94110c5b6..b6076c8ed26 100644
--- a/doc/administration/timezone.md
+++ b/doc/administration/timezone.md
@@ -44,15 +44,12 @@ gitlab-ctl restart
## Changing time zone per user
-To allow users to change the time zone in their profile, the feature flag `user_time_settings` should be enabled:
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/57654) in GitLab 11.11, disabled by default behind `user_time_settings` [feature flag](feature_flags.md).
+> - [Enabled by default](https://gitlab.com/gitlab-org/gitlab/-/issues/29669) in GitLab 13.9.
+> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/29669) in GitLab 14.1.
-1. [Start a Rails console session](operations/rails_console.md).
-1. Enable the feature flag:
+A user can set their time zone in their profile. If a user has not set their time zone, it defaults
+to the time zone [configured at the instance level](#changing-your-time-zone). On GitLab.com, the
+default time zone is UTC.
- ```ruby
- Feature.enable(:user_time_settings)
- ```
-
-1. You should now be able to see the timezone dropdown in the users' **Settings > Profile** page.
-
- ![User Time Zone Settings](img/time_zone_settings.png)
+For more information, see [Set your time zone](../user/profile/index.md#set-your-time-zone).
diff --git a/doc/administration/troubleshooting/debug.md b/doc/administration/troubleshooting/debug.md
index 031f44b1f9f..aea891b8a77 100644
--- a/doc/administration/troubleshooting/debug.md
+++ b/doc/administration/troubleshooting/debug.md
@@ -45,7 +45,7 @@ session by running:
ActiveRecord::Base.connection.execute('SET statement_timeout TO 0')
```
-Note that this change only affects the current Rails console session and will
+This change only affects the current Rails console session and will
not be persisted in the GitLab production environment or in the next Rails
console session.
@@ -213,7 +213,7 @@ downtime. Otherwise skip to the next section.
exit
```
-Note that if the Puma process terminates before you are able to run these
+If the Puma process terminates before you are able to run these
commands, GDB will report an error. To buy more time, you can always raise the
Puma worker timeout. For omnibus users, you can edit `/etc/gitlab/gitlab.rb` and
increase it from 60 seconds to 600:
@@ -285,5 +285,5 @@ The output in `/tmp/puma.txt` may help diagnose the root cause.
## More information
-- [Debugging Stuck Ruby Processes](https://newrelic.com/blog/engineering/debugging-stuck-ruby-processes-what-to-do-before-you-kill-9/)
+- [Debugging Stuck Ruby Processes](https://newrelic.com/blog/best-practices/debugging-stuck-ruby-processes-what-to-do-before-you-kill-9)
- [Cheat sheet of using GDB and Ruby processes](gdb-stuck-ruby.txt)
diff --git a/doc/administration/troubleshooting/gitlab_rails_cheat_sheet.md b/doc/administration/troubleshooting/gitlab_rails_cheat_sheet.md
index 08755dd3285..c55efe78216 100644
--- a/doc/administration/troubleshooting/gitlab_rails_cheat_sheet.md
+++ b/doc/administration/troubleshooting/gitlab_rails_cheat_sheet.md
@@ -16,13 +16,13 @@ and your [support options](https://about.gitlab.com/support/), before attempting
this information.
WARNING:
-Please note that some of these scripts could be damaging if not run correctly,
+Some of these scripts could be damaging if not run correctly,
or under the right conditions. We highly recommend running them under the
guidance of a Support Engineer, or running them in a test environment with a
backup of the instance ready to be restored, just in case.
WARNING:
-Please also note that as GitLab changes, changes to the code are inevitable,
+As GitLab changes, changes to the code are inevitable,
and so some scripts may not work as they once used to. These are not kept
up-to-date as these scripts/commands were added as they were found/needed. As
mentioned above, we recommend running these scripts under the supervision of a
@@ -466,7 +466,7 @@ sudo gitlab-rake cache:clear
### Export a repository
-It's typically recommended to export a project through [the web interface](../../user/project/settings/import_export.md#exporting-a-project-and-its-data) or through [the API](../../api/project_import_export.md). In situations where this is not working as expected, it may be preferable to export a project directly via the Rails console:
+It's typically recommended to export a project through [the web interface](../../user/project/settings/import_export.md#export-a-project-and-its-data) or through [the API](../../api/project_import_export.md). In situations where this is not working as expected, it may be preferable to export a project directly via the Rails console:
```ruby
user = User.find_by_username('USERNAME')
@@ -554,13 +554,28 @@ end
## Users
+### Create new user
+
+```ruby
+u = User.new(username: 'test_user', email: 'test@example.com', name: 'Test User', password: 'password', password_confirmation: 'password')
+u.skip_confirmation! # Use it only if you wish user to be automatically confirmed. If skipped, user will recieve confirmation e-mail
+u.save!
+```
+
### Skip reconfirmation
```ruby
-user = User.find_by_username '<username>'
+user = User.find_by_username('<username>')
user.skip_reconfirmation!
```
+### Disable 2fa for single user
+
+```ruby
+user = User.find_by_username('<username>')
+user.disable_two_factor!
+```
+
### Active users & Historical users
```ruby
diff --git a/doc/administration/troubleshooting/kubernetes_cheat_sheet.md b/doc/administration/troubleshooting/kubernetes_cheat_sheet.md
index bb0287df596..abeba514e4b 100644
--- a/doc/administration/troubleshooting/kubernetes_cheat_sheet.md
+++ b/doc/administration/troubleshooting/kubernetes_cheat_sheet.md
@@ -135,7 +135,7 @@ and they will assist you with any issues you are having.
# source-style commands should also work
cd /srv/gitlab && bundle exec rake gitlab:check RAILS_ENV=production
- # run GitLab check. Note that the output can be confusing and invalid because of the specific structure of GitLab installed via helm chart
+ # run GitLab check. The output can be confusing and invalid because of the specific structure of GitLab installed via helm chart
/usr/local/bin/gitlab-rake gitlab:check
# open console without entering pod
diff --git a/doc/administration/troubleshooting/log_parsing.md b/doc/administration/troubleshooting/log_parsing.md
index c16302dd251..0a73c61ae94 100644
--- a/doc/administration/troubleshooting/log_parsing.md
+++ b/doc/administration/troubleshooting/log_parsing.md
@@ -60,7 +60,7 @@ zcat some_json.log.25.gz | (head -1; tail -1) | jq '.time'
#### Find all requests with a 5XX status code
```shell
-jq 'select(status >= 500)' <FILE>
+jq 'select(.status >= 500)' <FILE>
```
#### Top 10 slowest requests
diff --git a/doc/administration/troubleshooting/navigating_gitlab_via_rails_console.md b/doc/administration/troubleshooting/navigating_gitlab_via_rails_console.md
index e55118d7309..57d64a2323e 100644
--- a/doc/administration/troubleshooting/navigating_gitlab_via_rails_console.md
+++ b/doc/administration/troubleshooting/navigating_gitlab_via_rails_console.md
@@ -265,7 +265,7 @@ user.save!(validate: false)
This is not recommended, as validations are usually put in place to ensure the
integrity and consistency of user-provided data.
-Note that a validation error will prevent the entire object from being saved to
+A validation error will prevent the entire object from being saved to
the database. We'll see a little of this in the next section. If you're getting
a mysterious red banner in the GitLab UI when submitting a form, this can often
be the fastest way to get to the root of the problem.
diff --git a/doc/administration/troubleshooting/ssl.md b/doc/administration/troubleshooting/ssl.md
index 5ce4c7f0fb2..80be30a6509 100644
--- a/doc/administration/troubleshooting/ssl.md
+++ b/doc/administration/troubleshooting/ssl.md
@@ -199,7 +199,7 @@ To fix this problem:
git config --global http.sslCAInfo ~/.ssl/gitlab.domain.tld.crt
```
- - Disable SSL verification in your Git client. Note that this intended as a
+ - Disable SSL verification in your Git client. This is intended as a
temporary measure, as it could be considered a security risk.
```shell
diff --git a/doc/administration/wikis/index.md b/doc/administration/wikis/index.md
index bf6ff457ad3..01c175e014e 100644
--- a/doc/administration/wikis/index.md
+++ b/doc/administration/wikis/index.md
@@ -74,6 +74,14 @@ You can also use the API to [retrieve the current value](../../api/settings.md#g
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/application/settings"
```
+### Reduce wiki repository size
+
+The wiki counts as part of the [namespace storage size](../../user/admin_area/settings/account_and_limit_settings.md),
+so you should keep your wiki repositories as compact as possible.
+
+For more information about tools to compact repositories,
+read the documentation on [reducing repository size](../../user/project/repository/reducing_the_repo_size_using_git.md).
+
## Related topics
- [User documentation for wikis](../../user/project/wiki/index.md)
diff --git a/doc/api/README.md b/doc/api/README.md
index 5ab8653dc35..0e6c2f63f9e 100644
--- a/doc/api/README.md
+++ b/doc/api/README.md
@@ -1,5 +1,6 @@
---
redirect_to: 'index.md'
+remove_date: '2021-09-28'
---
This document was moved to [another location](index.md).
diff --git a/doc/api/api_resources.md b/doc/api/api_resources.md
index 6c9baab83e9..aae76697841 100644
--- a/doc/api/api_resources.md
+++ b/doc/api/api_resources.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/api/audit_events.md b/doc/api/audit_events.md
index 8fbee89f9be..3ffcae04791 100644
--- a/doc/api/audit_events.md
+++ b/doc/api/audit_events.md
@@ -23,8 +23,8 @@ GET /audit_events
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
-| `created_after` | string | no | Return audit events created on or after the given time. Format: ISO 8601 YYYY-MM-DDTHH:MM:SSZ |
-| `created_before` | string | no | Return audit events created on or before the given time. Format: ISO 8601 YYYY-MM-DDTHH:MM:SSZ |
+| `created_after` | string | no | Return audit events created on or after the given time. Format: ISO 8601 (`YYYY-MM-DDTHH:MM:SSZ`) |
+| `created_before` | string | no | Return audit events created on or before the given time. Format: ISO 8601 (`YYYY-MM-DDTHH:MM:SSZ`) |
| `entity_type` | string | no | Return audit events for the given entity type. Valid values are: `User`, `Group`, or `Project`. |
| `entity_id` | integer | no | Return audit events for the given entity ID. Requires `entity_type` attribute to be present. |
@@ -148,8 +148,8 @@ GET /groups/:id/audit_events
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the group](index.md#namespaced-path-encoding) |
-| `created_after` | string | no | Return group audit events created on or after the given time. Format: ISO 8601 YYYY-MM-DDTHH:MM:SSZ |
-| `created_before` | string | no | Return group audit events created on or before the given time. Format: ISO 8601 YYYY-MM-DDTHH:MM:SSZ |
+| `created_after` | string | no | Return group audit events created on or after the given time. Format: ISO 8601 (`YYYY-MM-DDTHH:MM:SSZ)` |
+| `created_before` | string | no | Return group audit events created on or before the given time. Format: ISO 8601 (`YYYY-MM-DDTHH:MM:SSZ`) |
By default, `GET` requests return 20 results at a time because the API results
are paginated.
@@ -255,8 +255,8 @@ GET /projects/:id/audit_events
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding) |
-| `created_after` | string | no | Return project audit events created on or after the given time. Format: ISO 8601 YYYY-MM-DDTHH:MM:SSZ |
-| `created_before` | string | no | Return project audit events created on or before the given time. Format: ISO 8601 YYYY-MM-DDTHH:MM:SSZ |
+| `created_after` | string | no | Return project audit events created on or after the given time. Format: ISO 8601 (`YYYY-MM-DDTHH:MM:SSZ`) |
+| `created_before` | string | no | Return project audit events created on or before the given time. Format: ISO 8601 (`YYYY-MM-DDTHH:MM:SSZ`) |
By default, `GET` requests return 20 results at a time because the API results
are paginated.
diff --git a/doc/api/bulk_imports.md b/doc/api/bulk_imports.md
index 9521c769d49..2325f25e789 100644
--- a/doc/api/bulk_imports.md
+++ b/doc/api/bulk_imports.md
@@ -11,6 +11,47 @@ info: To determine the technical writer assigned to the Stage/Group associated w
With the GitLab Migrations API, you can view the progress of migrations initiated with
[GitLab Group Migration](../user/group/import/index.md).
+## Start a new GitLab migration
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66353) in GitLab 14.2.
+
+```plaintext
+POST /bulk_imports
+```
+
+| Attribute | Type | Required | Description |
+| --------------------------------- | ------ | -------- | ----------- |
+| `configuration` | Hash | yes | The source GitLab instance configuration. |
+| `configuration[url]` | String | yes | Source GitLab instance URL. |
+| `configuration[access_token]` | String | yes | Access token to the source GitLab instance. |
+| `entities` | Array | yes | List of entities to import. |
+| `entities[source_type]` | String | yes | Source entity type (only `group_entity` is supported). |
+| `entities[source_full_path]` | String | yes | Source full path of the entity to import. |
+| `entities[destination_name]` | String | yes | Destination name for the entity. |
+| `entities[destination_namespace]` | String | no | Destination namespace for the entity. |
+
+```shell
+curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/bulk_imports" \
+ --data '{
+ "configuration": {
+ "url": "http://gitlab.example/",
+ "access_token": "access_token"
+ },
+ "entities": [
+ {
+ "source_full_path": "source/full/path",
+ "source_type": "group_entity",
+ "destination_name": "destination_name",
+ "destination_namespace": "destination/namespace/path"
+ }
+ ]
+ }'
+```
+
+```json
+{ "id": 1, "status": "created", "source_type": "gitlab", "created_at": "2021-06-18T09:45:55.358Z", "updated_at": "2021-06-18T09:46:27.003Z" }
+```
+
## List all GitLab migrations
```plaintext
diff --git a/doc/api/container_registry.md b/doc/api/container_registry.md
index cf5a7f89c8b..12bdeebca1d 100644
--- a/doc/api/container_registry.md
+++ b/doc/api/container_registry.md
@@ -30,6 +30,55 @@ To disable it:
Feature.disable(:ci_job_token_scope)
```
+## Change the visibility of the Container Registry
+
+This controls who can view the Container Registry.
+
+```plaintext
+PUT /projects/:id/
+```
+
+| Attribute | Type | Required | Description |
+| --------- | ---- | -------- | ----------- |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding) accessible by the authenticated user. |
+| `container_registry_access_level` | string | no | The desired visibility of the Container Registry. One of `enabled` (default), `private`, or `disabled`. |
+
+Descriptions of the possible values for `container_registry_access_level`:
+
+- **enabled** (Default): The Container Registry is visible to everyone with access to the project.
+If the project is public, the Container Registry is also public. If the project is internal or
+private, the Container Registry is also internal or private.
+
+- **private**: The Container Registry is visible only to project members with Reporter role or
+higher. This is similar to the behavior of a private project with Container Registry visibility set
+to **enabled**.
+
+- **disabled**: The Container Registry is disabled.
+
+See the [Container Registry visibility permissions](../user/packages/container_registry/index.md#container-registry-visibility-permissions)
+for more details about the permissions that this setting grants to users.
+
+```shell
+curl --request PUT "https://gitlab.example.com/api/v4/projects/5/" \
+ --header 'PRIVATE-TOKEN: <your_access_token>' \
+ --header 'Accept: application/json' \
+ --header 'Content-Type: application/json' \
+ --data-raw '{
+ "container_registry_access_level": "private"
+ }'
+```
+
+Example response:
+
+```json
+{
+ "id": 5,
+ "name": "Project 5",
+ "container_registry_access_level": "private",
+ ...
+}
+```
+
## List registry repositories
### Within a project
diff --git a/doc/api/custom_attributes.md b/doc/api/custom_attributes.md
index 56a9f6881cd..9908c58de35 100644
--- a/doc/api/custom_attributes.md
+++ b/doc/api/custom_attributes.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/api/dependencies.md b/doc/api/dependencies.md
index c85a3521aed..c8b928ab5b2 100644
--- a/doc/api/dependencies.md
+++ b/doc/api/dependencies.md
@@ -31,7 +31,7 @@ GET /projects/:id/dependencies?package_manager=yarn,bundler
| Attribute | Type | Required | Description |
| ------------- | -------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding). |
-| `package_manager` | string array | no | Returns dependencies belonging to specified package manager. Valid values: `bundler`, `composer`, `maven`, `npm`, `pip` or `yarn`. |
+| `package_manager` | string array | no | Returns dependencies belonging to specified package manager. Valid values: `bundler`, `composer`, `conan`, `maven`, `npm`, `pip` or `yarn`. |
```shell
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/4/dependencies"
diff --git a/doc/api/discussions.md b/doc/api/discussions.md
index 9e9b9dcc901..1c22f261e57 100644
--- a/doc/api/discussions.md
+++ b/doc/api/discussions.md
@@ -1214,13 +1214,13 @@ Parameters:
| Attribute | Type | Required | Description |
| ------------------------- | -------------- | -------- | ----------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding) |
-| `commit_id` | integer | yes | The ID of a commit |
+| `commit_id` | string | yes | The SHA of a commit |
| `body` | string | yes | The content of the thread |
| `created_at` | string | no | Date time string, ISO 8601 formatted, such as `2016-03-11T03:45:40Z` (requires administrator or project/group owner rights) |
| `position` | hash | no | Position when creating a diff note |
-| `position[base_sha]` | string | yes | Base commit SHA in the source branch |
-| `position[start_sha]` | string | yes | SHA referencing commit in target branch |
-| `position[head_sha]` | string | yes | SHA referencing HEAD of this commit |
+| `position[base_sha]` | string | yes | SHA of the parent commit|
+| `position[start_sha]` | string | yes | SHA of the parent commit |
+| `position[head_sha]` | string | yes | The SHA of this commit (same as `commit_id`) |
| `position[position_type]` | string | yes | Type of the position reference', allowed values: `text` or `image` |
| `position[new_path]` | string | no | File path after change |
| `position[new_line]` | integer | no | Line number after change |
@@ -1235,6 +1235,10 @@ Parameters:
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/commits/11/discussions?body=comment"
```
+The rules for creating the API request are the same as when
+[creating a new thread in the merge request diff](#create-a-new-thread-in-the-merge-request-diff),
+with the exception of `base_sha`, `start_sha`, and `head_sha` attributes.
+
### Add note to existing commit thread
Adds a new note to the thread.
diff --git a/doc/api/dora4_group_analytics.md b/doc/api/dora4_group_analytics.md
deleted file mode 100644
index 501bf824f03..00000000000
--- a/doc/api/dora4_group_analytics.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: 'dora/metrics.md'
-remove_date: '2021-07-25'
----
-
-This document was moved to [another location](dora/metrics.md).
-
-<!-- This redirect file can be deleted after <2021-07-25>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/api/environments.md b/doc/api/environments.md
index 25690cc099a..aa3697c54ac 100644
--- a/doc/api/environments.md
+++ b/doc/api/environments.md
@@ -231,6 +231,52 @@ DELETE /projects/:id/environments/:environment_id
curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/environments/1"
```
+## Delete multiple stopped review apps
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/296625) in GitLab 14.2.
+
+It schedules for deletion multiple environments that have already been
+[stopped](../ci/environments/index.md#stop-an-environment) and
+are [in the review app folder](../ci/review_apps/index.md).
+The actual deletion is performed after 1 week from the time of execution.
+
+```plaintext
+DELETE /projects/:id/environments/review_apps
+```
+
+| Attribute | Type | Required | Description |
+| --------- | ------- | -------- | --------------------- |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding) owned by the authenticated user. |
+| `before` | datetime | no | The date before which environments can be deleted. Defaults to 30 days ago. Expected in ISO 8601 format (`YYYY-MM-DDTHH:MM:SSZ`). |
+| `limit` | integer | no | Maximum number of environments to delete. Defaults to 100. |
+| `dry_run` | boolean | no | Defaults to `true` for safety reasons. It performs a dry run where no actual deletion will be performed. Set to `false` to actually delete the environment. |
+
+```shell
+curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/environments/review_apps"
+```
+
+Example response:
+
+```json
+{
+ "scheduled_entries": [
+ {
+ "id": 387,
+ "name": "review/023f1bce01229c686a73",
+ "slug": "review-023f1bce01-3uxznk",
+ "external_url": null
+ },
+ {
+ "id": 388,
+ "name": "review/85d4c26a388348d3c4c0",
+ "slug": "review-85d4c26a38-5giw1c",
+ "external_url": null
+ }
+ ],
+ "unprocessable_entries": []
+}
+```
+
## Stop an environment
It returns `200` if the environment was successfully stopped, and `404` if the environment does not exist.
diff --git a/doc/api/error_tracking.md b/doc/api/error_tracking.md
index fbfd2a69ef7..0fbb30ef364 100644
--- a/doc/api/error_tracking.md
+++ b/doc/api/error_tracking.md
@@ -34,7 +34,8 @@ Example response:
"active": true,
"project_name": "sample sentry project",
"sentry_external_url": "https://sentry.io/myawesomeproject/project",
- "api_url": "https://sentry.io/api/0/projects/myawesomeproject/project"
+ "api_url": "https://sentry.io/api/0/projects/myawesomeproject/project",
+ "integrated": false
}
```
@@ -46,10 +47,11 @@ The API allows you to enable or disable the Error Tracking settings for a projec
PATCH /projects/:id/error_tracking/settings
```
-| Attribute | Type | Required | Description |
-| --------- | ------- | -------- | --------------------- |
-| `id` | integer | yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding) owned by the authenticated user. |
-| `active` | boolean | yes | Pass `true` to enable the already configured error tracking settings or `false` to disable it. |
+| Attribute | Type | Required | Description |
+| ------------ | ------- | -------- | --------------------- |
+| `id` | integer | yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding) owned by the authenticated user. |
+| `active` | boolean | yes | Pass `true` to enable the already configured error tracking settings or `false` to disable it. |
+| `integrated` | boolean | no | Pass `true` to enable the integrated error tracking backend. Available in [GitLab 14.2](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/68260) and later. |
```shell
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/error_tracking/settings?active=true"
@@ -62,6 +64,7 @@ Example response:
"active": true,
"project_name": "sample sentry project",
"sentry_external_url": "https://sentry.io/myawesomeproject/project",
- "api_url": "https://sentry.io/api/0/projects/myawesomeproject/project"
+ "api_url": "https://sentry.io/api/0/projects/myawesomeproject/project",
+ "integrated": false
}
```
diff --git a/doc/api/events.md b/doc/api/events.md
index 7088eb65bd4..3fbbfa62e66 100644
--- a/doc/api/events.md
+++ b/doc/api/events.md
@@ -57,7 +57,7 @@ Available types for the `action` parameter, and the resources that might be affe
- Design
- Wiki page
-Note that these options are in lower case.
+These options are in lowercase.
### Target Types
@@ -71,7 +71,7 @@ Available target types for the `target_type` parameter are:
- `snippet`
- `user`
-Note that these options are in lower case.
+These options are in lowercase.
### Date formatting
@@ -83,7 +83,7 @@ YYYY-MM-DD
### Event Time Period Limit
-GitLab removes events older than 2 years from the events table for performance reasons.
+GitLab removes events older than 3 years from the events table for performance reasons.
## List currently authenticated user's events
diff --git a/doc/api/experiments.md b/doc/api/experiments.md
index 3c8efa35b78..c5e217a3d66 100644
--- a/doc/api/experiments.md
+++ b/doc/api/experiments.md
@@ -28,13 +28,51 @@ Example response:
```json
[
- {
- "key": "experiment_1",
- "enabled": true
+ {
+ "key": "code_quality_walkthrough",
+ "definition": {
+ "name": "code_quality_walkthrough",
+ "introduced_by_url": "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/58900",
+ "rollout_issue_url": "https://gitlab.com/gitlab-org/gitlab/-/issues/327229",
+ "milestone": "13.12",
+ "type": "experiment",
+ "group": "group::activation",
+ "default_enabled": false
},
- {
- "key": "experiment_2",
- "enabled": false
+ "current_status": {
+ "state": "conditional",
+ "gates": [
+ {
+ "key": "boolean",
+ "value": false
+ },
+ {
+ "key": "percentage_of_actors",
+ "value": 25
+ }
+ ]
}
+ },
+ {
+ "key": "ci_runner_templates",
+ "definition": {
+ "name": "ci_runner_templates",
+ "introduced_by_url": "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/58357",
+ "rollout_issue_url": "https://gitlab.com/gitlab-org/gitlab/-/issues/326725",
+ "milestone": "14.0",
+ "type": "experiment",
+ "group": "group::activation",
+ "default_enabled": false
+ },
+ "current_status": {
+ "state": "off",
+ "gates": [
+ {
+ "key": "boolean",
+ "value": false
+ }
+ ]
+ }
+ }
]
```
diff --git a/doc/api/features.md b/doc/api/features.md
index cb3ee04d076..87bd565e2bd 100644
--- a/doc/api/features.md
+++ b/doc/api/features.md
@@ -130,7 +130,7 @@ POST /features/:name
| `project` | string | no | A projects path, for example `gitlab-org/gitlab-foss` |
| `force` | boolean | no | Skip feature flag validation checks, such as a YAML definition |
-Note that you can enable or disable a feature for a `feature_group`, a `user`,
+You can enable or disable a feature for a `feature_group`, a `user`,
a `group`, and a `project` in a single API call.
```shell
diff --git a/doc/api/freeze_periods.md b/doc/api/freeze_periods.md
index 454d2dfb1c5..a562423b2af 100644
--- a/doc/api/freeze_periods.md
+++ b/doc/api/freeze_periods.md
@@ -122,7 +122,7 @@ Example response:
Update a Freeze Period for the given `freeze_period_id`.
```plaintext
-PUT /projects/:id/freeze_periods/:tag_name
+PUT /projects/:id/freeze_periods/:freeze_period_id
```
| Attribute | Type | Required | Description |
diff --git a/doc/api/graphql/audit_report.md b/doc/api/graphql/audit_report.md
index a68af6e8646..ba9967f85f2 100644
--- a/doc/api/graphql/audit_report.md
+++ b/doc/api/graphql/audit_report.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/api/graphql/custom_emoji.md b/doc/api/graphql/custom_emoji.md
index a4d0acda8e7..cb5c0275e08 100644
--- a/doc/api/graphql/custom_emoji.md
+++ b/doc/api/graphql/custom_emoji.md
@@ -13,7 +13,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
> - To use in GitLab self-managed instances, ask a GitLab administrator to [enable it](#enable-or-disable-custom-emoji-api). **(FREE SELF)**
This in-development feature might not be available for your use. There can be
-[risks when enabling features still in development](../../user/feature_flags.md#risks-when-enabling-features-still-in-development).
+[risks when enabling features still in development](../../administration/feature_flags.md#risks-when-enabling-features-still-in-development).
Refer to this feature's version history for more details.
To use custom emoji in comments and descriptions, you can add them to a group using the GraphQL API.
diff --git a/doc/api/graphql/getting_started.md b/doc/api/graphql/getting_started.md
index 5b482d15c51..e3cf81148c2 100644
--- a/doc/api/graphql/getting_started.md
+++ b/doc/api/graphql/getting_started.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/api/graphql/img/custom_emoji_query_example.png b/doc/api/graphql/img/custom_emoji_query_example.png
index 2caccd6cd10..4e289d23696 100644
--- a/doc/api/graphql/img/custom_emoji_query_example.png
+++ b/doc/api/graphql/img/custom_emoji_query_example.png
Binary files differ
diff --git a/doc/api/graphql/index.md b/doc/api/graphql/index.md
index b7a82dba7e9..e77e6102594 100644
--- a/doc/api/graphql/index.md
+++ b/doc/api/graphql/index.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md
index db93accc86a..54709f56eb8 100644
--- a/doc/api/graphql/reference/index.md
+++ b/doc/api/graphql/reference/index.md
@@ -51,9 +51,19 @@ Returns [`CiConfig`](#ciconfig).
| ---- | ---- | ----------- |
| <a id="queryciconfigcontent"></a>`content` | [`String!`](#string) | Contents of `.gitlab-ci.yml`. |
| <a id="queryciconfigdryrun"></a>`dryRun` | [`Boolean`](#boolean) | Run pipeline creation simulation, or only do static check. |
-| <a id="queryciconfigprojectpath"></a>`projectPath` | [`ID!`](#id) | The project of the CI config. |
+| <a id="queryciconfigprojectpath"></a>`projectPath` | [`ID!`](#id) | Project of the CI config. |
| <a id="queryciconfigsha"></a>`sha` | [`String`](#string) | Sha for the pipeline. |
+### `Query.ciMinutesUsage`
+
+The monthly CI minutes usage data for the current user.
+
+Returns [`CiMinutesNamespaceMonthlyUsageConnection`](#ciminutesnamespacemonthlyusageconnection).
+
+This field returns a [connection](#connections). It accepts the
+four standard [pagination arguments](#connection-pagination-arguments):
+`before: String`, `after: String`, `first: Int`, `last: Int`.
+
### `Query.containerRepository`
Find a container repository.
@@ -134,7 +144,7 @@ Returns [`Group`](#group).
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="querygroupfullpath"></a>`fullPath` | [`ID!`](#id) | The full path of the project, group or namespace, e.g., `gitlab-org/gitlab-foss`. |
+| <a id="querygroupfullpath"></a>`fullPath` | [`ID!`](#id) | Full path of the project, group, or namespace. For example, `gitlab-org/gitlab-foss`. |
### `Query.instanceSecurityDashboard`
@@ -161,7 +171,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="queryinstancestatisticsmeasurementsidentifier"></a>`identifier` | [`MeasurementIdentifier!`](#measurementidentifier) | The type of measurement/statistics to retrieve. |
+| <a id="queryinstancestatisticsmeasurementsidentifier"></a>`identifier` | [`MeasurementIdentifier!`](#measurementidentifier) | Type of measurement or statistics to retrieve. |
| <a id="queryinstancestatisticsmeasurementsrecordedafter"></a>`recordedAfter` | [`Time`](#time) | Measurement recorded after this date. |
| <a id="queryinstancestatisticsmeasurementsrecordedbefore"></a>`recordedBefore` | [`Time`](#time) | Measurement recorded before this date. |
@@ -239,7 +249,7 @@ Returns [`Namespace`](#namespace).
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="querynamespacefullpath"></a>`fullPath` | [`ID!`](#id) | The full path of the project, group or namespace, e.g., `gitlab-org/gitlab-foss`. |
+| <a id="querynamespacefullpath"></a>`fullPath` | [`ID!`](#id) | Full path of the project, group, or namespace. For example, `gitlab-org/gitlab-foss`. |
### `Query.package`
@@ -263,7 +273,7 @@ Returns [`Project`](#project).
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="queryprojectfullpath"></a>`fullPath` | [`ID!`](#id) | The full path of the project, group or namespace, e.g., `gitlab-org/gitlab-foss`. |
+| <a id="queryprojectfullpath"></a>`fullPath` | [`ID!`](#id) | Full path of the project, group, or namespace. For example, `gitlab-org/gitlab-foss`. |
### `Query.projects`
@@ -368,7 +378,29 @@ four standard [pagination arguments](#connection-pagination-arguments):
| <a id="querysnippetsids"></a>`ids` | [`[SnippetID!]`](#snippetid) | Array of global snippet IDs. For example, `gid://gitlab/ProjectSnippet/1`. |
| <a id="querysnippetsprojectid"></a>`projectId` | [`ProjectID`](#projectid) | The ID of a project. |
| <a id="querysnippetstype"></a>`type` | [`TypeEnum`](#typeenum) | The type of snippet. |
-| <a id="querysnippetsvisibility"></a>`visibility` | [`VisibilityScopesEnum`](#visibilityscopesenum) | The visibility of the snippet. |
+| <a id="querysnippetsvisibility"></a>`visibility` | [`VisibilityScopesEnum`](#visibilityscopesenum) | Visibility of the snippet. |
+
+### `Query.timelogs`
+
+Find timelogs visible to the current user.
+
+Returns [`TimelogConnection`](#timelogconnection).
+
+This field returns a [connection](#connections). It accepts the
+four standard [pagination arguments](#connection-pagination-arguments):
+`before: String`, `after: String`, `first: Int`, `last: Int`.
+
+#### Arguments
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="querytimelogsenddate"></a>`endDate` | [`Time`](#time) | List timelogs within a date range where the logged date is equal to or before endDate. |
+| <a id="querytimelogsendtime"></a>`endTime` | [`Time`](#time) | List timelogs within a time range where the logged time is equal to or before endTime. |
+| <a id="querytimelogsgroupid"></a>`groupId` | [`GroupID`](#groupid) | List timelogs for a group. |
+| <a id="querytimelogsprojectid"></a>`projectId` | [`ProjectID`](#projectid) | List timelogs for a project. |
+| <a id="querytimelogsstartdate"></a>`startDate` | [`Time`](#time) | List timelogs within a date range where the logged date is equal to or after startDate. |
+| <a id="querytimelogsstarttime"></a>`startTime` | [`Time`](#time) | List timelogs within a time range where the logged time is equal to or after startTime. |
+| <a id="querytimelogsusername"></a>`username` | [`String`](#string) | List timelogs for a user. |
### `Query.usageTrendsMeasurements`
@@ -384,7 +416,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="queryusagetrendsmeasurementsidentifier"></a>`identifier` | [`MeasurementIdentifier!`](#measurementidentifier) | The type of measurement/statistics to retrieve. |
+| <a id="queryusagetrendsmeasurementsidentifier"></a>`identifier` | [`MeasurementIdentifier!`](#measurementidentifier) | Type of measurement or statistics to retrieve. |
| <a id="queryusagetrendsmeasurementsrecordedafter"></a>`recordedAfter` | [`Time`](#time) | Measurement recorded after this date. |
| <a id="queryusagetrendsmeasurementsrecordedbefore"></a>`recordedBefore` | [`Time`](#time) | Measurement recorded before this date. |
@@ -447,7 +479,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
### `Query.vulnerabilitiesCountByDay`
-Number of vulnerabilities per day for the projects on the current user's instance security dashboard.
+The historical number of vulnerabilities per day for the projects on the current user's instance security dashboard.
Returns [`VulnerabilitiesCountByDayConnection`](#vulnerabilitiescountbydayconnection).
@@ -525,7 +557,7 @@ Input type: `AdminSidekiqQueuesDeleteJobsInput`
| <a id="mutationadminsidekiqqueuesdeletejobsclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationadminsidekiqqueuesdeletejobsfeaturecategory"></a>`featureCategory` | [`String`](#string) | Delete jobs matching feature_category in the context metadata. |
| <a id="mutationadminsidekiqqueuesdeletejobsproject"></a>`project` | [`String`](#string) | Delete jobs matching project in the context metadata. |
-| <a id="mutationadminsidekiqqueuesdeletejobsqueuename"></a>`queueName` | [`String!`](#string) | The name of the queue to delete jobs from. |
+| <a id="mutationadminsidekiqqueuesdeletejobsqueuename"></a>`queueName` | [`String!`](#string) | Name of the queue to delete jobs from. |
| <a id="mutationadminsidekiqqueuesdeletejobsrelatedclass"></a>`relatedClass` | [`String`](#string) | Delete jobs matching related_class in the context metadata. |
| <a id="mutationadminsidekiqqueuesdeletejobsremoteip"></a>`remoteIp` | [`String`](#string) | Delete jobs matching remote_ip in the context metadata. |
| <a id="mutationadminsidekiqqueuesdeletejobsrootnamespace"></a>`rootNamespace` | [`String`](#string) | Delete jobs matching root_namespace in the context metadata. |
@@ -548,21 +580,21 @@ Input type: `AlertSetAssigneesInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="mutationalertsetassigneesassigneeusernames"></a>`assigneeUsernames` | [`[String!]!`](#string) | The usernames to assign to the alert. Replaces existing assignees by default. |
+| <a id="mutationalertsetassigneesassigneeusernames"></a>`assigneeUsernames` | [`[String!]!`](#string) | Usernames to assign to the alert. Replaces existing assignees by default. |
| <a id="mutationalertsetassigneesclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationalertsetassigneesiid"></a>`iid` | [`String!`](#string) | The IID of the alert to mutate. |
-| <a id="mutationalertsetassigneesoperationmode"></a>`operationMode` | [`MutationOperationMode`](#mutationoperationmode) | The operation to perform. Defaults to REPLACE. |
-| <a id="mutationalertsetassigneesprojectpath"></a>`projectPath` | [`ID!`](#id) | The project the alert to mutate is in. |
+| <a id="mutationalertsetassigneesiid"></a>`iid` | [`String!`](#string) | IID of the alert to mutate. |
+| <a id="mutationalertsetassigneesoperationmode"></a>`operationMode` | [`MutationOperationMode`](#mutationoperationmode) | Operation to perform. Defaults to REPLACE. |
+| <a id="mutationalertsetassigneesprojectpath"></a>`projectPath` | [`ID!`](#id) | Project the alert to mutate is in. |
#### Fields
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="mutationalertsetassigneesalert"></a>`alert` | [`AlertManagementAlert`](#alertmanagementalert) | The alert after mutation. |
+| <a id="mutationalertsetassigneesalert"></a>`alert` | [`AlertManagementAlert`](#alertmanagementalert) | Alert after mutation. |
| <a id="mutationalertsetassigneesclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationalertsetassigneeserrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationalertsetassigneesissue"></a>`issue` | [`Issue`](#issue) | The issue created after mutation. |
-| <a id="mutationalertsetassigneestodo"></a>`todo` | [`Todo`](#todo) | The to-do item after mutation. |
+| <a id="mutationalertsetassigneesissue"></a>`issue` | [`Issue`](#issue) | Issue created after mutation. |
+| <a id="mutationalertsetassigneestodo"></a>`todo` | [`Todo`](#todo) | To-do item after mutation. |
### `Mutation.alertTodoCreate`
@@ -573,18 +605,18 @@ Input type: `AlertTodoCreateInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationalerttodocreateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationalerttodocreateiid"></a>`iid` | [`String!`](#string) | The IID of the alert to mutate. |
-| <a id="mutationalerttodocreateprojectpath"></a>`projectPath` | [`ID!`](#id) | The project the alert to mutate is in. |
+| <a id="mutationalerttodocreateiid"></a>`iid` | [`String!`](#string) | IID of the alert to mutate. |
+| <a id="mutationalerttodocreateprojectpath"></a>`projectPath` | [`ID!`](#id) | Project the alert to mutate is in. |
#### Fields
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="mutationalerttodocreatealert"></a>`alert` | [`AlertManagementAlert`](#alertmanagementalert) | The alert after mutation. |
+| <a id="mutationalerttodocreatealert"></a>`alert` | [`AlertManagementAlert`](#alertmanagementalert) | Alert after mutation. |
| <a id="mutationalerttodocreateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationalerttodocreateerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationalerttodocreateissue"></a>`issue` | [`Issue`](#issue) | The issue created after mutation. |
-| <a id="mutationalerttodocreatetodo"></a>`todo` | [`Todo`](#todo) | The to-do item after mutation. |
+| <a id="mutationalerttodocreateissue"></a>`issue` | [`Issue`](#issue) | Issue created after mutation. |
+| <a id="mutationalerttodocreatetodo"></a>`todo` | [`Todo`](#todo) | To-do item after mutation. |
### `Mutation.apiFuzzingCiConfigurationCreate`
@@ -620,7 +652,7 @@ Input type: `AwardEmojiAddInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="mutationawardemojiaddawardableid"></a>`awardableId` | [`AwardableID!`](#awardableid) | The global ID of the awardable resource. |
+| <a id="mutationawardemojiaddawardableid"></a>`awardableId` | [`AwardableID!`](#awardableid) | Global ID of the awardable resource. |
| <a id="mutationawardemojiaddclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationawardemojiaddname"></a>`name` | [`String!`](#string) | The emoji name. |
@@ -628,7 +660,7 @@ Input type: `AwardEmojiAddInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="mutationawardemojiaddawardemoji"></a>`awardEmoji` | [`AwardEmoji`](#awardemoji) | The award emoji after mutation. |
+| <a id="mutationawardemojiaddawardemoji"></a>`awardEmoji` | [`AwardEmoji`](#awardemoji) | Award emoji after mutation. |
| <a id="mutationawardemojiaddclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationawardemojiadderrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
@@ -640,7 +672,7 @@ Input type: `AwardEmojiRemoveInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="mutationawardemojiremoveawardableid"></a>`awardableId` | [`AwardableID!`](#awardableid) | The global ID of the awardable resource. |
+| <a id="mutationawardemojiremoveawardableid"></a>`awardableId` | [`AwardableID!`](#awardableid) | Global ID of the awardable resource. |
| <a id="mutationawardemojiremoveclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationawardemojiremovename"></a>`name` | [`String!`](#string) | The emoji name. |
@@ -648,7 +680,7 @@ Input type: `AwardEmojiRemoveInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="mutationawardemojiremoveawardemoji"></a>`awardEmoji` | [`AwardEmoji`](#awardemoji) | The award emoji after mutation. |
+| <a id="mutationawardemojiremoveawardemoji"></a>`awardEmoji` | [`AwardEmoji`](#awardemoji) | Award emoji after mutation. |
| <a id="mutationawardemojiremoveclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationawardemojiremoveerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
@@ -660,7 +692,7 @@ Input type: `AwardEmojiToggleInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="mutationawardemojitoggleawardableid"></a>`awardableId` | [`AwardableID!`](#awardableid) | The global ID of the awardable resource. |
+| <a id="mutationawardemojitoggleawardableid"></a>`awardableId` | [`AwardableID!`](#awardableid) | Global ID of the awardable resource. |
| <a id="mutationawardemojitoggleclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationawardemojitogglename"></a>`name` | [`String!`](#string) | The emoji name. |
@@ -668,7 +700,7 @@ Input type: `AwardEmojiToggleInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="mutationawardemojitoggleawardemoji"></a>`awardEmoji` | [`AwardEmoji`](#awardemoji) | The award emoji after mutation. |
+| <a id="mutationawardemojitoggleawardemoji"></a>`awardEmoji` | [`AwardEmoji`](#awardemoji) | Award emoji after mutation. |
| <a id="mutationawardemojitoggleclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationawardemojitoggleerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
| <a id="mutationawardemojitoggletoggledon"></a>`toggledOn` | [`Boolean!`](#boolean) | Indicates the status of the emoji. True if the toggle awarded the emoji, and false if the toggle removed the emoji. |
@@ -782,7 +814,7 @@ Input type: `CiCdSettingsUpdateInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="mutationcicdsettingsupdatecicdsettings"></a>`ciCdSettings` | [`ProjectCiCdSetting!`](#projectcicdsetting) | The CI/CD settings after mutation. |
+| <a id="mutationcicdsettingsupdatecicdsettings"></a>`ciCdSettings` | [`ProjectCiCdSetting!`](#projectcicdsetting) | CI/CD settings after mutation. |
| <a id="mutationcicdsettingsupdateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationcicdsettingsupdateerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
@@ -795,14 +827,14 @@ Input type: `CiJobTokenScopeAddProjectInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationcijobtokenscopeaddprojectclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationcijobtokenscopeaddprojectprojectpath"></a>`projectPath` | [`ID!`](#id) | The project that the CI job token scope belongs to. |
-| <a id="mutationcijobtokenscopeaddprojecttargetprojectpath"></a>`targetProjectPath` | [`ID!`](#id) | The project to be added to the CI job token scope. |
+| <a id="mutationcijobtokenscopeaddprojectprojectpath"></a>`projectPath` | [`ID!`](#id) | Project that the CI job token scope belongs to. |
+| <a id="mutationcijobtokenscopeaddprojecttargetprojectpath"></a>`targetProjectPath` | [`ID!`](#id) | Project to be added to the CI job token scope. |
#### Fields
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="mutationcijobtokenscopeaddprojectcijobtokenscope"></a>`ciJobTokenScope` | [`CiJobTokenScopeType`](#cijobtokenscopetype) | The CI job token's scope of access. |
+| <a id="mutationcijobtokenscopeaddprojectcijobtokenscope"></a>`ciJobTokenScope` | [`CiJobTokenScopeType`](#cijobtokenscopetype) | CI job token's scope of access. |
| <a id="mutationcijobtokenscopeaddprojectclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationcijobtokenscopeaddprojecterrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
@@ -815,14 +847,14 @@ Input type: `CiJobTokenScopeRemoveProjectInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationcijobtokenscoperemoveprojectclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationcijobtokenscoperemoveprojectprojectpath"></a>`projectPath` | [`ID!`](#id) | The project that the CI job token scope belongs to. |
-| <a id="mutationcijobtokenscoperemoveprojecttargetprojectpath"></a>`targetProjectPath` | [`ID!`](#id) | The project to be removed from the CI job token scope. |
+| <a id="mutationcijobtokenscoperemoveprojectprojectpath"></a>`projectPath` | [`ID!`](#id) | Project that the CI job token scope belongs to. |
+| <a id="mutationcijobtokenscoperemoveprojecttargetprojectpath"></a>`targetProjectPath` | [`ID!`](#id) | Project to be removed from the CI job token scope. |
#### Fields
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="mutationcijobtokenscoperemoveprojectcijobtokenscope"></a>`ciJobTokenScope` | [`CiJobTokenScopeType`](#cijobtokenscopetype) | The CI job token's scope of access. |
+| <a id="mutationcijobtokenscoperemoveprojectcijobtokenscope"></a>`ciJobTokenScope` | [`CiJobTokenScopeType`](#cijobtokenscopetype) | CI job token's scope of access. |
| <a id="mutationcijobtokenscoperemoveprojectclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationcijobtokenscoperemoveprojecterrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
@@ -904,7 +936,7 @@ Input type: `CommitCreateInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationcommitcreateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationcommitcreatecommit"></a>`commit` | [`Commit`](#commit) | The commit after mutation. |
+| <a id="mutationcommitcreatecommit"></a>`commit` | [`Commit`](#commit) | Commit after mutation. |
| <a id="mutationcommitcreatecommitpipelinepath"></a>`commitPipelinePath` | [`String`](#string) | ETag path for the commit's pipeline. |
| <a id="mutationcommitcreatecontent"></a>`content` | [`[String!]`](#string) | Contents of the commit. |
| <a id="mutationcommitcreateerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
@@ -992,18 +1024,18 @@ Input type: `CreateAlertIssueInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationcreatealertissueclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationcreatealertissueiid"></a>`iid` | [`String!`](#string) | The IID of the alert to mutate. |
-| <a id="mutationcreatealertissueprojectpath"></a>`projectPath` | [`ID!`](#id) | The project the alert to mutate is in. |
+| <a id="mutationcreatealertissueiid"></a>`iid` | [`String!`](#string) | IID of the alert to mutate. |
+| <a id="mutationcreatealertissueprojectpath"></a>`projectPath` | [`ID!`](#id) | Project the alert to mutate is in. |
#### Fields
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="mutationcreatealertissuealert"></a>`alert` | [`AlertManagementAlert`](#alertmanagementalert) | The alert after mutation. |
+| <a id="mutationcreatealertissuealert"></a>`alert` | [`AlertManagementAlert`](#alertmanagementalert) | Alert after mutation. |
| <a id="mutationcreatealertissueclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationcreatealertissueerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationcreatealertissueissue"></a>`issue` | [`Issue`](#issue) | The issue created after mutation. |
-| <a id="mutationcreatealertissuetodo"></a>`todo` | [`Todo`](#todo) | The to-do item after mutation. |
+| <a id="mutationcreatealertissueissue"></a>`issue` | [`Issue`](#issue) | Issue created after mutation. |
+| <a id="mutationcreatealertissuetodo"></a>`todo` | [`Todo`](#todo) | To-do item after mutation. |
### `Mutation.createAnnotation`
@@ -1014,18 +1046,18 @@ Input type: `CreateAnnotationInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationcreateannotationclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationcreateannotationclusterid"></a>`clusterId` | [`ClustersClusterID`](#clustersclusterid) | The global ID of the cluster to add an annotation to. |
-| <a id="mutationcreateannotationdashboardpath"></a>`dashboardPath` | [`String!`](#string) | The path to a file defining the dashboard on which the annotation should be added. |
-| <a id="mutationcreateannotationdescription"></a>`description` | [`String!`](#string) | The description of the annotation. |
+| <a id="mutationcreateannotationclusterid"></a>`clusterId` | [`ClustersClusterID`](#clustersclusterid) | Global ID of the cluster to add an annotation to. |
+| <a id="mutationcreateannotationdashboardpath"></a>`dashboardPath` | [`String!`](#string) | Path to a file defining the dashboard on which the annotation should be added. |
+| <a id="mutationcreateannotationdescription"></a>`description` | [`String!`](#string) | Description of the annotation. |
| <a id="mutationcreateannotationendingat"></a>`endingAt` | [`Time`](#time) | Timestamp indicating ending moment to which the annotation relates. |
-| <a id="mutationcreateannotationenvironmentid"></a>`environmentId` | [`EnvironmentID`](#environmentid) | The global ID of the environment to add an annotation to. |
+| <a id="mutationcreateannotationenvironmentid"></a>`environmentId` | [`EnvironmentID`](#environmentid) | Global ID of the environment to add an annotation to. |
| <a id="mutationcreateannotationstartingat"></a>`startingAt` | [`Time!`](#time) | Timestamp indicating starting moment to which the annotation relates. |
#### Fields
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="mutationcreateannotationannotation"></a>`annotation` | [`MetricsDashboardAnnotation`](#metricsdashboardannotation) | The created annotation. |
+| <a id="mutationcreateannotationannotation"></a>`annotation` | [`MetricsDashboardAnnotation`](#metricsdashboardannotation) | Created annotation. |
| <a id="mutationcreateannotationclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationcreateannotationerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
@@ -1046,7 +1078,7 @@ Input type: `CreateBoardInput`
| <a id="mutationcreateboardlabelids"></a>`labelIds` | [`[LabelID!]`](#labelid) | IDs of labels to be added to the board. |
| <a id="mutationcreateboardlabels"></a>`labels` | [`[String!]`](#string) | Labels of the issue. |
| <a id="mutationcreateboardmilestoneid"></a>`milestoneId` | [`MilestoneID`](#milestoneid) | ID of milestone to be assigned to the board. |
-| <a id="mutationcreateboardname"></a>`name` | [`String`](#string) | The board name. |
+| <a id="mutationcreateboardname"></a>`name` | [`String`](#string) | Board name. |
| <a id="mutationcreateboardprojectpath"></a>`projectPath` | [`ID`](#id) | Full path of the project with which the resource is associated. |
| <a id="mutationcreateboardweight"></a>`weight` | [`Int`](#int) | Weight value to be assigned to the board. |
@@ -1054,7 +1086,7 @@ Input type: `CreateBoardInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="mutationcreateboardboard"></a>`board` | [`Board`](#board) | The board after mutation. |
+| <a id="mutationcreateboardboard"></a>`board` | [`Board`](#board) | Board after mutation. |
| <a id="mutationcreateboardclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationcreateboarderrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
@@ -1139,7 +1171,7 @@ Input type: `CreateCustomEmojiInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationcreatecustomemojiclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationcreatecustomemojicustomemoji"></a>`customEmoji` | [`CustomEmoji`](#customemoji) | The new custom emoji. |
+| <a id="mutationcreatecustomemojicustomemoji"></a>`customEmoji` | [`CustomEmoji`](#customemoji) | New custom emoji. |
| <a id="mutationcreatecustomemojierrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
### `Mutation.createDiffNote`
@@ -1152,8 +1184,8 @@ Input type: `CreateDiffNoteInput`
| ---- | ---- | ----------- |
| <a id="mutationcreatediffnotebody"></a>`body` | [`String!`](#string) | Content of the note. |
| <a id="mutationcreatediffnoteclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationcreatediffnoteconfidential"></a>`confidential` | [`Boolean`](#boolean) | The confidentiality flag of a note. Default is false. |
-| <a id="mutationcreatediffnotenoteableid"></a>`noteableId` | [`NoteableID!`](#noteableid) | The global ID of the resource to add a note to. |
+| <a id="mutationcreatediffnoteconfidential"></a>`confidential` | [`Boolean`](#boolean) | Confidentiality flag of a note. Default is false. |
+| <a id="mutationcreatediffnotenoteableid"></a>`noteableId` | [`NoteableID!`](#noteableid) | Global ID of the resource to add a note to. |
| <a id="mutationcreatediffnoteposition"></a>`position` | [`DiffPositionInput!`](#diffpositioninput) | The position of this note on a diff. |
#### Fields
@@ -1162,7 +1194,7 @@ Input type: `CreateDiffNoteInput`
| ---- | ---- | ----------- |
| <a id="mutationcreatediffnoteclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationcreatediffnoteerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationcreatediffnotenote"></a>`note` | [`Note`](#note) | The note after mutation. |
+| <a id="mutationcreatediffnotenote"></a>`note` | [`Note`](#note) | Note after mutation. |
### `Mutation.createEpic`
@@ -1202,8 +1234,8 @@ Input type: `CreateImageDiffNoteInput`
| ---- | ---- | ----------- |
| <a id="mutationcreateimagediffnotebody"></a>`body` | [`String!`](#string) | Content of the note. |
| <a id="mutationcreateimagediffnoteclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationcreateimagediffnoteconfidential"></a>`confidential` | [`Boolean`](#boolean) | The confidentiality flag of a note. Default is false. |
-| <a id="mutationcreateimagediffnotenoteableid"></a>`noteableId` | [`NoteableID!`](#noteableid) | The global ID of the resource to add a note to. |
+| <a id="mutationcreateimagediffnoteconfidential"></a>`confidential` | [`Boolean`](#boolean) | Confidentiality flag of a note. Default is false. |
+| <a id="mutationcreateimagediffnotenoteableid"></a>`noteableId` | [`NoteableID!`](#noteableid) | Global ID of the resource to add a note to. |
| <a id="mutationcreateimagediffnoteposition"></a>`position` | [`DiffImagePositionInput!`](#diffimagepositioninput) | The position of this note on a diff. |
#### Fields
@@ -1212,7 +1244,7 @@ Input type: `CreateImageDiffNoteInput`
| ---- | ---- | ----------- |
| <a id="mutationcreateimagediffnoteclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationcreateimagediffnoteerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationcreateimagediffnotenote"></a>`note` | [`Note`](#note) | The note after mutation. |
+| <a id="mutationcreateimagediffnotenote"></a>`note` | [`Note`](#note) | Note after mutation. |
### `Mutation.createIssue`
@@ -1222,21 +1254,21 @@ Input type: `CreateIssueInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="mutationcreateissueassigneeids"></a>`assigneeIds` | [`[UserID!]`](#userid) | The array of user IDs to assign to the issue. |
+| <a id="mutationcreateissueassigneeids"></a>`assigneeIds` | [`[UserID!]`](#userid) | Array of user IDs to assign to the issue. |
| <a id="mutationcreateissueclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationcreateissueconfidential"></a>`confidential` | [`Boolean`](#boolean) | Indicates the issue is confidential. |
| <a id="mutationcreateissuecreatedat"></a>`createdAt` | [`Time`](#time) | Timestamp when the issue was created. Available only for admins and project owners. |
| <a id="mutationcreateissuedescription"></a>`description` | [`String`](#string) | Description of the issue. |
-| <a id="mutationcreateissuediscussiontoresolve"></a>`discussionToResolve` | [`String`](#string) | The ID of a discussion to resolve. Also pass `merge_request_to_resolve_discussions_of`. |
+| <a id="mutationcreateissuediscussiontoresolve"></a>`discussionToResolve` | [`String`](#string) | ID of a discussion to resolve. Also pass `merge_request_to_resolve_discussions_of`. |
| <a id="mutationcreateissueduedate"></a>`dueDate` | [`ISO8601Date`](#iso8601date) | Due date of the issue. |
| <a id="mutationcreateissueepicid"></a>`epicId` | [`EpicID`](#epicid) | The ID of an epic to associate the issue with. |
| <a id="mutationcreateissuehealthstatus"></a>`healthStatus` | [`HealthStatus`](#healthstatus) | The desired health status. |
-| <a id="mutationcreateissueiid"></a>`iid` | [`Int`](#int) | The IID (internal ID) of a project issue. Only admins and project owners can modify. |
-| <a id="mutationcreateissuelabelids"></a>`labelIds` | [`[LabelID!]`](#labelid) | The IDs of labels to be added to the issue. |
+| <a id="mutationcreateissueiid"></a>`iid` | [`Int`](#int) | IID (internal ID) of a project issue. Only admins and project owners can modify. |
+| <a id="mutationcreateissuelabelids"></a>`labelIds` | [`[LabelID!]`](#labelid) | IDs of labels to be added to the issue. |
| <a id="mutationcreateissuelabels"></a>`labels` | [`[String!]`](#string) | Labels of the issue. |
| <a id="mutationcreateissuelocked"></a>`locked` | [`Boolean`](#boolean) | Indicates discussion is locked on the issue. |
-| <a id="mutationcreateissuemergerequesttoresolvediscussionsof"></a>`mergeRequestToResolveDiscussionsOf` | [`MergeRequestID`](#mergerequestid) | The IID of a merge request for which to resolve discussions. |
-| <a id="mutationcreateissuemilestoneid"></a>`milestoneId` | [`MilestoneID`](#milestoneid) | The ID of the milestone to assign to the issue. On update milestone will be removed if set to null. |
+| <a id="mutationcreateissuemergerequesttoresolvediscussionsof"></a>`mergeRequestToResolveDiscussionsOf` | [`MergeRequestID`](#mergerequestid) | IID of a merge request for which to resolve discussions. |
+| <a id="mutationcreateissuemilestoneid"></a>`milestoneId` | [`MilestoneID`](#milestoneid) | ID of the milestone to assign to the issue. On update milestone will be removed if set to null. |
| <a id="mutationcreateissueprojectpath"></a>`projectPath` | [`ID!`](#id) | Project full path the issue is associated with. |
| <a id="mutationcreateissuetitle"></a>`title` | [`String!`](#string) | Title of the issue. |
| <a id="mutationcreateissuetype"></a>`type` | [`IssueType`](#issuetype) | Type of the issue. |
@@ -1248,7 +1280,7 @@ Input type: `CreateIssueInput`
| ---- | ---- | ----------- |
| <a id="mutationcreateissueclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationcreateissueerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationcreateissueissue"></a>`issue` | [`Issue`](#issue) | The issue after mutation. |
+| <a id="mutationcreateissueissue"></a>`issue` | [`Issue`](#issue) | Issue after mutation. |
### `Mutation.createIteration`
@@ -1289,9 +1321,9 @@ Input type: `CreateNoteInput`
| ---- | ---- | ----------- |
| <a id="mutationcreatenotebody"></a>`body` | [`String!`](#string) | Content of the note. |
| <a id="mutationcreatenoteclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationcreatenoteconfidential"></a>`confidential` | [`Boolean`](#boolean) | The confidentiality flag of a note. Default is false. |
-| <a id="mutationcreatenotediscussionid"></a>`discussionId` | [`DiscussionID`](#discussionid) | The global ID of the discussion this note is in reply to. |
-| <a id="mutationcreatenotenoteableid"></a>`noteableId` | [`NoteableID!`](#noteableid) | The global ID of the resource to add a note to. |
+| <a id="mutationcreatenoteconfidential"></a>`confidential` | [`Boolean`](#boolean) | Confidentiality flag of a note. Default is false. |
+| <a id="mutationcreatenotediscussionid"></a>`discussionId` | [`DiscussionID`](#discussionid) | Global ID of the discussion this note is in reply to. |
+| <a id="mutationcreatenotenoteableid"></a>`noteableId` | [`NoteableID!`](#noteableid) | Global ID of the resource to add a note to. |
#### Fields
@@ -1299,7 +1331,7 @@ Input type: `CreateNoteInput`
| ---- | ---- | ----------- |
| <a id="mutationcreatenoteclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationcreatenoteerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationcreatenotenote"></a>`note` | [`Note`](#note) | The note after mutation. |
+| <a id="mutationcreatenotenote"></a>`note` | [`Note`](#note) | Note after mutation. |
### `Mutation.createRequirement`
@@ -1334,11 +1366,11 @@ Input type: `CreateSnippetInput`
| <a id="mutationcreatesnippetcaptcharesponse"></a>`captchaResponse` **{warning-solid}** | [`String`](#string) | **Deprecated:** Use spam protection with HTTP headers instead. Deprecated in 13.11. |
| <a id="mutationcreatesnippetclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationcreatesnippetdescription"></a>`description` | [`String`](#string) | Description of the snippet. |
-| <a id="mutationcreatesnippetprojectpath"></a>`projectPath` | [`ID`](#id) | The project full path the snippet is associated with. |
+| <a id="mutationcreatesnippetprojectpath"></a>`projectPath` | [`ID`](#id) | Full path of the project the snippet is associated with. |
| <a id="mutationcreatesnippetspamlogid"></a>`spamLogId` **{warning-solid}** | [`Int`](#int) | **Deprecated:** Use spam protection with HTTP headers instead. Deprecated in 13.11. |
| <a id="mutationcreatesnippettitle"></a>`title` | [`String!`](#string) | Title of the snippet. |
-| <a id="mutationcreatesnippetuploadedfiles"></a>`uploadedFiles` | [`[String!]`](#string) | The paths to files uploaded in the snippet description. |
-| <a id="mutationcreatesnippetvisibilitylevel"></a>`visibilityLevel` | [`VisibilityLevelsEnum!`](#visibilitylevelsenum) | The visibility level of the snippet. |
+| <a id="mutationcreatesnippetuploadedfiles"></a>`uploadedFiles` | [`[String!]`](#string) | Paths to files uploaded in the snippet description. |
+| <a id="mutationcreatesnippetvisibilitylevel"></a>`visibilityLevel` | [`VisibilityLevelsEnum!`](#visibilitylevelsenum) | Visibility level of the snippet. |
#### Fields
@@ -1348,7 +1380,7 @@ Input type: `CreateSnippetInput`
| <a id="mutationcreatesnippetclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationcreatesnippeterrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
| <a id="mutationcreatesnippetneedscaptcharesponse"></a>`needsCaptchaResponse` **{warning-solid}** | [`Boolean`](#boolean) | **Deprecated:** Use spam protection with HTTP headers instead. Deprecated in 13.11. |
-| <a id="mutationcreatesnippetsnippet"></a>`snippet` | [`Snippet`](#snippet) | The snippet after mutation. |
+| <a id="mutationcreatesnippetsnippet"></a>`snippet` | [`Snippet`](#snippet) | Snippet after mutation. |
| <a id="mutationcreatesnippetspam"></a>`spam` **{warning-solid}** | [`Boolean`](#boolean) | **Deprecated:** Use spam protection with HTTP headers instead. Deprecated in 13.11. |
| <a id="mutationcreatesnippetspamlogid"></a>`spamLogId` **{warning-solid}** | [`Int`](#int) | **Deprecated:** Use spam protection with HTTP headers instead. Deprecated in 13.11. |
@@ -1717,9 +1749,9 @@ Input type: `DesignManagementDeleteInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationdesignmanagementdeleteclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationdesignmanagementdeletefilenames"></a>`filenames` | [`[String!]!`](#string) | The filenames of the designs to delete. |
-| <a id="mutationdesignmanagementdeleteiid"></a>`iid` | [`ID!`](#id) | The IID of the issue to modify designs for. |
-| <a id="mutationdesignmanagementdeleteprojectpath"></a>`projectPath` | [`ID!`](#id) | The project where the issue is to upload designs for. |
+| <a id="mutationdesignmanagementdeletefilenames"></a>`filenames` | [`[String!]!`](#string) | Filenames of the designs to delete. |
+| <a id="mutationdesignmanagementdeleteiid"></a>`iid` | [`ID!`](#id) | IID of the issue to modify designs for. |
+| <a id="mutationdesignmanagementdeleteprojectpath"></a>`projectPath` | [`ID!`](#id) | Project where the issue is to upload designs for. |
#### Fields
@@ -1727,7 +1759,7 @@ Input type: `DesignManagementDeleteInput`
| ---- | ---- | ----------- |
| <a id="mutationdesignmanagementdeleteclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationdesignmanagementdeleteerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationdesignmanagementdeleteversion"></a>`version` | [`DesignVersion`](#designversion) | The new version in which the designs are deleted. |
+| <a id="mutationdesignmanagementdeleteversion"></a>`version` | [`DesignVersion`](#designversion) | New version in which the designs are deleted. |
### `Mutation.designManagementMove`
@@ -1747,7 +1779,7 @@ Input type: `DesignManagementMoveInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationdesignmanagementmoveclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationdesignmanagementmovedesigncollection"></a>`designCollection` | [`DesignCollection`](#designcollection) | The current state of the collection. |
+| <a id="mutationdesignmanagementmovedesigncollection"></a>`designCollection` | [`DesignCollection`](#designcollection) | Current state of the collection. |
| <a id="mutationdesignmanagementmoveerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
### `Mutation.designManagementUpload`
@@ -1759,16 +1791,16 @@ Input type: `DesignManagementUploadInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationdesignmanagementuploadclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationdesignmanagementuploadfiles"></a>`files` | [`[Upload!]!`](#upload) | The files to upload. |
-| <a id="mutationdesignmanagementuploadiid"></a>`iid` | [`ID!`](#id) | The IID of the issue to modify designs for. |
-| <a id="mutationdesignmanagementuploadprojectpath"></a>`projectPath` | [`ID!`](#id) | The project where the issue is to upload designs for. |
+| <a id="mutationdesignmanagementuploadfiles"></a>`files` | [`[Upload!]!`](#upload) | Files to upload. |
+| <a id="mutationdesignmanagementuploadiid"></a>`iid` | [`ID!`](#id) | IID of the issue to modify designs for. |
+| <a id="mutationdesignmanagementuploadprojectpath"></a>`projectPath` | [`ID!`](#id) | Project where the issue is to upload designs for. |
#### Fields
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationdesignmanagementuploadclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationdesignmanagementuploaddesigns"></a>`designs` | [`[Design!]!`](#design) | The designs that were uploaded by the mutation. |
+| <a id="mutationdesignmanagementuploaddesigns"></a>`designs` | [`[Design!]!`](#design) | Designs that were uploaded by the mutation. |
| <a id="mutationdesignmanagementuploaderrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
| <a id="mutationdesignmanagementuploadskippeddesigns"></a>`skippedDesigns` | [`[Design!]!`](#design) | Any designs that were skipped from the upload due to there being no change to their content since their last version. |
@@ -1781,13 +1813,13 @@ Input type: `DestroyBoardInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationdestroyboardclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationdestroyboardid"></a>`id` | [`BoardID!`](#boardid) | The global ID of the board to destroy. |
+| <a id="mutationdestroyboardid"></a>`id` | [`BoardID!`](#boardid) | Global ID of the board to destroy. |
#### Fields
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="mutationdestroyboardboard"></a>`board` | [`Board`](#board) | The board after mutation. |
+| <a id="mutationdestroyboardboard"></a>`board` | [`Board`](#board) | Board after mutation. |
| <a id="mutationdestroyboardclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationdestroyboarderrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
@@ -1808,7 +1840,7 @@ Input type: `DestroyBoardListInput`
| ---- | ---- | ----------- |
| <a id="mutationdestroyboardlistclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationdestroyboardlisterrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationdestroyboardlistlist"></a>`list` | [`BoardList`](#boardlist) | The list after mutation. |
+| <a id="mutationdestroyboardlistlist"></a>`list` | [`BoardList`](#boardlist) | List after mutation. |
### `Mutation.destroyComplianceFramework`
@@ -1844,7 +1876,7 @@ Input type: `DestroyContainerRepositoryInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationdestroycontainerrepositoryclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationdestroycontainerrepositorycontainerrepository"></a>`containerRepository` | [`ContainerRepository!`](#containerrepository) | The container repository policy after scheduling the deletion. |
+| <a id="mutationdestroycontainerrepositorycontainerrepository"></a>`containerRepository` | [`ContainerRepository!`](#containerrepository) | Container repository policy after scheduling the deletion. |
| <a id="mutationdestroycontainerrepositoryerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
### `Mutation.destroyContainerRepositoryTags`
@@ -1895,7 +1927,7 @@ Input type: `DestroyNoteInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationdestroynoteclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationdestroynoteid"></a>`id` | [`NoteID!`](#noteid) | The global ID of the note to destroy. |
+| <a id="mutationdestroynoteid"></a>`id` | [`NoteID!`](#noteid) | Global ID of the note to destroy. |
#### Fields
@@ -1903,7 +1935,7 @@ Input type: `DestroyNoteInput`
| ---- | ---- | ----------- |
| <a id="mutationdestroynoteclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationdestroynoteerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationdestroynotenote"></a>`note` | [`Note`](#note) | The note after mutation. |
+| <a id="mutationdestroynotenote"></a>`note` | [`Note`](#note) | Note after mutation. |
### `Mutation.destroyPackage`
@@ -1923,6 +1955,24 @@ Input type: `DestroyPackageInput`
| <a id="mutationdestroypackageclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationdestroypackageerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
+### `Mutation.destroyPackageFile`
+
+Input type: `DestroyPackageFileInput`
+
+#### Arguments
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="mutationdestroypackagefileclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
+| <a id="mutationdestroypackagefileid"></a>`id` | [`PackagesPackageFileID!`](#packagespackagefileid) | ID of the Package file. |
+
+#### Fields
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="mutationdestroypackagefileclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
+| <a id="mutationdestroypackagefileerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
+
### `Mutation.destroySnippet`
Input type: `DestroySnippetInput`
@@ -1932,7 +1982,7 @@ Input type: `DestroySnippetInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationdestroysnippetclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationdestroysnippetid"></a>`id` | [`SnippetID!`](#snippetid) | The global ID of the snippet to destroy. |
+| <a id="mutationdestroysnippetid"></a>`id` | [`SnippetID!`](#snippetid) | Global ID of the snippet to destroy. |
#### Fields
@@ -1940,7 +1990,7 @@ Input type: `DestroySnippetInput`
| ---- | ---- | ----------- |
| <a id="mutationdestroysnippetclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationdestroysnippeterrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationdestroysnippetsnippet"></a>`snippet` | [`Snippet`](#snippet) | The snippet after mutation. |
+| <a id="mutationdestroysnippetsnippet"></a>`snippet` | [`Snippet`](#snippet) | Snippet after mutation. |
### `Mutation.disableDevopsAdoptionNamespace`
@@ -1973,7 +2023,7 @@ Input type: `DiscussionToggleResolveInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationdiscussiontoggleresolveclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationdiscussiontoggleresolveid"></a>`id` | [`DiscussionID!`](#discussionid) | The global ID of the discussion. |
+| <a id="mutationdiscussiontoggleresolveid"></a>`id` | [`DiscussionID!`](#discussionid) | Global ID of the discussion. |
| <a id="mutationdiscussiontoggleresolveresolve"></a>`resolve` | [`Boolean!`](#boolean) | Will resolve the discussion when true, and unresolve the discussion when false. |
#### Fields
@@ -1981,7 +2031,7 @@ Input type: `DiscussionToggleResolveInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationdiscussiontoggleresolveclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationdiscussiontoggleresolvediscussion"></a>`discussion` | [`Discussion`](#discussion) | The discussion after mutation. |
+| <a id="mutationdiscussiontoggleresolvediscussion"></a>`discussion` | [`Discussion`](#discussion) | Discussion after mutation. |
| <a id="mutationdiscussiontoggleresolveerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
### `Mutation.echoCreate`
@@ -2040,8 +2090,8 @@ Input type: `EnvironmentsCanaryIngressUpdateInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationenvironmentscanaryingressupdateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationenvironmentscanaryingressupdateid"></a>`id` | [`EnvironmentID!`](#environmentid) | The global ID of the environment to update. |
-| <a id="mutationenvironmentscanaryingressupdateweight"></a>`weight` | [`Int!`](#int) | The weight of the Canary Ingress. |
+| <a id="mutationenvironmentscanaryingressupdateid"></a>`id` | [`EnvironmentID!`](#environmentid) | Global ID of the environment to update. |
+| <a id="mutationenvironmentscanaryingressupdateweight"></a>`weight` | [`Int!`](#int) | Weight of the Canary Ingress. |
#### Fields
@@ -2087,7 +2137,7 @@ Input type: `EpicBoardCreateInput`
| <a id="mutationepicboardcreatehideclosedlist"></a>`hideClosedList` | [`Boolean`](#boolean) | Whether or not closed list is hidden. |
| <a id="mutationepicboardcreatelabelids"></a>`labelIds` | [`[LabelID!]`](#labelid) | IDs of labels to be added to the board. |
| <a id="mutationepicboardcreatelabels"></a>`labels` | [`[String!]`](#string) | Labels of the issue. |
-| <a id="mutationepicboardcreatename"></a>`name` | [`String`](#string) | The board name. |
+| <a id="mutationepicboardcreatename"></a>`name` | [`String`](#string) | Board name. |
#### Fields
@@ -2153,7 +2203,7 @@ Input type: `EpicBoardUpdateInput`
| <a id="mutationepicboardupdateid"></a>`id` | [`BoardsEpicBoardID!`](#boardsepicboardid) | The epic board global ID. |
| <a id="mutationepicboardupdatelabelids"></a>`labelIds` | [`[LabelID!]`](#labelid) | IDs of labels to be added to the board. |
| <a id="mutationepicboardupdatelabels"></a>`labels` | [`[String!]`](#string) | Labels of the issue. |
-| <a id="mutationepicboardupdatename"></a>`name` | [`String`](#string) | The board name. |
+| <a id="mutationepicboardupdatename"></a>`name` | [`String`](#string) | Board name. |
#### Fields
@@ -2332,6 +2382,26 @@ Input type: `GitlabSubscriptionActivateInput`
| <a id="mutationgitlabsubscriptionactivateerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
| <a id="mutationgitlabsubscriptionactivatelicense"></a>`license` | [`CurrentLicense`](#currentlicense) | The current license. |
+### `Mutation.groupUpdate`
+
+Input type: `GroupUpdateInput`
+
+#### Arguments
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="mutationgroupupdateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
+| <a id="mutationgroupupdatefullpath"></a>`fullPath` | [`ID!`](#id) | Full path of the group that will be updated. |
+| <a id="mutationgroupupdatesharedrunnerssetting"></a>`sharedRunnersSetting` | [`SharedRunnersSetting!`](#sharedrunnerssetting) | Shared runners availability for the namespace and its descendants. |
+
+#### Fields
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="mutationgroupupdateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
+| <a id="mutationgroupupdateerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
+| <a id="mutationgroupupdategroup"></a>`group` | [`Group`](#group) | Group after update. |
+
### `Mutation.httpIntegrationCreate`
Input type: `HttpIntegrationCreateInput`
@@ -2342,10 +2412,10 @@ Input type: `HttpIntegrationCreateInput`
| ---- | ---- | ----------- |
| <a id="mutationhttpintegrationcreateactive"></a>`active` | [`Boolean!`](#boolean) | Whether the integration is receiving alerts. |
| <a id="mutationhttpintegrationcreateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationhttpintegrationcreatename"></a>`name` | [`String!`](#string) | The name of the integration. |
+| <a id="mutationhttpintegrationcreatename"></a>`name` | [`String!`](#string) | Name of the integration. |
| <a id="mutationhttpintegrationcreatepayloadattributemappings"></a>`payloadAttributeMappings` | [`[AlertManagementPayloadAlertFieldInput!]`](#alertmanagementpayloadalertfieldinput) | The custom mapping of GitLab alert attributes to fields from the payload_example. |
| <a id="mutationhttpintegrationcreatepayloadexample"></a>`payloadExample` | [`JsonString`](#jsonstring) | The example of an alert payload. |
-| <a id="mutationhttpintegrationcreateprojectpath"></a>`projectPath` | [`ID!`](#id) | The project to create the integration in. |
+| <a id="mutationhttpintegrationcreateprojectpath"></a>`projectPath` | [`ID!`](#id) | Project to create the integration in. |
#### Fields
@@ -2353,7 +2423,7 @@ Input type: `HttpIntegrationCreateInput`
| ---- | ---- | ----------- |
| <a id="mutationhttpintegrationcreateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationhttpintegrationcreateerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationhttpintegrationcreateintegration"></a>`integration` | [`AlertManagementHttpIntegration`](#alertmanagementhttpintegration) | The HTTP integration. |
+| <a id="mutationhttpintegrationcreateintegration"></a>`integration` | [`AlertManagementHttpIntegration`](#alertmanagementhttpintegration) | HTTP integration. |
### `Mutation.httpIntegrationDestroy`
@@ -2364,7 +2434,7 @@ Input type: `HttpIntegrationDestroyInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationhttpintegrationdestroyclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationhttpintegrationdestroyid"></a>`id` | [`AlertManagementHttpIntegrationID!`](#alertmanagementhttpintegrationid) | The ID of the integration to remove. |
+| <a id="mutationhttpintegrationdestroyid"></a>`id` | [`AlertManagementHttpIntegrationID!`](#alertmanagementhttpintegrationid) | ID of the integration to remove. |
#### Fields
@@ -2372,7 +2442,7 @@ Input type: `HttpIntegrationDestroyInput`
| ---- | ---- | ----------- |
| <a id="mutationhttpintegrationdestroyclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationhttpintegrationdestroyerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationhttpintegrationdestroyintegration"></a>`integration` | [`AlertManagementHttpIntegration`](#alertmanagementhttpintegration) | The HTTP integration. |
+| <a id="mutationhttpintegrationdestroyintegration"></a>`integration` | [`AlertManagementHttpIntegration`](#alertmanagementhttpintegration) | HTTP integration. |
### `Mutation.httpIntegrationResetToken`
@@ -2383,7 +2453,7 @@ Input type: `HttpIntegrationResetTokenInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationhttpintegrationresettokenclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationhttpintegrationresettokenid"></a>`id` | [`AlertManagementHttpIntegrationID!`](#alertmanagementhttpintegrationid) | The ID of the integration to mutate. |
+| <a id="mutationhttpintegrationresettokenid"></a>`id` | [`AlertManagementHttpIntegrationID!`](#alertmanagementhttpintegrationid) | ID of the integration to mutate. |
#### Fields
@@ -2391,7 +2461,7 @@ Input type: `HttpIntegrationResetTokenInput`
| ---- | ---- | ----------- |
| <a id="mutationhttpintegrationresettokenclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationhttpintegrationresettokenerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationhttpintegrationresettokenintegration"></a>`integration` | [`AlertManagementHttpIntegration`](#alertmanagementhttpintegration) | The HTTP integration. |
+| <a id="mutationhttpintegrationresettokenintegration"></a>`integration` | [`AlertManagementHttpIntegration`](#alertmanagementhttpintegration) | HTTP integration. |
### `Mutation.httpIntegrationUpdate`
@@ -2403,8 +2473,8 @@ Input type: `HttpIntegrationUpdateInput`
| ---- | ---- | ----------- |
| <a id="mutationhttpintegrationupdateactive"></a>`active` | [`Boolean`](#boolean) | Whether the integration is receiving alerts. |
| <a id="mutationhttpintegrationupdateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationhttpintegrationupdateid"></a>`id` | [`AlertManagementHttpIntegrationID!`](#alertmanagementhttpintegrationid) | The ID of the integration to mutate. |
-| <a id="mutationhttpintegrationupdatename"></a>`name` | [`String`](#string) | The name of the integration. |
+| <a id="mutationhttpintegrationupdateid"></a>`id` | [`AlertManagementHttpIntegrationID!`](#alertmanagementhttpintegrationid) | ID of the integration to mutate. |
+| <a id="mutationhttpintegrationupdatename"></a>`name` | [`String`](#string) | Name of the integration. |
| <a id="mutationhttpintegrationupdatepayloadattributemappings"></a>`payloadAttributeMappings` | [`[AlertManagementPayloadAlertFieldInput!]`](#alertmanagementpayloadalertfieldinput) | The custom mapping of GitLab alert attributes to fields from the payload_example. |
| <a id="mutationhttpintegrationupdatepayloadexample"></a>`payloadExample` | [`JsonString`](#jsonstring) | The example of an alert payload. |
@@ -2414,7 +2484,7 @@ Input type: `HttpIntegrationUpdateInput`
| ---- | ---- | ----------- |
| <a id="mutationhttpintegrationupdateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationhttpintegrationupdateerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationhttpintegrationupdateintegration"></a>`integration` | [`AlertManagementHttpIntegration`](#alertmanagementhttpintegration) | The HTTP integration. |
+| <a id="mutationhttpintegrationupdateintegration"></a>`integration` | [`AlertManagementHttpIntegration`](#alertmanagementhttpintegration) | HTTP integration. |
### `Mutation.issueMove`
@@ -2425,9 +2495,9 @@ Input type: `IssueMoveInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationissuemoveclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationissuemoveiid"></a>`iid` | [`String!`](#string) | The IID of the issue to mutate. |
-| <a id="mutationissuemoveprojectpath"></a>`projectPath` | [`ID!`](#id) | The project the issue to mutate is in. |
-| <a id="mutationissuemovetargetprojectpath"></a>`targetProjectPath` | [`ID!`](#id) | The project to move the issue to. |
+| <a id="mutationissuemoveiid"></a>`iid` | [`String!`](#string) | IID of the issue to mutate. |
+| <a id="mutationissuemoveprojectpath"></a>`projectPath` | [`ID!`](#id) | Project the issue to mutate is in. |
+| <a id="mutationissuemovetargetprojectpath"></a>`targetProjectPath` | [`ID!`](#id) | Project to move the issue to. |
#### Fields
@@ -2435,7 +2505,7 @@ Input type: `IssueMoveInput`
| ---- | ---- | ----------- |
| <a id="mutationissuemoveclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationissuemoveerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationissuemoveissue"></a>`issue` | [`Issue`](#issue) | The issue after mutation. |
+| <a id="mutationissuemoveissue"></a>`issue` | [`Issue`](#issue) | Issue after mutation. |
### `Mutation.issueMoveList`
@@ -2447,7 +2517,7 @@ Input type: `IssueMoveListInput`
| ---- | ---- | ----------- |
| <a id="mutationissuemovelistboardid"></a>`boardId` | [`BoardID!`](#boardid) | Global ID of the board that the issue is in. |
| <a id="mutationissuemovelistclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationissuemovelistepicid"></a>`epicId` | [`EpicID`](#epicid) | The ID of the parent epic. NULL when removing the association. |
+| <a id="mutationissuemovelistepicid"></a>`epicId` | [`EpicID`](#epicid) | ID of the parent epic. NULL when removing the association. |
| <a id="mutationissuemovelistfromlistid"></a>`fromListId` | [`ID`](#id) | ID of the board list that the issue will be moved from. |
| <a id="mutationissuemovelistiid"></a>`iid` | [`String!`](#string) | IID of the issue to mutate. |
| <a id="mutationissuemovelistmoveafterid"></a>`moveAfterId` | [`ID`](#id) | ID of issue that should be placed after the current issue. |
@@ -2461,7 +2531,7 @@ Input type: `IssueMoveListInput`
| ---- | ---- | ----------- |
| <a id="mutationissuemovelistclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationissuemovelisterrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationissuemovelistissue"></a>`issue` | [`Issue`](#issue) | The issue after mutation. |
+| <a id="mutationissuemovelistissue"></a>`issue` | [`Issue`](#issue) | Issue after mutation. |
### `Mutation.issueSetAssignees`
@@ -2471,11 +2541,11 @@ Input type: `IssueSetAssigneesInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="mutationissuesetassigneesassigneeusernames"></a>`assigneeUsernames` | [`[String!]!`](#string) | The usernames to assign to the resource. Replaces existing assignees by default. |
+| <a id="mutationissuesetassigneesassigneeusernames"></a>`assigneeUsernames` | [`[String!]!`](#string) | Usernames to assign to the resource. Replaces existing assignees by default. |
| <a id="mutationissuesetassigneesclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationissuesetassigneesiid"></a>`iid` | [`String!`](#string) | The IID of the issue to mutate. |
-| <a id="mutationissuesetassigneesoperationmode"></a>`operationMode` | [`MutationOperationMode`](#mutationoperationmode) | The operation to perform. Defaults to REPLACE. |
-| <a id="mutationissuesetassigneesprojectpath"></a>`projectPath` | [`ID!`](#id) | The project the issue to mutate is in. |
+| <a id="mutationissuesetassigneesiid"></a>`iid` | [`String!`](#string) | IID of the issue to mutate. |
+| <a id="mutationissuesetassigneesoperationmode"></a>`operationMode` | [`MutationOperationMode`](#mutationoperationmode) | Operation to perform. Defaults to REPLACE. |
+| <a id="mutationissuesetassigneesprojectpath"></a>`projectPath` | [`ID!`](#id) | Project the issue to mutate is in. |
#### Fields
@@ -2483,7 +2553,7 @@ Input type: `IssueSetAssigneesInput`
| ---- | ---- | ----------- |
| <a id="mutationissuesetassigneesclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationissuesetassigneeserrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationissuesetassigneesissue"></a>`issue` | [`Issue`](#issue) | The issue after mutation. |
+| <a id="mutationissuesetassigneesissue"></a>`issue` | [`Issue`](#issue) | Issue after mutation. |
### `Mutation.issueSetConfidential`
@@ -2495,8 +2565,8 @@ Input type: `IssueSetConfidentialInput`
| ---- | ---- | ----------- |
| <a id="mutationissuesetconfidentialclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationissuesetconfidentialconfidential"></a>`confidential` | [`Boolean!`](#boolean) | Whether or not to set the issue as a confidential. |
-| <a id="mutationissuesetconfidentialiid"></a>`iid` | [`String!`](#string) | The IID of the issue to mutate. |
-| <a id="mutationissuesetconfidentialprojectpath"></a>`projectPath` | [`ID!`](#id) | The project the issue to mutate is in. |
+| <a id="mutationissuesetconfidentialiid"></a>`iid` | [`String!`](#string) | IID of the issue to mutate. |
+| <a id="mutationissuesetconfidentialprojectpath"></a>`projectPath` | [`ID!`](#id) | Project the issue to mutate is in. |
#### Fields
@@ -2504,7 +2574,7 @@ Input type: `IssueSetConfidentialInput`
| ---- | ---- | ----------- |
| <a id="mutationissuesetconfidentialclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationissuesetconfidentialerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationissuesetconfidentialissue"></a>`issue` | [`Issue`](#issue) | The issue after mutation. |
+| <a id="mutationissuesetconfidentialissue"></a>`issue` | [`Issue`](#issue) | Issue after mutation. |
### `Mutation.issueSetDueDate`
@@ -2515,9 +2585,9 @@ Input type: `IssueSetDueDateInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationissuesetduedateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationissuesetduedateduedate"></a>`dueDate` | [`Time`](#time) | The desired due date for the issue, due date will be removed if absent or set to null. |
-| <a id="mutationissuesetduedateiid"></a>`iid` | [`String!`](#string) | The IID of the issue to mutate. |
-| <a id="mutationissuesetduedateprojectpath"></a>`projectPath` | [`ID!`](#id) | The project the issue to mutate is in. |
+| <a id="mutationissuesetduedateduedate"></a>`dueDate` | [`Time`](#time) | Desired due date for the issue. Due date is removed if null. |
+| <a id="mutationissuesetduedateiid"></a>`iid` | [`String!`](#string) | IID of the issue to mutate. |
+| <a id="mutationissuesetduedateprojectpath"></a>`projectPath` | [`ID!`](#id) | Project the issue to mutate is in. |
#### Fields
@@ -2525,7 +2595,7 @@ Input type: `IssueSetDueDateInput`
| ---- | ---- | ----------- |
| <a id="mutationissuesetduedateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationissuesetduedateerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationissuesetduedateissue"></a>`issue` | [`Issue`](#issue) | The issue after mutation. |
+| <a id="mutationissuesetduedateissue"></a>`issue` | [`Issue`](#issue) | Issue after mutation. |
### `Mutation.issueSetEpic`
@@ -2537,8 +2607,8 @@ Input type: `IssueSetEpicInput`
| ---- | ---- | ----------- |
| <a id="mutationissuesetepicclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationissuesetepicepicid"></a>`epicId` | [`EpicID`](#epicid) | Global ID of the epic to be assigned to the issue, epic will be removed if absent or set to null. |
-| <a id="mutationissuesetepiciid"></a>`iid` | [`String!`](#string) | The IID of the issue to mutate. |
-| <a id="mutationissuesetepicprojectpath"></a>`projectPath` | [`ID!`](#id) | The project the issue to mutate is in. |
+| <a id="mutationissuesetepiciid"></a>`iid` | [`String!`](#string) | IID of the issue to mutate. |
+| <a id="mutationissuesetepicprojectpath"></a>`projectPath` | [`ID!`](#id) | Project the issue to mutate is in. |
#### Fields
@@ -2546,7 +2616,7 @@ Input type: `IssueSetEpicInput`
| ---- | ---- | ----------- |
| <a id="mutationissuesetepicclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationissuesetepicerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationissuesetepicissue"></a>`issue` | [`Issue`](#issue) | The issue after mutation. |
+| <a id="mutationissuesetepicissue"></a>`issue` | [`Issue`](#issue) | Issue after mutation. |
### `Mutation.issueSetIteration`
@@ -2557,9 +2627,9 @@ Input type: `IssueSetIterationInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationissuesetiterationclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationissuesetiterationiid"></a>`iid` | [`String!`](#string) | The IID of the issue to mutate. |
+| <a id="mutationissuesetiterationiid"></a>`iid` | [`String!`](#string) | IID of the issue to mutate. |
| <a id="mutationissuesetiterationiterationid"></a>`iterationId` | [`IterationID`](#iterationid) | The iteration to assign to the issue. |
-| <a id="mutationissuesetiterationprojectpath"></a>`projectPath` | [`ID!`](#id) | The project the issue to mutate is in. |
+| <a id="mutationissuesetiterationprojectpath"></a>`projectPath` | [`ID!`](#id) | Project the issue to mutate is in. |
#### Fields
@@ -2567,7 +2637,7 @@ Input type: `IssueSetIterationInput`
| ---- | ---- | ----------- |
| <a id="mutationissuesetiterationclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationissuesetiterationerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationissuesetiterationissue"></a>`issue` | [`Issue`](#issue) | The issue after mutation. |
+| <a id="mutationissuesetiterationissue"></a>`issue` | [`Issue`](#issue) | Issue after mutation. |
### `Mutation.issueSetLocked`
@@ -2578,9 +2648,9 @@ Input type: `IssueSetLockedInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationissuesetlockedclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationissuesetlockediid"></a>`iid` | [`String!`](#string) | The IID of the issue to mutate. |
+| <a id="mutationissuesetlockediid"></a>`iid` | [`String!`](#string) | IID of the issue to mutate. |
| <a id="mutationissuesetlockedlocked"></a>`locked` | [`Boolean!`](#boolean) | Whether or not to lock discussion on the issue. |
-| <a id="mutationissuesetlockedprojectpath"></a>`projectPath` | [`ID!`](#id) | The project the issue to mutate is in. |
+| <a id="mutationissuesetlockedprojectpath"></a>`projectPath` | [`ID!`](#id) | Project the issue to mutate is in. |
#### Fields
@@ -2588,7 +2658,7 @@ Input type: `IssueSetLockedInput`
| ---- | ---- | ----------- |
| <a id="mutationissuesetlockedclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationissuesetlockederrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationissuesetlockedissue"></a>`issue` | [`Issue`](#issue) | The issue after mutation. |
+| <a id="mutationissuesetlockedissue"></a>`issue` | [`Issue`](#issue) | Issue after mutation. |
### `Mutation.issueSetSeverity`
@@ -2599,8 +2669,8 @@ Input type: `IssueSetSeverityInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationissuesetseverityclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationissuesetseverityiid"></a>`iid` | [`String!`](#string) | The IID of the issue to mutate. |
-| <a id="mutationissuesetseverityprojectpath"></a>`projectPath` | [`ID!`](#id) | The project the issue to mutate is in. |
+| <a id="mutationissuesetseverityiid"></a>`iid` | [`String!`](#string) | IID of the issue to mutate. |
+| <a id="mutationissuesetseverityprojectpath"></a>`projectPath` | [`ID!`](#id) | Project the issue to mutate is in. |
| <a id="mutationissuesetseverityseverity"></a>`severity` | [`IssuableSeverity!`](#issuableseverity) | Set the incident severity level. |
#### Fields
@@ -2609,7 +2679,7 @@ Input type: `IssueSetSeverityInput`
| ---- | ---- | ----------- |
| <a id="mutationissuesetseverityclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationissuesetseverityerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationissuesetseverityissue"></a>`issue` | [`Issue`](#issue) | The issue after mutation. |
+| <a id="mutationissuesetseverityissue"></a>`issue` | [`Issue`](#issue) | Issue after mutation. |
### `Mutation.issueSetSubscription`
@@ -2620,9 +2690,9 @@ Input type: `IssueSetSubscriptionInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationissuesetsubscriptionclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationissuesetsubscriptioniid"></a>`iid` | [`String!`](#string) | The IID of the issue to mutate. |
-| <a id="mutationissuesetsubscriptionprojectpath"></a>`projectPath` | [`ID!`](#id) | The project the issue to mutate is in. |
-| <a id="mutationissuesetsubscriptionsubscribedstate"></a>`subscribedState` | [`Boolean!`](#boolean) | The desired state of the subscription. |
+| <a id="mutationissuesetsubscriptioniid"></a>`iid` | [`String!`](#string) | IID of the issue to mutate. |
+| <a id="mutationissuesetsubscriptionprojectpath"></a>`projectPath` | [`ID!`](#id) | Project the issue to mutate is in. |
+| <a id="mutationissuesetsubscriptionsubscribedstate"></a>`subscribedState` | [`Boolean!`](#boolean) | Desired state of the subscription. |
#### Fields
@@ -2630,7 +2700,7 @@ Input type: `IssueSetSubscriptionInput`
| ---- | ---- | ----------- |
| <a id="mutationissuesetsubscriptionclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationissuesetsubscriptionerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationissuesetsubscriptionissue"></a>`issue` | [`Issue`](#issue) | The issue after mutation. |
+| <a id="mutationissuesetsubscriptionissue"></a>`issue` | [`Issue`](#issue) | Issue after mutation. |
### `Mutation.issueSetWeight`
@@ -2641,8 +2711,8 @@ Input type: `IssueSetWeightInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationissuesetweightclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationissuesetweightiid"></a>`iid` | [`String!`](#string) | The IID of the issue to mutate. |
-| <a id="mutationissuesetweightprojectpath"></a>`projectPath` | [`ID!`](#id) | The project the issue to mutate is in. |
+| <a id="mutationissuesetweightiid"></a>`iid` | [`String!`](#string) | IID of the issue to mutate. |
+| <a id="mutationissuesetweightprojectpath"></a>`projectPath` | [`ID!`](#id) | Project the issue to mutate is in. |
| <a id="mutationissuesetweightweight"></a>`weight` | [`Int`](#int) | The desired weight for the issue. If set to null, weight is removed. |
#### Fields
@@ -2651,7 +2721,7 @@ Input type: `IssueSetWeightInput`
| ---- | ---- | ----------- |
| <a id="mutationissuesetweightclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationissuesetweighterrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationissuesetweightissue"></a>`issue` | [`Issue`](#issue) | The issue after mutation. |
+| <a id="mutationissuesetweightissue"></a>`issue` | [`Issue`](#issue) | Issue after mutation. |
### `Mutation.iterationCadenceCreate`
@@ -2781,8 +2851,8 @@ Input type: `JiraImportStartInput`
| <a id="mutationjiraimportstartclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationjiraimportstartjiraprojectkey"></a>`jiraProjectKey` | [`String!`](#string) | Project key of the importer Jira project. |
| <a id="mutationjiraimportstartjiraprojectname"></a>`jiraProjectName` | [`String`](#string) | Project name of the importer Jira project. |
-| <a id="mutationjiraimportstartprojectpath"></a>`projectPath` | [`ID!`](#id) | The project to import the Jira project into. |
-| <a id="mutationjiraimportstartusersmapping"></a>`usersMapping` | [`[JiraUsersMappingInputType!]`](#jirausersmappinginputtype) | The mapping of Jira to GitLab users. |
+| <a id="mutationjiraimportstartprojectpath"></a>`projectPath` | [`ID!`](#id) | Project to import the Jira project into. |
+| <a id="mutationjiraimportstartusersmapping"></a>`usersMapping` | [`[JiraUsersMappingInputType!]`](#jirausersmappinginputtype) | Mapping of Jira to GitLab users. |
#### Fields
@@ -2790,7 +2860,7 @@ Input type: `JiraImportStartInput`
| ---- | ---- | ----------- |
| <a id="mutationjiraimportstartclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationjiraimportstarterrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationjiraimportstartjiraimport"></a>`jiraImport` | [`JiraImport`](#jiraimport) | The Jira import data after mutation. |
+| <a id="mutationjiraimportstartjiraimport"></a>`jiraImport` | [`JiraImport`](#jiraimport) | Jira import data after mutation. |
### `Mutation.jiraImportUsers`
@@ -2801,8 +2871,8 @@ Input type: `JiraImportUsersInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationjiraimportusersclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationjiraimportusersprojectpath"></a>`projectPath` | [`ID!`](#id) | The project to import the Jira users into. |
-| <a id="mutationjiraimportusersstartat"></a>`startAt` | [`Int`](#int) | The index of the record the import should started at, default 0 (50 records returned). |
+| <a id="mutationjiraimportusersprojectpath"></a>`projectPath` | [`ID!`](#id) | Project to import the Jira users into. |
+| <a id="mutationjiraimportusersstartat"></a>`startAt` | [`Int`](#int) | Index of the record the import should started at, default 0 (50 records returned). |
#### Fields
@@ -2812,6 +2882,25 @@ Input type: `JiraImportUsersInput`
| <a id="mutationjiraimportuserserrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
| <a id="mutationjiraimportusersjirausers"></a>`jiraUsers` | [`[JiraUser!]`](#jirauser) | Users returned from Jira, matched by email and name if possible. |
+### `Mutation.jobCancel`
+
+Input type: `JobCancelInput`
+
+#### Arguments
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="mutationjobcancelclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
+| <a id="mutationjobcancelid"></a>`id` | [`CiBuildID!`](#cibuildid) | ID of the job to mutate. |
+
+#### Fields
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="mutationjobcancelclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
+| <a id="mutationjobcancelerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
+| <a id="mutationjobcanceljob"></a>`job` | [`CiJob`](#cijob) | Job after the mutation. |
+
### `Mutation.jobPlay`
Input type: `JobPlayInput`
@@ -2821,7 +2910,7 @@ Input type: `JobPlayInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationjobplayclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationjobplayid"></a>`id` | [`CiBuildID!`](#cibuildid) | The ID of the job to mutate. |
+| <a id="mutationjobplayid"></a>`id` | [`CiBuildID!`](#cibuildid) | ID of the job to mutate. |
#### Fields
@@ -2829,7 +2918,7 @@ Input type: `JobPlayInput`
| ---- | ---- | ----------- |
| <a id="mutationjobplayclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationjobplayerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationjobplayjob"></a>`job` | [`CiJob`](#cijob) | The job after the mutation. |
+| <a id="mutationjobplayjob"></a>`job` | [`CiJob`](#cijob) | Job after the mutation. |
### `Mutation.jobRetry`
@@ -2840,7 +2929,7 @@ Input type: `JobRetryInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationjobretryclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationjobretryid"></a>`id` | [`CiBuildID!`](#cibuildid) | The ID of the job to mutate. |
+| <a id="mutationjobretryid"></a>`id` | [`CiBuildID!`](#cibuildid) | ID of the job to mutate. |
#### Fields
@@ -2848,7 +2937,26 @@ Input type: `JobRetryInput`
| ---- | ---- | ----------- |
| <a id="mutationjobretryclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationjobretryerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationjobretryjob"></a>`job` | [`CiJob`](#cijob) | The job after the mutation. |
+| <a id="mutationjobretryjob"></a>`job` | [`CiJob`](#cijob) | Job after the mutation. |
+
+### `Mutation.jobUnschedule`
+
+Input type: `JobUnscheduleInput`
+
+#### Arguments
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="mutationjobunscheduleclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
+| <a id="mutationjobunscheduleid"></a>`id` | [`CiBuildID!`](#cibuildid) | ID of the job to mutate. |
+
+#### Fields
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="mutationjobunscheduleclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
+| <a id="mutationjobunscheduleerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
+| <a id="mutationjobunschedulejob"></a>`job` | [`CiJob`](#cijob) | Job after the mutation. |
### `Mutation.labelCreate`
@@ -2871,7 +2979,7 @@ Input type: `LabelCreateInput`
| ---- | ---- | ----------- |
| <a id="mutationlabelcreateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationlabelcreateerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationlabelcreatelabel"></a>`label` | [`Label`](#label) | The label after mutation. |
+| <a id="mutationlabelcreatelabel"></a>`label` | [`Label`](#label) | Label after mutation. |
### `Mutation.markAsSpamSnippet`
@@ -2882,7 +2990,7 @@ Input type: `MarkAsSpamSnippetInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationmarkasspamsnippetclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationmarkasspamsnippetid"></a>`id` | [`SnippetID!`](#snippetid) | The global ID of the snippet to update. |
+| <a id="mutationmarkasspamsnippetid"></a>`id` | [`SnippetID!`](#snippetid) | Global ID of the snippet to update. |
#### Fields
@@ -2890,7 +2998,7 @@ Input type: `MarkAsSpamSnippetInput`
| ---- | ---- | ----------- |
| <a id="mutationmarkasspamsnippetclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationmarkasspamsnippeterrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationmarkasspamsnippetsnippet"></a>`snippet` | [`Snippet`](#snippet) | The snippet after mutation. |
+| <a id="mutationmarkasspamsnippetsnippet"></a>`snippet` | [`Snippet`](#snippet) | Snippet after mutation. |
### `Mutation.mergeRequestAccept`
@@ -2906,9 +3014,9 @@ Input type: `MergeRequestAcceptInput`
| ---- | ---- | ----------- |
| <a id="mutationmergerequestacceptclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationmergerequestacceptcommitmessage"></a>`commitMessage` | [`String`](#string) | Custom merge commit message. |
-| <a id="mutationmergerequestacceptiid"></a>`iid` | [`String!`](#string) | The IID of the merge request to mutate. |
-| <a id="mutationmergerequestacceptprojectpath"></a>`projectPath` | [`ID!`](#id) | The project the merge request to mutate is in. |
-| <a id="mutationmergerequestacceptsha"></a>`sha` | [`String!`](#string) | The HEAD SHA at the time when this merge was requested. |
+| <a id="mutationmergerequestacceptiid"></a>`iid` | [`String!`](#string) | IID of the merge request to mutate. |
+| <a id="mutationmergerequestacceptprojectpath"></a>`projectPath` | [`ID!`](#id) | Project the merge request to mutate is in. |
+| <a id="mutationmergerequestacceptsha"></a>`sha` | [`String!`](#string) | HEAD SHA at the time when this merge was requested. |
| <a id="mutationmergerequestacceptshouldremovesourcebranch"></a>`shouldRemoveSourceBranch` | [`Boolean`](#boolean) | Should the source branch be removed. |
| <a id="mutationmergerequestacceptsquash"></a>`squash` | [`Boolean`](#boolean) | Squash commits on the source branch before merge. |
| <a id="mutationmergerequestacceptsquashcommitmessage"></a>`squashCommitMessage` | [`String`](#string) | Custom squash commit message (if squash is true). |
@@ -2920,7 +3028,7 @@ Input type: `MergeRequestAcceptInput`
| ---- | ---- | ----------- |
| <a id="mutationmergerequestacceptclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationmergerequestaccepterrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationmergerequestacceptmergerequest"></a>`mergeRequest` | [`MergeRequest`](#mergerequest) | The merge request after mutation. |
+| <a id="mutationmergerequestacceptmergerequest"></a>`mergeRequest` | [`MergeRequest`](#mergerequest) | Merge request after mutation. |
### `Mutation.mergeRequestCreate`
@@ -2944,7 +3052,7 @@ Input type: `MergeRequestCreateInput`
| ---- | ---- | ----------- |
| <a id="mutationmergerequestcreateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationmergerequestcreateerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationmergerequestcreatemergerequest"></a>`mergeRequest` | [`MergeRequest`](#mergerequest) | The merge request after mutation. |
+| <a id="mutationmergerequestcreatemergerequest"></a>`mergeRequest` | [`MergeRequest`](#mergerequest) | Merge request after mutation. |
### `Mutation.mergeRequestReviewerRereview`
@@ -2955,9 +3063,9 @@ Input type: `MergeRequestReviewerRereviewInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationmergerequestreviewerrereviewclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationmergerequestreviewerrereviewiid"></a>`iid` | [`String!`](#string) | The IID of the merge request to mutate. |
-| <a id="mutationmergerequestreviewerrereviewprojectpath"></a>`projectPath` | [`ID!`](#id) | The project the merge request to mutate is in. |
-| <a id="mutationmergerequestreviewerrereviewuserid"></a>`userId` | [`UserID!`](#userid) | The user ID for the user that has been requested for a new review. |
+| <a id="mutationmergerequestreviewerrereviewiid"></a>`iid` | [`String!`](#string) | IID of the merge request to mutate. |
+| <a id="mutationmergerequestreviewerrereviewprojectpath"></a>`projectPath` | [`ID!`](#id) | Project the merge request to mutate is in. |
+| <a id="mutationmergerequestreviewerrereviewuserid"></a>`userId` | [`UserID!`](#userid) | User ID for the user that has been requested for a new review. |
#### Fields
@@ -2965,7 +3073,7 @@ Input type: `MergeRequestReviewerRereviewInput`
| ---- | ---- | ----------- |
| <a id="mutationmergerequestreviewerrereviewclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationmergerequestreviewerrereviewerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationmergerequestreviewerrereviewmergerequest"></a>`mergeRequest` | [`MergeRequest`](#mergerequest) | The merge request after mutation. |
+| <a id="mutationmergerequestreviewerrereviewmergerequest"></a>`mergeRequest` | [`MergeRequest`](#mergerequest) | Merge request after mutation. |
### `Mutation.mergeRequestSetAssignees`
@@ -2975,11 +3083,11 @@ Input type: `MergeRequestSetAssigneesInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="mutationmergerequestsetassigneesassigneeusernames"></a>`assigneeUsernames` | [`[String!]!`](#string) | The usernames to assign to the resource. Replaces existing assignees by default. |
+| <a id="mutationmergerequestsetassigneesassigneeusernames"></a>`assigneeUsernames` | [`[String!]!`](#string) | Usernames to assign to the resource. Replaces existing assignees by default. |
| <a id="mutationmergerequestsetassigneesclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationmergerequestsetassigneesiid"></a>`iid` | [`String!`](#string) | The IID of the merge request to mutate. |
-| <a id="mutationmergerequestsetassigneesoperationmode"></a>`operationMode` | [`MutationOperationMode`](#mutationoperationmode) | The operation to perform. Defaults to REPLACE. |
-| <a id="mutationmergerequestsetassigneesprojectpath"></a>`projectPath` | [`ID!`](#id) | The project the merge request to mutate is in. |
+| <a id="mutationmergerequestsetassigneesiid"></a>`iid` | [`String!`](#string) | IID of the merge request to mutate. |
+| <a id="mutationmergerequestsetassigneesoperationmode"></a>`operationMode` | [`MutationOperationMode`](#mutationoperationmode) | Operation to perform. Defaults to REPLACE. |
+| <a id="mutationmergerequestsetassigneesprojectpath"></a>`projectPath` | [`ID!`](#id) | Project the merge request to mutate is in. |
#### Fields
@@ -2987,7 +3095,7 @@ Input type: `MergeRequestSetAssigneesInput`
| ---- | ---- | ----------- |
| <a id="mutationmergerequestsetassigneesclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationmergerequestsetassigneeserrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationmergerequestsetassigneesmergerequest"></a>`mergeRequest` | [`MergeRequest`](#mergerequest) | The merge request after mutation. |
+| <a id="mutationmergerequestsetassigneesmergerequest"></a>`mergeRequest` | [`MergeRequest`](#mergerequest) | Merge request after mutation. |
### `Mutation.mergeRequestSetDraft`
@@ -2999,8 +3107,8 @@ Input type: `MergeRequestSetDraftInput`
| ---- | ---- | ----------- |
| <a id="mutationmergerequestsetdraftclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationmergerequestsetdraftdraft"></a>`draft` | [`Boolean!`](#boolean) | Whether or not to set the merge request as a draft. |
-| <a id="mutationmergerequestsetdraftiid"></a>`iid` | [`String!`](#string) | The IID of the merge request to mutate. |
-| <a id="mutationmergerequestsetdraftprojectpath"></a>`projectPath` | [`ID!`](#id) | The project the merge request to mutate is in. |
+| <a id="mutationmergerequestsetdraftiid"></a>`iid` | [`String!`](#string) | IID of the merge request to mutate. |
+| <a id="mutationmergerequestsetdraftprojectpath"></a>`projectPath` | [`ID!`](#id) | Project the merge request to mutate is in. |
#### Fields
@@ -3008,7 +3116,7 @@ Input type: `MergeRequestSetDraftInput`
| ---- | ---- | ----------- |
| <a id="mutationmergerequestsetdraftclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationmergerequestsetdrafterrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationmergerequestsetdraftmergerequest"></a>`mergeRequest` | [`MergeRequest`](#mergerequest) | The merge request after mutation. |
+| <a id="mutationmergerequestsetdraftmergerequest"></a>`mergeRequest` | [`MergeRequest`](#mergerequest) | Merge request after mutation. |
### `Mutation.mergeRequestSetLabels`
@@ -3019,10 +3127,10 @@ Input type: `MergeRequestSetLabelsInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationmergerequestsetlabelsclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationmergerequestsetlabelsiid"></a>`iid` | [`String!`](#string) | The IID of the merge request to mutate. |
-| <a id="mutationmergerequestsetlabelslabelids"></a>`labelIds` | [`[LabelID!]!`](#labelid) | The Label IDs to set. Replaces existing labels by default. |
+| <a id="mutationmergerequestsetlabelsiid"></a>`iid` | [`String!`](#string) | IID of the merge request to mutate. |
+| <a id="mutationmergerequestsetlabelslabelids"></a>`labelIds` | [`[LabelID!]!`](#labelid) | Label IDs to set. Replaces existing labels by default. |
| <a id="mutationmergerequestsetlabelsoperationmode"></a>`operationMode` | [`MutationOperationMode`](#mutationoperationmode) | Changes the operation mode. Defaults to REPLACE. |
-| <a id="mutationmergerequestsetlabelsprojectpath"></a>`projectPath` | [`ID!`](#id) | The project the merge request to mutate is in. |
+| <a id="mutationmergerequestsetlabelsprojectpath"></a>`projectPath` | [`ID!`](#id) | Project the merge request to mutate is in. |
#### Fields
@@ -3030,7 +3138,7 @@ Input type: `MergeRequestSetLabelsInput`
| ---- | ---- | ----------- |
| <a id="mutationmergerequestsetlabelsclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationmergerequestsetlabelserrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationmergerequestsetlabelsmergerequest"></a>`mergeRequest` | [`MergeRequest`](#mergerequest) | The merge request after mutation. |
+| <a id="mutationmergerequestsetlabelsmergerequest"></a>`mergeRequest` | [`MergeRequest`](#mergerequest) | Merge request after mutation. |
### `Mutation.mergeRequestSetLocked`
@@ -3041,9 +3149,9 @@ Input type: `MergeRequestSetLockedInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationmergerequestsetlockedclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationmergerequestsetlockediid"></a>`iid` | [`String!`](#string) | The IID of the merge request to mutate. |
+| <a id="mutationmergerequestsetlockediid"></a>`iid` | [`String!`](#string) | IID of the merge request to mutate. |
| <a id="mutationmergerequestsetlockedlocked"></a>`locked` | [`Boolean!`](#boolean) | Whether or not to lock the merge request. |
-| <a id="mutationmergerequestsetlockedprojectpath"></a>`projectPath` | [`ID!`](#id) | The project the merge request to mutate is in. |
+| <a id="mutationmergerequestsetlockedprojectpath"></a>`projectPath` | [`ID!`](#id) | Project the merge request to mutate is in. |
#### Fields
@@ -3051,7 +3159,7 @@ Input type: `MergeRequestSetLockedInput`
| ---- | ---- | ----------- |
| <a id="mutationmergerequestsetlockedclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationmergerequestsetlockederrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationmergerequestsetlockedmergerequest"></a>`mergeRequest` | [`MergeRequest`](#mergerequest) | The merge request after mutation. |
+| <a id="mutationmergerequestsetlockedmergerequest"></a>`mergeRequest` | [`MergeRequest`](#mergerequest) | Merge request after mutation. |
### `Mutation.mergeRequestSetMilestone`
@@ -3062,9 +3170,9 @@ Input type: `MergeRequestSetMilestoneInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationmergerequestsetmilestoneclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationmergerequestsetmilestoneiid"></a>`iid` | [`String!`](#string) | The IID of the merge request to mutate. |
-| <a id="mutationmergerequestsetmilestonemilestoneid"></a>`milestoneId` | [`MilestoneID`](#milestoneid) | The milestone to assign to the merge request. |
-| <a id="mutationmergerequestsetmilestoneprojectpath"></a>`projectPath` | [`ID!`](#id) | The project the merge request to mutate is in. |
+| <a id="mutationmergerequestsetmilestoneiid"></a>`iid` | [`String!`](#string) | IID of the merge request to mutate. |
+| <a id="mutationmergerequestsetmilestonemilestoneid"></a>`milestoneId` | [`MilestoneID`](#milestoneid) | Milestone to assign to the merge request. |
+| <a id="mutationmergerequestsetmilestoneprojectpath"></a>`projectPath` | [`ID!`](#id) | Project the merge request to mutate is in. |
#### Fields
@@ -3072,7 +3180,7 @@ Input type: `MergeRequestSetMilestoneInput`
| ---- | ---- | ----------- |
| <a id="mutationmergerequestsetmilestoneclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationmergerequestsetmilestoneerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationmergerequestsetmilestonemergerequest"></a>`mergeRequest` | [`MergeRequest`](#mergerequest) | The merge request after mutation. |
+| <a id="mutationmergerequestsetmilestonemergerequest"></a>`mergeRequest` | [`MergeRequest`](#mergerequest) | Merge request after mutation. |
### `Mutation.mergeRequestSetSubscription`
@@ -3083,9 +3191,9 @@ Input type: `MergeRequestSetSubscriptionInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationmergerequestsetsubscriptionclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationmergerequestsetsubscriptioniid"></a>`iid` | [`String!`](#string) | The IID of the merge request to mutate. |
-| <a id="mutationmergerequestsetsubscriptionprojectpath"></a>`projectPath` | [`ID!`](#id) | The project the merge request to mutate is in. |
-| <a id="mutationmergerequestsetsubscriptionsubscribedstate"></a>`subscribedState` | [`Boolean!`](#boolean) | The desired state of the subscription. |
+| <a id="mutationmergerequestsetsubscriptioniid"></a>`iid` | [`String!`](#string) | IID of the merge request to mutate. |
+| <a id="mutationmergerequestsetsubscriptionprojectpath"></a>`projectPath` | [`ID!`](#id) | Project the merge request to mutate is in. |
+| <a id="mutationmergerequestsetsubscriptionsubscribedstate"></a>`subscribedState` | [`Boolean!`](#boolean) | Desired state of the subscription. |
#### Fields
@@ -3093,7 +3201,7 @@ Input type: `MergeRequestSetSubscriptionInput`
| ---- | ---- | ----------- |
| <a id="mutationmergerequestsetsubscriptionclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationmergerequestsetsubscriptionerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationmergerequestsetsubscriptionmergerequest"></a>`mergeRequest` | [`MergeRequest`](#mergerequest) | The merge request after mutation. |
+| <a id="mutationmergerequestsetsubscriptionmergerequest"></a>`mergeRequest` | [`MergeRequest`](#mergerequest) | Merge request after mutation. |
### `Mutation.mergeRequestSetWip`
@@ -3108,8 +3216,8 @@ Input type: `MergeRequestSetWipInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationmergerequestsetwipclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationmergerequestsetwipiid"></a>`iid` | [`String!`](#string) | The IID of the merge request to mutate. |
-| <a id="mutationmergerequestsetwipprojectpath"></a>`projectPath` | [`ID!`](#id) | The project the merge request to mutate is in. |
+| <a id="mutationmergerequestsetwipiid"></a>`iid` | [`String!`](#string) | IID of the merge request to mutate. |
+| <a id="mutationmergerequestsetwipprojectpath"></a>`projectPath` | [`ID!`](#id) | Project the merge request to mutate is in. |
| <a id="mutationmergerequestsetwipwip"></a>`wip` | [`Boolean!`](#boolean) | Whether or not to set the merge request as a draft. |
#### Fields
@@ -3118,7 +3226,7 @@ Input type: `MergeRequestSetWipInput`
| ---- | ---- | ----------- |
| <a id="mutationmergerequestsetwipclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationmergerequestsetwiperrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationmergerequestsetwipmergerequest"></a>`mergeRequest` | [`MergeRequest`](#mergerequest) | The merge request after mutation. |
+| <a id="mutationmergerequestsetwipmergerequest"></a>`mergeRequest` | [`MergeRequest`](#mergerequest) | Merge request after mutation. |
### `Mutation.mergeRequestUpdate`
@@ -3132,9 +3240,9 @@ Input type: `MergeRequestUpdateInput`
| ---- | ---- | ----------- |
| <a id="mutationmergerequestupdateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationmergerequestupdatedescription"></a>`description` | [`String`](#string) | Description of the merge request (Markdown rendered as HTML for caching). |
-| <a id="mutationmergerequestupdateiid"></a>`iid` | [`String!`](#string) | The IID of the merge request to mutate. |
-| <a id="mutationmergerequestupdateprojectpath"></a>`projectPath` | [`ID!`](#id) | The project the merge request to mutate is in. |
-| <a id="mutationmergerequestupdatestate"></a>`state` | [`MergeRequestNewState`](#mergerequestnewstate) | The action to perform to change the state. |
+| <a id="mutationmergerequestupdateiid"></a>`iid` | [`String!`](#string) | IID of the merge request to mutate. |
+| <a id="mutationmergerequestupdateprojectpath"></a>`projectPath` | [`ID!`](#id) | Project the merge request to mutate is in. |
+| <a id="mutationmergerequestupdatestate"></a>`state` | [`MergeRequestNewState`](#mergerequestnewstate) | Action to perform to change the state. |
| <a id="mutationmergerequestupdatetargetbranch"></a>`targetBranch` | [`String`](#string) | Target branch of the merge request. |
| <a id="mutationmergerequestupdatetitle"></a>`title` | [`String`](#string) | Title of the merge request. |
@@ -3144,7 +3252,7 @@ Input type: `MergeRequestUpdateInput`
| ---- | ---- | ----------- |
| <a id="mutationmergerequestupdateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationmergerequestupdateerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationmergerequestupdatemergerequest"></a>`mergeRequest` | [`MergeRequest`](#mergerequest) | The merge request after mutation. |
+| <a id="mutationmergerequestupdatemergerequest"></a>`mergeRequest` | [`MergeRequest`](#mergerequest) | Merge request after mutation. |
### `Mutation.namespaceIncreaseStorageTemporarily`
@@ -3311,7 +3419,7 @@ Input type: `PipelineCancelInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationpipelinecancelclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationpipelinecancelid"></a>`id` | [`CiPipelineID!`](#cipipelineid) | The ID of the pipeline to mutate. |
+| <a id="mutationpipelinecancelid"></a>`id` | [`CiPipelineID!`](#cipipelineid) | ID of the pipeline to mutate. |
#### Fields
@@ -3329,7 +3437,7 @@ Input type: `PipelineDestroyInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationpipelinedestroyclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationpipelinedestroyid"></a>`id` | [`CiPipelineID!`](#cipipelineid) | The ID of the pipeline to mutate. |
+| <a id="mutationpipelinedestroyid"></a>`id` | [`CiPipelineID!`](#cipipelineid) | ID of the pipeline to mutate. |
#### Fields
@@ -3347,7 +3455,7 @@ Input type: `PipelineRetryInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationpipelineretryclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationpipelineretryid"></a>`id` | [`CiPipelineID!`](#cipipelineid) | The ID of the pipeline to mutate. |
+| <a id="mutationpipelineretryid"></a>`id` | [`CiPipelineID!`](#cipipelineid) | ID of the pipeline to mutate. |
#### Fields
@@ -3355,7 +3463,50 @@ Input type: `PipelineRetryInput`
| ---- | ---- | ----------- |
| <a id="mutationpipelineretryclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationpipelineretryerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationpipelineretrypipeline"></a>`pipeline` | [`Pipeline`](#pipeline) | The pipeline after mutation. |
+| <a id="mutationpipelineretrypipeline"></a>`pipeline` | [`Pipeline`](#pipeline) | Pipeline after mutation. |
+
+### `Mutation.projectSetComplianceFramework`
+
+Assign (or unset) a compliance framework to a project.
+
+Input type: `ProjectSetComplianceFrameworkInput`
+
+#### Arguments
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="mutationprojectsetcomplianceframeworkclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
+| <a id="mutationprojectsetcomplianceframeworkcomplianceframeworkid"></a>`complianceFrameworkId` | [`ComplianceManagementFrameworkID`](#compliancemanagementframeworkid) | ID of the compliance framework to assign to the project. |
+| <a id="mutationprojectsetcomplianceframeworkprojectid"></a>`projectId` | [`ProjectID!`](#projectid) | ID of the project to change the compliance framework of. |
+
+#### Fields
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="mutationprojectsetcomplianceframeworkclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
+| <a id="mutationprojectsetcomplianceframeworkerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
+| <a id="mutationprojectsetcomplianceframeworkproject"></a>`project` | [`Project`](#project) | Project after mutation. |
+
+### `Mutation.projectSetLocked`
+
+Input type: `ProjectSetLockedInput`
+
+#### Arguments
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="mutationprojectsetlockedclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
+| <a id="mutationprojectsetlockedfilepath"></a>`filePath` | [`String!`](#string) | Full path to the file. |
+| <a id="mutationprojectsetlockedlock"></a>`lock` | [`Boolean!`](#boolean) | Whether or not to lock the file path. |
+| <a id="mutationprojectsetlockedprojectpath"></a>`projectPath` | [`ID!`](#id) | Full path of the project to mutate. |
+
+#### Fields
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="mutationprojectsetlockedclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
+| <a id="mutationprojectsetlockederrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
+| <a id="mutationprojectsetlockedproject"></a>`project` | [`Project`](#project) | Project after mutation. |
### `Mutation.prometheusIntegrationCreate`
@@ -3368,7 +3519,7 @@ Input type: `PrometheusIntegrationCreateInput`
| <a id="mutationprometheusintegrationcreateactive"></a>`active` | [`Boolean!`](#boolean) | Whether the integration is receiving alerts. |
| <a id="mutationprometheusintegrationcreateapiurl"></a>`apiUrl` | [`String!`](#string) | Endpoint at which Prometheus can be queried. |
| <a id="mutationprometheusintegrationcreateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationprometheusintegrationcreateprojectpath"></a>`projectPath` | [`ID!`](#id) | The project to create the integration in. |
+| <a id="mutationprometheusintegrationcreateprojectpath"></a>`projectPath` | [`ID!`](#id) | Project to create the integration in. |
#### Fields
@@ -3376,7 +3527,7 @@ Input type: `PrometheusIntegrationCreateInput`
| ---- | ---- | ----------- |
| <a id="mutationprometheusintegrationcreateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationprometheusintegrationcreateerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationprometheusintegrationcreateintegration"></a>`integration` | [`AlertManagementPrometheusIntegration`](#alertmanagementprometheusintegration) | The newly created integration. |
+| <a id="mutationprometheusintegrationcreateintegration"></a>`integration` | [`AlertManagementPrometheusIntegration`](#alertmanagementprometheusintegration) | Newly created integration. |
### `Mutation.prometheusIntegrationResetToken`
@@ -3387,7 +3538,7 @@ Input type: `PrometheusIntegrationResetTokenInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationprometheusintegrationresettokenclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationprometheusintegrationresettokenid"></a>`id` | [`IntegrationsPrometheusID!`](#integrationsprometheusid) | The ID of the integration to mutate. |
+| <a id="mutationprometheusintegrationresettokenid"></a>`id` | [`IntegrationsPrometheusID!`](#integrationsprometheusid) | ID of the integration to mutate. |
#### Fields
@@ -3395,7 +3546,7 @@ Input type: `PrometheusIntegrationResetTokenInput`
| ---- | ---- | ----------- |
| <a id="mutationprometheusintegrationresettokenclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationprometheusintegrationresettokenerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationprometheusintegrationresettokenintegration"></a>`integration` | [`AlertManagementPrometheusIntegration`](#alertmanagementprometheusintegration) | The newly created integration. |
+| <a id="mutationprometheusintegrationresettokenintegration"></a>`integration` | [`AlertManagementPrometheusIntegration`](#alertmanagementprometheusintegration) | Newly created integration. |
### `Mutation.prometheusIntegrationUpdate`
@@ -3408,7 +3559,7 @@ Input type: `PrometheusIntegrationUpdateInput`
| <a id="mutationprometheusintegrationupdateactive"></a>`active` | [`Boolean`](#boolean) | Whether the integration is receiving alerts. |
| <a id="mutationprometheusintegrationupdateapiurl"></a>`apiUrl` | [`String`](#string) | Endpoint at which Prometheus can be queried. |
| <a id="mutationprometheusintegrationupdateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationprometheusintegrationupdateid"></a>`id` | [`IntegrationsPrometheusID!`](#integrationsprometheusid) | The ID of the integration to mutate. |
+| <a id="mutationprometheusintegrationupdateid"></a>`id` | [`IntegrationsPrometheusID!`](#integrationsprometheusid) | ID of the integration to mutate. |
#### Fields
@@ -3416,7 +3567,7 @@ Input type: `PrometheusIntegrationUpdateInput`
| ---- | ---- | ----------- |
| <a id="mutationprometheusintegrationupdateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationprometheusintegrationupdateerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationprometheusintegrationupdateintegration"></a>`integration` | [`AlertManagementPrometheusIntegration`](#alertmanagementprometheusintegration) | The newly created integration. |
+| <a id="mutationprometheusintegrationupdateintegration"></a>`integration` | [`AlertManagementPrometheusIntegration`](#alertmanagementprometheusintegration) | Newly created integration. |
### `Mutation.promoteToEpic`
@@ -3428,8 +3579,8 @@ Input type: `PromoteToEpicInput`
| ---- | ---- | ----------- |
| <a id="mutationpromotetoepicclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationpromotetoepicgrouppath"></a>`groupPath` | [`ID`](#id) | The group the promoted epic will belong to. |
-| <a id="mutationpromotetoepiciid"></a>`iid` | [`String!`](#string) | The IID of the issue to mutate. |
-| <a id="mutationpromotetoepicprojectpath"></a>`projectPath` | [`ID!`](#id) | The project the issue to mutate is in. |
+| <a id="mutationpromotetoepiciid"></a>`iid` | [`String!`](#string) | IID of the issue to mutate. |
+| <a id="mutationpromotetoepicprojectpath"></a>`projectPath` | [`ID!`](#id) | Project the issue to mutate is in. |
#### Fields
@@ -3438,7 +3589,7 @@ Input type: `PromoteToEpicInput`
| <a id="mutationpromotetoepicclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationpromotetoepicepic"></a>`epic` | [`Epic`](#epic) | The epic after issue promotion. |
| <a id="mutationpromotetoepicerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationpromotetoepicissue"></a>`issue` | [`Issue`](#issue) | The issue after mutation. |
+| <a id="mutationpromotetoepicissue"></a>`issue` | [`Issue`](#issue) | Issue after mutation. |
### `Mutation.releaseAssetLinkCreate`
@@ -3462,7 +3613,7 @@ Input type: `ReleaseAssetLinkCreateInput`
| ---- | ---- | ----------- |
| <a id="mutationreleaseassetlinkcreateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationreleaseassetlinkcreateerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationreleaseassetlinkcreatelink"></a>`link` | [`ReleaseAssetLink`](#releaseassetlink) | The asset link after mutation. |
+| <a id="mutationreleaseassetlinkcreatelink"></a>`link` | [`ReleaseAssetLink`](#releaseassetlink) | Asset link after mutation. |
### `Mutation.releaseAssetLinkDelete`
@@ -3481,7 +3632,7 @@ Input type: `ReleaseAssetLinkDeleteInput`
| ---- | ---- | ----------- |
| <a id="mutationreleaseassetlinkdeleteclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationreleaseassetlinkdeleteerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationreleaseassetlinkdeletelink"></a>`link` | [`ReleaseAssetLink`](#releaseassetlink) | The deleted release asset link. |
+| <a id="mutationreleaseassetlinkdeletelink"></a>`link` | [`ReleaseAssetLink`](#releaseassetlink) | Deleted release asset link. |
### `Mutation.releaseAssetLinkUpdate`
@@ -3494,7 +3645,7 @@ Input type: `ReleaseAssetLinkUpdateInput`
| <a id="mutationreleaseassetlinkupdateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationreleaseassetlinkupdatedirectassetpath"></a>`directAssetPath` | [`String`](#string) | Relative path for a direct asset link. |
| <a id="mutationreleaseassetlinkupdateid"></a>`id` | [`ReleasesLinkID!`](#releaseslinkid) | ID of the release asset link to update. |
-| <a id="mutationreleaseassetlinkupdatelinktype"></a>`linkType` | [`ReleaseAssetLinkType`](#releaseassetlinktype) | The type of the asset link. |
+| <a id="mutationreleaseassetlinkupdatelinktype"></a>`linkType` | [`ReleaseAssetLinkType`](#releaseassetlinktype) | Type of the asset link. |
| <a id="mutationreleaseassetlinkupdatename"></a>`name` | [`String`](#string) | Name of the asset link. |
| <a id="mutationreleaseassetlinkupdateurl"></a>`url` | [`String`](#string) | URL of the asset link. |
@@ -3504,7 +3655,7 @@ Input type: `ReleaseAssetLinkUpdateInput`
| ---- | ---- | ----------- |
| <a id="mutationreleaseassetlinkupdateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationreleaseassetlinkupdateerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationreleaseassetlinkupdatelink"></a>`link` | [`ReleaseAssetLink`](#releaseassetlink) | The asset link after mutation. |
+| <a id="mutationreleaseassetlinkupdatelink"></a>`link` | [`ReleaseAssetLink`](#releaseassetlink) | Asset link after mutation. |
### `Mutation.releaseCreate`
@@ -3517,11 +3668,11 @@ Input type: `ReleaseCreateInput`
| <a id="mutationreleasecreateassets"></a>`assets` | [`ReleaseAssetsInput`](#releaseassetsinput) | Assets associated to the release. |
| <a id="mutationreleasecreateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationreleasecreatedescription"></a>`description` | [`String`](#string) | Description (also known as "release notes") of the release. |
-| <a id="mutationreleasecreatemilestones"></a>`milestones` | [`[String!]`](#string) | The title of each milestone the release is associated with. GitLab Premium customers can specify group milestones. |
+| <a id="mutationreleasecreatemilestones"></a>`milestones` | [`[String!]`](#string) | Title of each milestone the release is associated with. GitLab Premium customers can specify group milestones. |
| <a id="mutationreleasecreatename"></a>`name` | [`String`](#string) | Name of the release. |
| <a id="mutationreleasecreateprojectpath"></a>`projectPath` | [`ID!`](#id) | Full path of the project the release is associated with. |
-| <a id="mutationreleasecreateref"></a>`ref` | [`String`](#string) | The commit SHA or branch name to use if creating a new tag. |
-| <a id="mutationreleasecreatereleasedat"></a>`releasedAt` | [`Time`](#time) | The date when the release will be/was ready. Defaults to the current time. |
+| <a id="mutationreleasecreateref"></a>`ref` | [`String`](#string) | Commit SHA or branch name to use if creating a new tag. |
+| <a id="mutationreleasecreatereleasedat"></a>`releasedAt` | [`Time`](#time) | Date and time for the release. Defaults to the current date and time. |
| <a id="mutationreleasecreatetagname"></a>`tagName` | [`String!`](#string) | Name of the tag to associate with the release. |
#### Fields
@@ -3530,7 +3681,7 @@ Input type: `ReleaseCreateInput`
| ---- | ---- | ----------- |
| <a id="mutationreleasecreateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationreleasecreateerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationreleasecreaterelease"></a>`release` | [`Release`](#release) | The release after mutation. |
+| <a id="mutationreleasecreaterelease"></a>`release` | [`Release`](#release) | Release after mutation. |
### `Mutation.releaseDelete`
@@ -3550,7 +3701,7 @@ Input type: `ReleaseDeleteInput`
| ---- | ---- | ----------- |
| <a id="mutationreleasedeleteclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationreleasedeleteerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationreleasedeleterelease"></a>`release` | [`Release`](#release) | The deleted release. |
+| <a id="mutationreleasedeleterelease"></a>`release` | [`Release`](#release) | Deleted release. |
### `Mutation.releaseUpdate`
@@ -3562,10 +3713,10 @@ Input type: `ReleaseUpdateInput`
| ---- | ---- | ----------- |
| <a id="mutationreleaseupdateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationreleaseupdatedescription"></a>`description` | [`String`](#string) | Description (release notes) of the release. |
-| <a id="mutationreleaseupdatemilestones"></a>`milestones` | [`[String!]`](#string) | The title of each milestone the release is associated with. GitLab Premium customers can specify group milestones. |
+| <a id="mutationreleaseupdatemilestones"></a>`milestones` | [`[String!]`](#string) | Title of each milestone the release is associated with. GitLab Premium customers can specify group milestones. |
| <a id="mutationreleaseupdatename"></a>`name` | [`String`](#string) | Name of the release. |
| <a id="mutationreleaseupdateprojectpath"></a>`projectPath` | [`ID!`](#id) | Full path of the project the release is associated with. |
-| <a id="mutationreleaseupdatereleasedat"></a>`releasedAt` | [`Time`](#time) | The release date. |
+| <a id="mutationreleaseupdatereleasedat"></a>`releasedAt` | [`Time`](#time) | Release date. |
| <a id="mutationreleaseupdatetagname"></a>`tagName` | [`String!`](#string) | Name of the tag associated with the release. |
#### Fields
@@ -3574,7 +3725,7 @@ Input type: `ReleaseUpdateInput`
| ---- | ---- | ----------- |
| <a id="mutationreleaseupdateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationreleaseupdateerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationreleaseupdaterelease"></a>`release` | [`Release`](#release) | The release after mutation. |
+| <a id="mutationreleaseupdaterelease"></a>`release` | [`Release`](#release) | Release after mutation. |
### `Mutation.removeProjectFromSecurityDashboard`
@@ -3605,7 +3756,7 @@ Input type: `RepositionImageDiffNoteInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationrepositionimagediffnoteclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationrepositionimagediffnoteid"></a>`id` | [`DiffNoteID!`](#diffnoteid) | The global ID of the DiffNote to update. |
+| <a id="mutationrepositionimagediffnoteid"></a>`id` | [`DiffNoteID!`](#diffnoteid) | Global ID of the DiffNote to update. |
| <a id="mutationrepositionimagediffnoteposition"></a>`position` | [`UpdateDiffImagePositionInput!`](#updatediffimagepositioninput) | The position of this note on a diff. |
#### Fields
@@ -3614,7 +3765,7 @@ Input type: `RepositionImageDiffNoteInput`
| ---- | ---- | ----------- |
| <a id="mutationrepositionimagediffnoteclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationrepositionimagediffnoteerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationrepositionimagediffnotenote"></a>`note` | [`Note`](#note) | The note after mutation. |
+| <a id="mutationrepositionimagediffnotenote"></a>`note` | [`Note`](#note) | Note after mutation. |
### `Mutation.runnerDelete`
@@ -3664,7 +3815,7 @@ Input type: `RunnerUpdateInput`
| ---- | ---- | ----------- |
| <a id="mutationrunnerupdateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationrunnerupdateerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationrunnerupdaterunner"></a>`runner` | [`CiRunner`](#cirunner) | The runner after mutation. |
+| <a id="mutationrunnerupdaterunner"></a>`runner` | [`CiRunner`](#cirunner) | Runner after mutation. |
### `Mutation.runnersRegistrationTokenReset`
@@ -3686,7 +3837,7 @@ Input type: `RunnersRegistrationTokenResetInput`
| ---- | ---- | ----------- |
| <a id="mutationrunnersregistrationtokenresetclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationrunnersregistrationtokenreseterrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationrunnersregistrationtokenresettoken"></a>`token` | [`String`](#string) | The runner token after mutation. |
+| <a id="mutationrunnersregistrationtokenresettoken"></a>`token` | [`String`](#string) | Runner token after mutation. |
### `Mutation.scanExecutionPolicyCommit`
@@ -3810,7 +3961,7 @@ Input type: `TodoCreateInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationtodocreateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationtodocreatetargetid"></a>`targetId` | [`TodoableID!`](#todoableid) | The global ID of the to-do item's parent. Issues, merge requests, designs and epics are supported. |
+| <a id="mutationtodocreatetargetid"></a>`targetId` | [`TodoableID!`](#todoableid) | Global ID of the to-do item's parent. Issues, merge requests, designs, and epics are supported. |
#### Fields
@@ -3818,7 +3969,7 @@ Input type: `TodoCreateInput`
| ---- | ---- | ----------- |
| <a id="mutationtodocreateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationtodocreateerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationtodocreatetodo"></a>`todo` | [`Todo`](#todo) | The to-do item created. |
+| <a id="mutationtodocreatetodo"></a>`todo` | [`Todo`](#todo) | To-do item created. |
### `Mutation.todoMarkDone`
@@ -3829,7 +3980,7 @@ Input type: `TodoMarkDoneInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationtodomarkdoneclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationtodomarkdoneid"></a>`id` | [`TodoID!`](#todoid) | The global ID of the to-do item to mark as done. |
+| <a id="mutationtodomarkdoneid"></a>`id` | [`TodoID!`](#todoid) | Global ID of the to-do item to mark as done. |
#### Fields
@@ -3837,7 +3988,7 @@ Input type: `TodoMarkDoneInput`
| ---- | ---- | ----------- |
| <a id="mutationtodomarkdoneclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationtodomarkdoneerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationtodomarkdonetodo"></a>`todo` | [`Todo!`](#todo) | The requested to-do item. |
+| <a id="mutationtodomarkdonetodo"></a>`todo` | [`Todo!`](#todo) | Requested to-do item. |
### `Mutation.todoRestore`
@@ -3848,7 +3999,7 @@ Input type: `TodoRestoreInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationtodorestoreclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationtodorestoreid"></a>`id` | [`TodoID!`](#todoid) | The global ID of the to-do item to restore. |
+| <a id="mutationtodorestoreid"></a>`id` | [`TodoID!`](#todoid) | Global ID of the to-do item to restore. |
#### Fields
@@ -3856,7 +4007,7 @@ Input type: `TodoRestoreInput`
| ---- | ---- | ----------- |
| <a id="mutationtodorestoreclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationtodorestoreerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationtodorestoretodo"></a>`todo` | [`Todo!`](#todo) | The requested to-do item. |
+| <a id="mutationtodorestoretodo"></a>`todo` | [`Todo!`](#todo) | Requested to-do item. |
### `Mutation.todoRestoreMany`
@@ -3867,7 +4018,7 @@ Input type: `TodoRestoreManyInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationtodorestoremanyclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationtodorestoremanyids"></a>`ids` | [`[TodoID!]!`](#todoid) | The global IDs of the to-do items to restore (a maximum of 50 is supported at once). |
+| <a id="mutationtodorestoremanyids"></a>`ids` | [`[TodoID!]!`](#todoid) | Global IDs of the to-do items to restore (a maximum of 50 is supported at once). |
#### Fields
@@ -3904,19 +4055,19 @@ Input type: `UpdateAlertStatusInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationupdatealertstatusclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationupdatealertstatusiid"></a>`iid` | [`String!`](#string) | The IID of the alert to mutate. |
-| <a id="mutationupdatealertstatusprojectpath"></a>`projectPath` | [`ID!`](#id) | The project the alert to mutate is in. |
-| <a id="mutationupdatealertstatusstatus"></a>`status` | [`AlertManagementStatus!`](#alertmanagementstatus) | The status to set the alert. |
+| <a id="mutationupdatealertstatusiid"></a>`iid` | [`String!`](#string) | IID of the alert to mutate. |
+| <a id="mutationupdatealertstatusprojectpath"></a>`projectPath` | [`ID!`](#id) | Project the alert to mutate is in. |
+| <a id="mutationupdatealertstatusstatus"></a>`status` | [`AlertManagementStatus!`](#alertmanagementstatus) | Status to set the alert. |
#### Fields
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="mutationupdatealertstatusalert"></a>`alert` | [`AlertManagementAlert`](#alertmanagementalert) | The alert after mutation. |
+| <a id="mutationupdatealertstatusalert"></a>`alert` | [`AlertManagementAlert`](#alertmanagementalert) | Alert after mutation. |
| <a id="mutationupdatealertstatusclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationupdatealertstatuserrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationupdatealertstatusissue"></a>`issue` | [`Issue`](#issue) | The issue created after mutation. |
-| <a id="mutationupdatealertstatustodo"></a>`todo` | [`Todo`](#todo) | The to-do item after mutation. |
+| <a id="mutationupdatealertstatusissue"></a>`issue` | [`Issue`](#issue) | Issue created after mutation. |
+| <a id="mutationupdatealertstatustodo"></a>`todo` | [`Todo`](#todo) | To-do item after mutation. |
### `Mutation.updateBoard`
@@ -3930,19 +4081,19 @@ Input type: `UpdateBoardInput`
| <a id="mutationupdateboardclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationupdateboardhidebackloglist"></a>`hideBacklogList` | [`Boolean`](#boolean) | Whether or not backlog list is hidden. |
| <a id="mutationupdateboardhideclosedlist"></a>`hideClosedList` | [`Boolean`](#boolean) | Whether or not closed list is hidden. |
-| <a id="mutationupdateboardid"></a>`id` | [`BoardID!`](#boardid) | The board global ID. |
+| <a id="mutationupdateboardid"></a>`id` | [`BoardID!`](#boardid) | Board global ID. |
| <a id="mutationupdateboarditerationid"></a>`iterationId` | [`IterationID`](#iterationid) | ID of iteration to be assigned to the board. |
| <a id="mutationupdateboardlabelids"></a>`labelIds` | [`[LabelID!]`](#labelid) | IDs of labels to be added to the board. |
| <a id="mutationupdateboardlabels"></a>`labels` | [`[String!]`](#string) | Labels of the issue. |
| <a id="mutationupdateboardmilestoneid"></a>`milestoneId` | [`MilestoneID`](#milestoneid) | ID of milestone to be assigned to the board. |
-| <a id="mutationupdateboardname"></a>`name` | [`String`](#string) | The board name. |
+| <a id="mutationupdateboardname"></a>`name` | [`String`](#string) | Board name. |
| <a id="mutationupdateboardweight"></a>`weight` | [`Int`](#int) | Weight value to be assigned to the board. |
#### Fields
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="mutationupdateboardboard"></a>`board` | [`Board`](#board) | The board after mutation. |
+| <a id="mutationupdateboardboard"></a>`board` | [`Board`](#board) | Board after mutation. |
| <a id="mutationupdateboardclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationupdateboarderrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
@@ -4023,14 +4174,14 @@ Input type: `UpdateContainerExpirationPolicyInput`
| <a id="mutationupdatecontainerexpirationpolicynameregex"></a>`nameRegex` | [`UntrustedRegexp`](#untrustedregexp) | Tags with names matching this regex pattern will expire. |
| <a id="mutationupdatecontainerexpirationpolicynameregexkeep"></a>`nameRegexKeep` | [`UntrustedRegexp`](#untrustedregexp) | Tags with names matching this regex pattern will be preserved. |
| <a id="mutationupdatecontainerexpirationpolicyolderthan"></a>`olderThan` | [`ContainerExpirationPolicyOlderThanEnum`](#containerexpirationpolicyolderthanenum) | Tags older that this will expire. |
-| <a id="mutationupdatecontainerexpirationpolicyprojectpath"></a>`projectPath` | [`ID!`](#id) | The project path where the container expiration policy is located. |
+| <a id="mutationupdatecontainerexpirationpolicyprojectpath"></a>`projectPath` | [`ID!`](#id) | Project path where the container expiration policy is located. |
#### Fields
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationupdatecontainerexpirationpolicyclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationupdatecontainerexpirationpolicycontainerexpirationpolicy"></a>`containerExpirationPolicy` | [`ContainerExpirationPolicy`](#containerexpirationpolicy) | The container expiration policy after mutation. |
+| <a id="mutationupdatecontainerexpirationpolicycontainerexpirationpolicy"></a>`containerExpirationPolicy` | [`ContainerExpirationPolicy`](#containerexpirationpolicy) | Container expiration policy after mutation. |
| <a id="mutationupdatecontainerexpirationpolicyerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
### `Mutation.updateEpic`
@@ -4099,7 +4250,7 @@ Input type: `UpdateImageDiffNoteInput`
| ---- | ---- | ----------- |
| <a id="mutationupdateimagediffnotebody"></a>`body` | [`String`](#string) | Content of the note. |
| <a id="mutationupdateimagediffnoteclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationupdateimagediffnoteid"></a>`id` | [`NoteID!`](#noteid) | The global ID of the note to update. |
+| <a id="mutationupdateimagediffnoteid"></a>`id` | [`NoteID!`](#noteid) | Global ID of the note to update. |
| <a id="mutationupdateimagediffnoteposition"></a>`position` | [`UpdateDiffImagePositionInput`](#updatediffimagepositioninput) | The position of this note on a diff. |
#### Fields
@@ -4108,7 +4259,7 @@ Input type: `UpdateImageDiffNoteInput`
| ---- | ---- | ----------- |
| <a id="mutationupdateimagediffnoteclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationupdateimagediffnoteerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationupdateimagediffnotenote"></a>`note` | [`Note`](#note) | The note after mutation. |
+| <a id="mutationupdateimagediffnotenote"></a>`note` | [`Note`](#note) | Note after mutation. |
### `Mutation.updateIssue`
@@ -4118,18 +4269,19 @@ Input type: `UpdateIssueInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="mutationupdateissueaddlabelids"></a>`addLabelIds` | [`[ID!]`](#id) | The IDs of labels to be added to the issue. |
+| <a id="mutationupdateissueaddlabelids"></a>`addLabelIds` | [`[ID!]`](#id) | IDs of labels to be added to the issue. |
| <a id="mutationupdateissueclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationupdateissueconfidential"></a>`confidential` | [`Boolean`](#boolean) | Indicates the issue is confidential. |
| <a id="mutationupdateissuedescription"></a>`description` | [`String`](#string) | Description of the issue. |
| <a id="mutationupdateissueduedate"></a>`dueDate` | [`ISO8601Date`](#iso8601date) | Due date of the issue. |
| <a id="mutationupdateissueepicid"></a>`epicId` | [`EpicID`](#epicid) | The ID of the parent epic. NULL when removing the association. |
| <a id="mutationupdateissuehealthstatus"></a>`healthStatus` | [`HealthStatus`](#healthstatus) | The desired health status. |
-| <a id="mutationupdateissueiid"></a>`iid` | [`String!`](#string) | The IID of the issue to mutate. |
+| <a id="mutationupdateissueiid"></a>`iid` | [`String!`](#string) | IID of the issue to mutate. |
+| <a id="mutationupdateissuelabelids"></a>`labelIds` | [`[ID!]`](#id) | IDs of labels to be set. Replaces existing issue labels. |
| <a id="mutationupdateissuelocked"></a>`locked` | [`Boolean`](#boolean) | Indicates discussion is locked on the issue. |
-| <a id="mutationupdateissuemilestoneid"></a>`milestoneId` | [`ID`](#id) | The ID of the milestone to assign to the issue. On update milestone will be removed if set to null. |
-| <a id="mutationupdateissueprojectpath"></a>`projectPath` | [`ID!`](#id) | The project the issue to mutate is in. |
-| <a id="mutationupdateissueremovelabelids"></a>`removeLabelIds` | [`[ID!]`](#id) | The IDs of labels to be removed from the issue. |
+| <a id="mutationupdateissuemilestoneid"></a>`milestoneId` | [`ID`](#id) | ID of the milestone to assign to the issue. On update milestone will be removed if set to null. |
+| <a id="mutationupdateissueprojectpath"></a>`projectPath` | [`ID!`](#id) | Project the issue to mutate is in. |
+| <a id="mutationupdateissueremovelabelids"></a>`removeLabelIds` | [`[ID!]`](#id) | IDs of labels to be removed from the issue. |
| <a id="mutationupdateissuestateevent"></a>`stateEvent` | [`IssueStateEvent`](#issuestateevent) | Close or reopen an issue. |
| <a id="mutationupdateissuetitle"></a>`title` | [`String`](#string) | Title of the issue. |
| <a id="mutationupdateissuetype"></a>`type` | [`IssueType`](#issuetype) | Type of the issue. |
@@ -4141,7 +4293,7 @@ Input type: `UpdateIssueInput`
| ---- | ---- | ----------- |
| <a id="mutationupdateissueclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationupdateissueerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationupdateissueissue"></a>`issue` | [`Issue`](#issue) | The issue after mutation. |
+| <a id="mutationupdateissueissue"></a>`issue` | [`Issue`](#issue) | Issue after mutation. |
### `Mutation.updateIteration`
@@ -4180,7 +4332,7 @@ Input type: `UpdateNamespacePackageSettingsInput`
| <a id="mutationupdatenamespacepackagesettingsgenericduplicatesallowed"></a>`genericDuplicatesAllowed` | [`Boolean`](#boolean) | Indicates whether duplicate generic packages are allowed for this namespace. |
| <a id="mutationupdatenamespacepackagesettingsmavenduplicateexceptionregex"></a>`mavenDuplicateExceptionRegex` | [`UntrustedRegexp`](#untrustedregexp) | When maven_duplicates_allowed is false, you can publish duplicate packages with names that match this regex. Otherwise, this setting has no effect. |
| <a id="mutationupdatenamespacepackagesettingsmavenduplicatesallowed"></a>`mavenDuplicatesAllowed` | [`Boolean`](#boolean) | Indicates whether duplicate Maven packages are allowed for this namespace. |
-| <a id="mutationupdatenamespacepackagesettingsnamespacepath"></a>`namespacePath` | [`ID!`](#id) | The namespace path where the namespace package setting is located. |
+| <a id="mutationupdatenamespacepackagesettingsnamespacepath"></a>`namespacePath` | [`ID!`](#id) | Namespace path where the namespace package setting is located. |
#### Fields
@@ -4188,7 +4340,7 @@ Input type: `UpdateNamespacePackageSettingsInput`
| ---- | ---- | ----------- |
| <a id="mutationupdatenamespacepackagesettingsclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationupdatenamespacepackagesettingserrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationupdatenamespacepackagesettingspackagesettings"></a>`packageSettings` | [`PackageSettings`](#packagesettings) | The namespace package setting after mutation. |
+| <a id="mutationupdatenamespacepackagesettingspackagesettings"></a>`packageSettings` | [`PackageSettings`](#packagesettings) | Namespace package setting after mutation. |
### `Mutation.updateNote`
@@ -4205,8 +4357,8 @@ Input type: `UpdateNoteInput`
| ---- | ---- | ----------- |
| <a id="mutationupdatenotebody"></a>`body` | [`String`](#string) | Content of the note. |
| <a id="mutationupdatenoteclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationupdatenoteconfidential"></a>`confidential` | [`Boolean`](#boolean) | The confidentiality flag of a note. Default is false. |
-| <a id="mutationupdatenoteid"></a>`id` | [`NoteID!`](#noteid) | The global ID of the note to update. |
+| <a id="mutationupdatenoteconfidential"></a>`confidential` | [`Boolean`](#boolean) | Confidentiality flag of a note. Default is false. |
+| <a id="mutationupdatenoteid"></a>`id` | [`NoteID!`](#noteid) | Global ID of the note to update. |
#### Fields
@@ -4214,7 +4366,7 @@ Input type: `UpdateNoteInput`
| ---- | ---- | ----------- |
| <a id="mutationupdatenoteclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationupdatenoteerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationupdatenotenote"></a>`note` | [`Note`](#note) | The note after mutation. |
+| <a id="mutationupdatenotenote"></a>`note` | [`Note`](#note) | Note after mutation. |
### `Mutation.updateRequirement`
@@ -4252,10 +4404,10 @@ Input type: `UpdateSnippetInput`
| <a id="mutationupdatesnippetcaptcharesponse"></a>`captchaResponse` **{warning-solid}** | [`String`](#string) | **Deprecated:** Use spam protection with HTTP headers instead. Deprecated in 13.11. |
| <a id="mutationupdatesnippetclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationupdatesnippetdescription"></a>`description` | [`String`](#string) | Description of the snippet. |
-| <a id="mutationupdatesnippetid"></a>`id` | [`SnippetID!`](#snippetid) | The global ID of the snippet to update. |
+| <a id="mutationupdatesnippetid"></a>`id` | [`SnippetID!`](#snippetid) | Global ID of the snippet to update. |
| <a id="mutationupdatesnippetspamlogid"></a>`spamLogId` **{warning-solid}** | [`Int`](#int) | **Deprecated:** Use spam protection with HTTP headers instead. Deprecated in 13.11. |
| <a id="mutationupdatesnippettitle"></a>`title` | [`String`](#string) | Title of the snippet. |
-| <a id="mutationupdatesnippetvisibilitylevel"></a>`visibilityLevel` | [`VisibilityLevelsEnum`](#visibilitylevelsenum) | The visibility level of the snippet. |
+| <a id="mutationupdatesnippetvisibilitylevel"></a>`visibilityLevel` | [`VisibilityLevelsEnum`](#visibilitylevelsenum) | Visibility level of the snippet. |
#### Fields
@@ -4265,7 +4417,7 @@ Input type: `UpdateSnippetInput`
| <a id="mutationupdatesnippetclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationupdatesnippeterrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
| <a id="mutationupdatesnippetneedscaptcharesponse"></a>`needsCaptchaResponse` **{warning-solid}** | [`Boolean`](#boolean) | **Deprecated:** Use spam protection with HTTP headers instead. Deprecated in 13.11. |
-| <a id="mutationupdatesnippetsnippet"></a>`snippet` | [`Snippet`](#snippet) | The snippet after mutation. |
+| <a id="mutationupdatesnippetsnippet"></a>`snippet` | [`Snippet`](#snippet) | Snippet after mutation. |
| <a id="mutationupdatesnippetspam"></a>`spam` **{warning-solid}** | [`Boolean`](#boolean) | **Deprecated:** Use spam protection with HTTP headers instead. Deprecated in 13.11. |
| <a id="mutationupdatesnippetspamlogid"></a>`spamLogId` **{warning-solid}** | [`Int`](#int) | **Deprecated:** Use spam protection with HTTP headers instead. Deprecated in 13.11. |
@@ -4278,7 +4430,7 @@ Input type: `UserCalloutCreateInput`
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="mutationusercalloutcreateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
-| <a id="mutationusercalloutcreatefeaturename"></a>`featureName` | [`String!`](#string) | The feature name you want to dismiss the callout for. |
+| <a id="mutationusercalloutcreatefeaturename"></a>`featureName` | [`String!`](#string) | Feature name you want to dismiss the callout for. |
#### Fields
@@ -4286,7 +4438,7 @@ Input type: `UserCalloutCreateInput`
| ---- | ---- | ----------- |
| <a id="mutationusercalloutcreateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationusercalloutcreateerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during execution of the mutation. |
-| <a id="mutationusercalloutcreateusercallout"></a>`userCallout` | [`UserCallout!`](#usercallout) | The user callout dismissed. |
+| <a id="mutationusercalloutcreateusercallout"></a>`userCallout` | [`UserCallout!`](#usercallout) | User callout dismissed. |
### `Mutation.vulnerabilityConfirm`
@@ -4836,6 +4988,52 @@ The edge type for [`CiJob`](#cijob).
| <a id="cijobedgecursor"></a>`cursor` | [`String!`](#string) | A cursor for use in pagination. |
| <a id="cijobedgenode"></a>`node` | [`CiJob`](#cijob) | The item at the end of the edge. |
+#### `CiMinutesNamespaceMonthlyUsageConnection`
+
+The connection type for [`CiMinutesNamespaceMonthlyUsage`](#ciminutesnamespacemonthlyusage).
+
+##### Fields
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="ciminutesnamespacemonthlyusageconnectionedges"></a>`edges` | [`[CiMinutesNamespaceMonthlyUsageEdge]`](#ciminutesnamespacemonthlyusageedge) | A list of edges. |
+| <a id="ciminutesnamespacemonthlyusageconnectionnodes"></a>`nodes` | [`[CiMinutesNamespaceMonthlyUsage]`](#ciminutesnamespacemonthlyusage) | A list of nodes. |
+| <a id="ciminutesnamespacemonthlyusageconnectionpageinfo"></a>`pageInfo` | [`PageInfo!`](#pageinfo) | Information to aid in pagination. |
+
+#### `CiMinutesNamespaceMonthlyUsageEdge`
+
+The edge type for [`CiMinutesNamespaceMonthlyUsage`](#ciminutesnamespacemonthlyusage).
+
+##### Fields
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="ciminutesnamespacemonthlyusageedgecursor"></a>`cursor` | [`String!`](#string) | A cursor for use in pagination. |
+| <a id="ciminutesnamespacemonthlyusageedgenode"></a>`node` | [`CiMinutesNamespaceMonthlyUsage`](#ciminutesnamespacemonthlyusage) | The item at the end of the edge. |
+
+#### `CiMinutesProjectMonthlyUsageConnection`
+
+The connection type for [`CiMinutesProjectMonthlyUsage`](#ciminutesprojectmonthlyusage).
+
+##### Fields
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="ciminutesprojectmonthlyusageconnectionedges"></a>`edges` | [`[CiMinutesProjectMonthlyUsageEdge]`](#ciminutesprojectmonthlyusageedge) | A list of edges. |
+| <a id="ciminutesprojectmonthlyusageconnectionnodes"></a>`nodes` | [`[CiMinutesProjectMonthlyUsage]`](#ciminutesprojectmonthlyusage) | A list of nodes. |
+| <a id="ciminutesprojectmonthlyusageconnectionpageinfo"></a>`pageInfo` | [`PageInfo!`](#pageinfo) | Information to aid in pagination. |
+
+#### `CiMinutesProjectMonthlyUsageEdge`
+
+The edge type for [`CiMinutesProjectMonthlyUsage`](#ciminutesprojectmonthlyusage).
+
+##### Fields
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="ciminutesprojectmonthlyusageedgecursor"></a>`cursor` | [`String!`](#string) | A cursor for use in pagination. |
+| <a id="ciminutesprojectmonthlyusageedgenode"></a>`node` | [`CiMinutesProjectMonthlyUsage`](#ciminutesprojectmonthlyusage) | The item at the end of the edge. |
+
#### `CiRunnerConnection`
The connection type for [`CiRunner`](#cirunner).
@@ -5485,6 +5683,29 @@ The edge type for [`Event`](#event).
| <a id="eventedgecursor"></a>`cursor` | [`String!`](#string) | A cursor for use in pagination. |
| <a id="eventedgenode"></a>`node` | [`Event`](#event) | The item at the end of the edge. |
+#### `GroupConnection`
+
+The connection type for [`Group`](#group).
+
+##### Fields
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="groupconnectionedges"></a>`edges` | [`[GroupEdge]`](#groupedge) | A list of edges. |
+| <a id="groupconnectionnodes"></a>`nodes` | [`[Group]`](#group) | A list of nodes. |
+| <a id="groupconnectionpageinfo"></a>`pageInfo` | [`PageInfo!`](#pageinfo) | Information to aid in pagination. |
+
+#### `GroupEdge`
+
+The edge type for [`Group`](#group).
+
+##### Fields
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="groupedgecursor"></a>`cursor` | [`String!`](#string) | A cursor for use in pagination. |
+| <a id="groupedgenode"></a>`node` | [`Group`](#group) | The item at the end of the edge. |
+
#### `GroupMemberConnection`
The connection type for [`GroupMember`](#groupmember).
@@ -6054,6 +6275,29 @@ The connection type for [`Package`](#package).
| <a id="packageconnectionnodes"></a>`nodes` | [`[Package]`](#package) | A list of nodes. |
| <a id="packageconnectionpageinfo"></a>`pageInfo` | [`PageInfo!`](#pageinfo) | Information to aid in pagination. |
+#### `PackageDependencyLinkConnection`
+
+The connection type for [`PackageDependencyLink`](#packagedependencylink).
+
+##### Fields
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="packagedependencylinkconnectionedges"></a>`edges` | [`[PackageDependencyLinkEdge]`](#packagedependencylinkedge) | A list of edges. |
+| <a id="packagedependencylinkconnectionnodes"></a>`nodes` | [`[PackageDependencyLink]`](#packagedependencylink) | A list of nodes. |
+| <a id="packagedependencylinkconnectionpageinfo"></a>`pageInfo` | [`PageInfo!`](#pageinfo) | Information to aid in pagination. |
+
+#### `PackageDependencyLinkEdge`
+
+The edge type for [`PackageDependencyLink`](#packagedependencylink).
+
+##### Fields
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="packagedependencylinkedgecursor"></a>`cursor` | [`String!`](#string) | A cursor for use in pagination. |
+| <a id="packagedependencylinkedgenode"></a>`node` | [`PackageDependencyLink`](#packagedependencylink) | The item at the end of the edge. |
+
#### `PackageEdge`
The edge type for [`Package`](#package).
@@ -6898,6 +7142,29 @@ The edge type for [`Todo`](#todo).
| <a id="todoedgecursor"></a>`cursor` | [`String!`](#string) | A cursor for use in pagination. |
| <a id="todoedgenode"></a>`node` | [`Todo`](#todo) | The item at the end of the edge. |
+#### `TreeConnection`
+
+The connection type for [`Tree`](#tree).
+
+##### Fields
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="treeconnectionedges"></a>`edges` | [`[TreeEdge]`](#treeedge) | A list of edges. |
+| <a id="treeconnectionnodes"></a>`nodes` | [`[Tree]`](#tree) | A list of nodes. |
+| <a id="treeconnectionpageinfo"></a>`pageInfo` | [`PageInfo!`](#pageinfo) | Information to aid in pagination. |
+
+#### `TreeEdge`
+
+The edge type for [`Tree`](#tree).
+
+##### Fields
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="treeedgecursor"></a>`cursor` | [`String!`](#string) | A cursor for use in pagination. |
+| <a id="treeedgenode"></a>`node` | [`Tree`](#tree) | The item at the end of the edge. |
+
#### `TreeEntryConnection`
The connection type for [`TreeEntry`](#treeentry).
@@ -7795,6 +8062,25 @@ Represents the total number of issues and their weights for a particular day.
| ---- | ---- | ----------- |
| <a id="cijobtokenscopetypeprojects"></a>`projects` | [`ProjectConnection!`](#projectconnection) | Allow list of projects that can be accessed by CI Job tokens created by this project. (see [Connections](#connections)) |
+### `CiMinutesNamespaceMonthlyUsage`
+
+#### Fields
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="ciminutesnamespacemonthlyusageminutes"></a>`minutes` | [`Int`](#int) | The total number of minutes used by all projects in the namespace. |
+| <a id="ciminutesnamespacemonthlyusagemonth"></a>`month` | [`String`](#string) | The month related to the usage data. |
+| <a id="ciminutesnamespacemonthlyusageprojects"></a>`projects` | [`CiMinutesProjectMonthlyUsageConnection`](#ciminutesprojectmonthlyusageconnection) | CI minutes usage data for projects in the namespace. (see [Connections](#connections)) |
+
+### `CiMinutesProjectMonthlyUsage`
+
+#### Fields
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="ciminutesprojectmonthlyusageminutes"></a>`minutes` | [`Int`](#int) | The number of CI minutes used by the project in the month. |
+| <a id="ciminutesprojectmonthlyusagename"></a>`name` | [`String`](#string) | The name of the project. |
+
### `CiRunner`
#### Fields
@@ -8296,8 +8582,8 @@ four standard [pagination arguments](#connection-pagination-arguments):
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="designversionsearlierorequaltoid"></a>`earlierOrEqualToId` | [`DesignManagementVersionID`](#designmanagementversionid) | The Global ID of the most recent acceptable version. |
-| <a id="designversionsearlierorequaltosha"></a>`earlierOrEqualToSha` | [`String`](#string) | The SHA256 of the most recent acceptable version. |
+| <a id="designversionsearlierorequaltoid"></a>`earlierOrEqualToId` | [`DesignManagementVersionID`](#designmanagementversionid) | Global ID of the most recent acceptable version. |
+| <a id="designversionsearlierorequaltosha"></a>`earlierOrEqualToSha` | [`String`](#string) | SHA256 of the most recent acceptable version. |
### `DesignAtVersion`
@@ -8357,7 +8643,7 @@ Returns [`DesignAtVersion`](#designatversion).
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="designcollectiondesignatversionid"></a>`id` | [`DesignManagementDesignAtVersionID!`](#designmanagementdesignatversionid) | The Global ID of the design at this version. |
+| <a id="designcollectiondesignatversionid"></a>`id` | [`DesignManagementDesignAtVersionID!`](#designmanagementdesignatversionid) | Global ID of the design at this version. |
##### `DesignCollection.designs`
@@ -8387,8 +8673,8 @@ Returns [`DesignVersion`](#designversion).
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="designcollectionversionid"></a>`id` | [`DesignManagementVersionID`](#designmanagementversionid) | The Global ID of the version. |
-| <a id="designcollectionversionsha"></a>`sha` | [`String`](#string) | The SHA256 of a specific version. |
+| <a id="designcollectionversionid"></a>`id` | [`DesignManagementVersionID`](#designmanagementversionid) | Global ID of the version. |
+| <a id="designcollectionversionsha"></a>`sha` | [`String`](#string) | SHA256 of a specific version. |
##### `DesignCollection.versions`
@@ -8404,8 +8690,8 @@ four standard [pagination arguments](#connection-pagination-arguments):
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="designcollectionversionsearlierorequaltoid"></a>`earlierOrEqualToId` | [`DesignManagementVersionID`](#designmanagementversionid) | The Global ID of the most recent acceptable version. |
-| <a id="designcollectionversionsearlierorequaltosha"></a>`earlierOrEqualToSha` | [`String`](#string) | The SHA256 of the most recent acceptable version. |
+| <a id="designcollectionversionsearlierorequaltoid"></a>`earlierOrEqualToId` | [`DesignManagementVersionID`](#designmanagementversionid) | Global ID of the most recent acceptable version. |
+| <a id="designcollectionversionsearlierorequaltosha"></a>`earlierOrEqualToSha` | [`String`](#string) | SHA256 of the most recent acceptable version. |
### `DesignManagement`
@@ -8421,7 +8707,7 @@ Returns [`DesignAtVersion`](#designatversion).
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="designmanagementdesignatversionid"></a>`id` | [`DesignManagementDesignAtVersionID!`](#designmanagementdesignatversionid) | The Global ID of the design at this version. |
+| <a id="designmanagementdesignatversionid"></a>`id` | [`DesignManagementDesignAtVersionID!`](#designmanagementdesignatversionid) | Global ID of the design at this version. |
##### `DesignManagement.version`
@@ -8433,7 +8719,7 @@ Returns [`DesignVersion`](#designversion).
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="designmanagementversionid"></a>`id` | [`DesignManagementVersionID!`](#designmanagementversionid) | The Global ID of the version. |
+| <a id="designmanagementversionid"></a>`id` | [`DesignManagementVersionID!`](#designmanagementversionid) | Global ID of the version. |
### `DesignVersion`
@@ -8461,9 +8747,9 @@ Returns [`DesignAtVersion!`](#designatversion).
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="designversiondesignatversiondesignid"></a>`designId` | [`DesignManagementDesignID`](#designmanagementdesignid) | The ID of a specific design. |
-| <a id="designversiondesignatversionfilename"></a>`filename` | [`String`](#string) | The filename of a specific design. |
-| <a id="designversiondesignatversionid"></a>`id` | [`DesignManagementDesignAtVersionID`](#designmanagementdesignatversionid) | The ID of the DesignAtVersion. |
+| <a id="designversiondesignatversiondesignid"></a>`designId` | [`DesignManagementDesignID`](#designmanagementdesignid) | ID of a specific design. |
+| <a id="designversiondesignatversionfilename"></a>`filename` | [`String`](#string) | Filename of a specific design. |
+| <a id="designversiondesignatversionid"></a>`id` | [`DesignManagementDesignAtVersionID`](#designmanagementdesignatversionid) | ID of the DesignAtVersion. |
##### `DesignVersion.designsAtVersion`
@@ -8942,6 +9228,7 @@ Relationship between an epic and an issue.
| <a id="epicissueiid"></a>`iid` | [`ID!`](#id) | Internal ID of the issue. |
| <a id="epicissueiteration"></a>`iteration` | [`Iteration`](#iteration) | Iteration of the issue. |
| <a id="epicissuelabels"></a>`labels` | [`LabelConnection`](#labelconnection) | Labels of the issue. (see [Connections](#connections)) |
+| <a id="epicissuemergerequestscount"></a>`mergeRequestsCount` | [`Int!`](#int) | Number of merge requests that close the issue on merge. |
| <a id="epicissuemetricimages"></a>`metricImages` | [`[MetricImage!]`](#metricimage) | Metric images associated to the issue. |
| <a id="epicissuemilestone"></a>`milestone` | [`Milestone`](#milestone) | Milestone of the issue. |
| <a id="epicissuemoved"></a>`moved` | [`Boolean`](#boolean) | Indicates if issue got moved from other project. |
@@ -9079,6 +9366,7 @@ Represents an escalation rule for an escalation policy.
| <a id="escalationruletypeid"></a>`id` | [`IncidentManagementEscalationRuleID`](#incidentmanagementescalationruleid) | ID of the escalation policy. |
| <a id="escalationruletypeoncallschedule"></a>`oncallSchedule` | [`IncidentManagementOncallSchedule`](#incidentmanagementoncallschedule) | The on-call schedule to notify. |
| <a id="escalationruletypestatus"></a>`status` | [`EscalationRuleStatus`](#escalationrulestatus) | The status required to prevent the rule from activating. |
+| <a id="escalationruletypeuser"></a>`user` | [`UserCore`](#usercore) | The user to notify. |
### `Event`
@@ -9294,6 +9582,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
| <a id="grouprequiretwofactorauthentication"></a>`requireTwoFactorAuthentication` | [`Boolean`](#boolean) | Indicates if all users in this group are required to set up two-factor authentication. |
| <a id="grouprootstoragestatistics"></a>`rootStorageStatistics` | [`RootStorageStatistics`](#rootstoragestatistics) | Aggregated storage statistics of the namespace. Only available for root namespaces. |
| <a id="groupsharewithgrouplock"></a>`shareWithGroupLock` | [`Boolean`](#boolean) | Indicates if sharing a project with another group within this group is prevented. |
+| <a id="groupsharedrunnerssetting"></a>`sharedRunnersSetting` | [`SharedRunnersSetting`](#sharedrunnerssetting) | Shared runners availability for the namespace and its descendants. |
| <a id="groupstats"></a>`stats` | [`GroupStats`](#groupstats) | Group statistics. |
| <a id="groupstoragesizelimit"></a>`storageSizeLimit` | [`Float`](#float) | Total storage limit of the root namespace in bytes. |
| <a id="groupsubgroupcreationlevel"></a>`subgroupCreationLevel` | [`String`](#string) | The permission level required to create subgroups within the group. |
@@ -9318,7 +9607,7 @@ Returns [`Board`](#board).
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="groupboardid"></a>`id` | [`BoardID!`](#boardid) | The board's ID. |
+| <a id="groupboardid"></a>`id` | [`BoardID!`](#boardid) | ID of the board. |
##### `Group.boards`
@@ -9385,6 +9674,24 @@ four standard [pagination arguments](#connection-pagination-arguments):
| <a id="groupcontainerrepositoriesname"></a>`name` | [`String`](#string) | Filter the container repositories by their name. |
| <a id="groupcontainerrepositoriessort"></a>`sort` | [`ContainerRepositorySort`](#containerrepositorysort) | Sort container repositories by this criteria. |
+##### `Group.descendantGroups`
+
+List of descendant groups of this group.
+
+Returns [`GroupConnection`](#groupconnection).
+
+This field returns a [connection](#connections). It accepts the
+four standard [pagination arguments](#connection-pagination-arguments):
+`before: String`, `after: String`, `first: Int`, `last: Int`.
+
+###### Arguments
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="groupdescendantgroupsincludeparentdescendants"></a>`includeParentDescendants` | [`Boolean`](#boolean) | List of descendant groups of the parent group. |
+| <a id="groupdescendantgroupsowned"></a>`owned` | [`Boolean`](#boolean) | Limit result to groups owned by authenticated user. |
+| <a id="groupdescendantgroupssearch"></a>`search` | [`String`](#string) | Search query for group name or group full path. |
+
##### `Group.epic`
Find a single epic.
@@ -9506,6 +9813,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
| <a id="groupissuesiterationwildcardid"></a>`iterationWildcardId` | [`IterationWildcardId`](#iterationwildcardid) | Filter by iteration ID wildcard. |
| <a id="groupissueslabelname"></a>`labelName` | [`[String]`](#string) | Labels applied to this issue. |
| <a id="groupissuesmilestonetitle"></a>`milestoneTitle` | [`[String]`](#string) | Milestone applied to this issue. |
+| <a id="groupissuesmilestonewildcardid"></a>`milestoneWildcardId` | [`MilestoneWildcardId`](#milestonewildcardid) | Filter issues by milestone ID wildcard. |
| <a id="groupissuesnot"></a>`not` | [`NegatedIssueFilterInput`](#negatedissuefilterinput) | Negated arguments. |
| <a id="groupissuessearch"></a>`search` | [`String`](#string) | Search query for issue title or description. |
| <a id="groupissuessort"></a>`sort` | [`IssueSort`](#issuesort) | Sort issues by this criteria. |
@@ -9700,10 +10008,13 @@ four standard [pagination arguments](#connection-pagination-arguments):
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="grouptimelogsenddate"></a>`endDate` | [`Time`](#time) | List time logs within a date range where the logged date is equal to or before endDate. |
-| <a id="grouptimelogsendtime"></a>`endTime` | [`Time`](#time) | List time-logs within a time range where the logged time is equal to or before endTime. |
-| <a id="grouptimelogsstartdate"></a>`startDate` | [`Time`](#time) | List time logs within a date range where the logged date is equal to or after startDate. |
-| <a id="grouptimelogsstarttime"></a>`startTime` | [`Time`](#time) | List time-logs within a time range where the logged time is equal to or after startTime. |
+| <a id="grouptimelogsenddate"></a>`endDate` | [`Time`](#time) | List timelogs within a date range where the logged date is equal to or before endDate. |
+| <a id="grouptimelogsendtime"></a>`endTime` | [`Time`](#time) | List timelogs within a time range where the logged time is equal to or before endTime. |
+| <a id="grouptimelogsgroupid"></a>`groupId` | [`GroupID`](#groupid) | List timelogs for a group. |
+| <a id="grouptimelogsprojectid"></a>`projectId` | [`ProjectID`](#projectid) | List timelogs for a project. |
+| <a id="grouptimelogsstartdate"></a>`startDate` | [`Time`](#time) | List timelogs within a date range where the logged date is equal to or after startDate. |
+| <a id="grouptimelogsstarttime"></a>`startTime` | [`Time`](#time) | List timelogs within a time range where the logged time is equal to or after startTime. |
+| <a id="grouptimelogsusername"></a>`username` | [`String`](#string) | List timelogs for a user. |
##### `Group.vulnerabilities`
@@ -9731,7 +10042,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
##### `Group.vulnerabilitiesCountByDay`
-Number of vulnerabilities per day for the projects in the group and its subgroups.
+The historical number of vulnerabilities per day for the projects in the group and its subgroups.
Returns [`VulnerabilitiesCountByDayConnection`](#vulnerabilitiescountbydayconnection).
@@ -9996,6 +10307,7 @@ Returns [`VulnerabilitySeveritiesCount`](#vulnerabilityseveritiescount).
| <a id="issueiid"></a>`iid` | [`ID!`](#id) | Internal ID of the issue. |
| <a id="issueiteration"></a>`iteration` | [`Iteration`](#iteration) | Iteration of the issue. |
| <a id="issuelabels"></a>`labels` | [`LabelConnection`](#labelconnection) | Labels of the issue. (see [Connections](#connections)) |
+| <a id="issuemergerequestscount"></a>`mergeRequestsCount` | [`Int!`](#int) | Number of merge requests that close the issue on merge. |
| <a id="issuemetricimages"></a>`metricImages` | [`[MetricImage!]`](#metricimage) | Metric images associated to the issue. |
| <a id="issuemilestone"></a>`milestone` | [`Milestone`](#milestone) | Milestone of the issue. |
| <a id="issuemoved"></a>`moved` | [`Boolean`](#boolean) | Indicates if issue got moved from other project. |
@@ -10451,6 +10763,7 @@ A user assigned to a merge request.
| <a id="mergerequestassigneelocation"></a>`location` | [`String`](#string) | The location of the user. |
| <a id="mergerequestassigneemergerequestinteraction"></a>`mergeRequestInteraction` | [`UserMergeRequestInteraction`](#usermergerequestinteraction) | Details of this user's interactions with the merge request. |
| <a id="mergerequestassigneename"></a>`name` | [`String!`](#string) | Human-readable name of the user. |
+| <a id="mergerequestassigneenamespace"></a>`namespace` | [`Namespace`](#namespace) | Personal namespace of the user. |
| <a id="mergerequestassigneeprojectmemberships"></a>`projectMemberships` | [`ProjectMemberConnection`](#projectmemberconnection) | Project memberships of the user. (see [Connections](#connections)) |
| <a id="mergerequestassigneepublicemail"></a>`publicEmail` | [`String`](#string) | User's public email. |
| <a id="mergerequestassigneestate"></a>`state` | [`UserState!`](#userstate) | State of the user. |
@@ -10565,7 +10878,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
| ---- | ---- | ----------- |
| <a id="mergerequestassigneesnippetsids"></a>`ids` | [`[SnippetID!]`](#snippetid) | Array of global snippet IDs. For example, `gid://gitlab/ProjectSnippet/1`. |
| <a id="mergerequestassigneesnippetstype"></a>`type` | [`TypeEnum`](#typeenum) | The type of snippet. |
-| <a id="mergerequestassigneesnippetsvisibility"></a>`visibility` | [`VisibilityScopesEnum`](#visibilityscopesenum) | The visibility of the snippet. |
+| <a id="mergerequestassigneesnippetsvisibility"></a>`visibility` | [`VisibilityScopesEnum`](#visibilityscopesenum) | Visibility of the snippet. |
##### `MergeRequestAssignee.starredProjects`
@@ -10583,6 +10896,28 @@ four standard [pagination arguments](#connection-pagination-arguments):
| ---- | ---- | ----------- |
| <a id="mergerequestassigneestarredprojectssearch"></a>`search` | [`String`](#string) | Search query. |
+##### `MergeRequestAssignee.timelogs`
+
+Time logged by the user.
+
+Returns [`TimelogConnection`](#timelogconnection).
+
+This field returns a [connection](#connections). It accepts the
+four standard [pagination arguments](#connection-pagination-arguments):
+`before: String`, `after: String`, `first: Int`, `last: Int`.
+
+###### Arguments
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="mergerequestassigneetimelogsenddate"></a>`endDate` | [`Time`](#time) | List timelogs within a date range where the logged date is equal to or before endDate. |
+| <a id="mergerequestassigneetimelogsendtime"></a>`endTime` | [`Time`](#time) | List timelogs within a time range where the logged time is equal to or before endTime. |
+| <a id="mergerequestassigneetimelogsgroupid"></a>`groupId` | [`GroupID`](#groupid) | List timelogs for a group. |
+| <a id="mergerequestassigneetimelogsprojectid"></a>`projectId` | [`ProjectID`](#projectid) | List timelogs for a project. |
+| <a id="mergerequestassigneetimelogsstartdate"></a>`startDate` | [`Time`](#time) | List timelogs within a date range where the logged date is equal to or after startDate. |
+| <a id="mergerequestassigneetimelogsstarttime"></a>`startTime` | [`Time`](#time) | List timelogs within a time range where the logged time is equal to or after startTime. |
+| <a id="mergerequestassigneetimelogsusername"></a>`username` | [`String`](#string) | List timelogs for a user. |
+
##### `MergeRequestAssignee.todos`
To-do items of the user.
@@ -10657,6 +10992,7 @@ A user assigned to a merge request as a reviewer.
| <a id="mergerequestreviewerlocation"></a>`location` | [`String`](#string) | The location of the user. |
| <a id="mergerequestreviewermergerequestinteraction"></a>`mergeRequestInteraction` | [`UserMergeRequestInteraction`](#usermergerequestinteraction) | Details of this user's interactions with the merge request. |
| <a id="mergerequestreviewername"></a>`name` | [`String!`](#string) | Human-readable name of the user. |
+| <a id="mergerequestreviewernamespace"></a>`namespace` | [`Namespace`](#namespace) | Personal namespace of the user. |
| <a id="mergerequestreviewerprojectmemberships"></a>`projectMemberships` | [`ProjectMemberConnection`](#projectmemberconnection) | Project memberships of the user. (see [Connections](#connections)) |
| <a id="mergerequestreviewerpublicemail"></a>`publicEmail` | [`String`](#string) | User's public email. |
| <a id="mergerequestreviewerstate"></a>`state` | [`UserState!`](#userstate) | State of the user. |
@@ -10771,7 +11107,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
| ---- | ---- | ----------- |
| <a id="mergerequestreviewersnippetsids"></a>`ids` | [`[SnippetID!]`](#snippetid) | Array of global snippet IDs. For example, `gid://gitlab/ProjectSnippet/1`. |
| <a id="mergerequestreviewersnippetstype"></a>`type` | [`TypeEnum`](#typeenum) | The type of snippet. |
-| <a id="mergerequestreviewersnippetsvisibility"></a>`visibility` | [`VisibilityScopesEnum`](#visibilityscopesenum) | The visibility of the snippet. |
+| <a id="mergerequestreviewersnippetsvisibility"></a>`visibility` | [`VisibilityScopesEnum`](#visibilityscopesenum) | Visibility of the snippet. |
##### `MergeRequestReviewer.starredProjects`
@@ -10789,6 +11125,28 @@ four standard [pagination arguments](#connection-pagination-arguments):
| ---- | ---- | ----------- |
| <a id="mergerequestreviewerstarredprojectssearch"></a>`search` | [`String`](#string) | Search query. |
+##### `MergeRequestReviewer.timelogs`
+
+Time logged by the user.
+
+Returns [`TimelogConnection`](#timelogconnection).
+
+This field returns a [connection](#connections). It accepts the
+four standard [pagination arguments](#connection-pagination-arguments):
+`before: String`, `after: String`, `first: Int`, `last: Int`.
+
+###### Arguments
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="mergerequestreviewertimelogsenddate"></a>`endDate` | [`Time`](#time) | List timelogs within a date range where the logged date is equal to or before endDate. |
+| <a id="mergerequestreviewertimelogsendtime"></a>`endTime` | [`Time`](#time) | List timelogs within a time range where the logged time is equal to or before endTime. |
+| <a id="mergerequestreviewertimelogsgroupid"></a>`groupId` | [`GroupID`](#groupid) | List timelogs for a group. |
+| <a id="mergerequestreviewertimelogsprojectid"></a>`projectId` | [`ProjectID`](#projectid) | List timelogs for a project. |
+| <a id="mergerequestreviewertimelogsstartdate"></a>`startDate` | [`Time`](#time) | List timelogs within a date range where the logged date is equal to or after startDate. |
+| <a id="mergerequestreviewertimelogsstarttime"></a>`startTime` | [`Time`](#time) | List timelogs within a time range where the logged time is equal to or after startTime. |
+| <a id="mergerequestreviewertimelogsusername"></a>`username` | [`String`](#string) | List timelogs for a user. |
+
##### `MergeRequestReviewer.todos`
To-do items of the user.
@@ -10932,6 +11290,7 @@ Contains statistics about a milestone.
| <a id="namespacerepositorysizeexcessprojectcount"></a>`repositorySizeExcessProjectCount` | [`Int!`](#int) | Number of projects in the root namespace where the repository size exceeds the limit. |
| <a id="namespacerequestaccessenabled"></a>`requestAccessEnabled` | [`Boolean`](#boolean) | Indicates if users can request access to namespace. |
| <a id="namespacerootstoragestatistics"></a>`rootStorageStatistics` | [`RootStorageStatistics`](#rootstoragestatistics) | Aggregated storage statistics of the namespace. Only available for root namespaces. |
+| <a id="namespacesharedrunnerssetting"></a>`sharedRunnersSetting` | [`SharedRunnersSetting`](#sharedrunnerssetting) | Shared runners availability for the namespace and its descendants. |
| <a id="namespacestoragesizelimit"></a>`storageSizeLimit` | [`Float`](#float) | Total storage limit of the root namespace in bytes. |
| <a id="namespacetemporarystorageincreaseendson"></a>`temporaryStorageIncreaseEndsOn` | [`Time`](#time) | Date until the temporary storage increase is active. |
| <a id="namespacetotalrepositorysize"></a>`totalRepositorySize` | [`Float`](#float) | Total repository size of all projects in the root namespace in bytes. |
@@ -11032,6 +11391,17 @@ Represents the network policy.
| <a id="notepermissionsrepositionnote"></a>`repositionNote` | [`Boolean!`](#boolean) | Indicates the user can perform `reposition_note` on this resource. |
| <a id="notepermissionsresolvenote"></a>`resolveNote` | [`Boolean!`](#boolean) | Indicates the user can perform `resolve_note` on this resource. |
+### `NugetDependencyLinkMetadata`
+
+Nuget dependency link metadata.
+
+#### Fields
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="nugetdependencylinkmetadataid"></a>`id` | [`PackagesNugetDependencyLinkMetadatumID!`](#packagesnugetdependencylinkmetadatumid) | ID of the metadatum. |
+| <a id="nugetdependencylinkmetadatatargetframework"></a>`targetFramework` | [`String!`](#string) | Target framework of the dependency link package. |
+
### `NugetMetadata`
Nuget metadata.
@@ -11103,6 +11473,31 @@ Represents a composer JSON file.
| <a id="packagecomposerjsontypetype"></a>`type` | [`String`](#string) | The type set in the Composer JSON file. |
| <a id="packagecomposerjsontypeversion"></a>`version` | [`String`](#string) | The version set in the Composer JSON file. |
+### `PackageDependency`
+
+Represents a package dependency.
+
+#### Fields
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="packagedependencyid"></a>`id` | [`PackagesDependencyID!`](#packagesdependencyid) | ID of the dependency. |
+| <a id="packagedependencyname"></a>`name` | [`String!`](#string) | Name of the dependency. |
+| <a id="packagedependencyversionpattern"></a>`versionPattern` | [`String!`](#string) | Version pattern of the dependency. |
+
+### `PackageDependencyLink`
+
+Represents a package dependency link.
+
+#### Fields
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="packagedependencylinkdependency"></a>`dependency` | [`PackageDependency`](#packagedependency) | Dependency. |
+| <a id="packagedependencylinkdependencytype"></a>`dependencyType` | [`PackageDependencyType!`](#packagedependencytype) | Dependency type. |
+| <a id="packagedependencylinkid"></a>`id` | [`PackagesDependencyLinkID!`](#packagesdependencylinkid) | ID of the dependency link. |
+| <a id="packagedependencylinkmetadata"></a>`metadata` | [`DependencyLinkMetadata`](#dependencylinkmetadata) | Dependency link metadata. |
+
### `PackageDetailsType`
Represents a package details in the Package Registry. Note that this type is in beta and susceptible to changes.
@@ -11112,6 +11507,7 @@ Represents a package details in the Package Registry. Note that this type is in
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="packagedetailstypecreatedat"></a>`createdAt` | [`Time!`](#time) | Date of creation. |
+| <a id="packagedetailstypedependencylinks"></a>`dependencyLinks` | [`PackageDependencyLinkConnection`](#packagedependencylinkconnection) | Dependency link. (see [Connections](#connections)) |
| <a id="packagedetailstypeid"></a>`id` | [`PackagesPackageID!`](#packagespackageid) | ID of the package. |
| <a id="packagedetailstypemetadata"></a>`metadata` | [`PackageMetadata`](#packagemetadata) | Package metadata. |
| <a id="packagedetailstypename"></a>`name` | [`String!`](#string) | Name of the package. |
@@ -11371,6 +11767,7 @@ Represents vulnerability finding of a security report on the pipeline.
| ---- | ---- | ----------- |
| <a id="pipelinesecurityreportfindingconfidence"></a>`confidence` | [`String`](#string) | Type of the security report that found the vulnerability. |
| <a id="pipelinesecurityreportfindingdescription"></a>`description` | [`String`](#string) | Description of the vulnerability finding. |
+| <a id="pipelinesecurityreportfindingfalsepositive"></a>`falsePositive` | [`Boolean`](#boolean) | Indicates whether the vulnerability is a false positive. Available only when feature flag `vulnerability_flags` is enabled. This flag is disabled by default, because the feature is experimental and is subject to change without notice. |
| <a id="pipelinesecurityreportfindingidentifiers"></a>`identifiers` | [`[VulnerabilityIdentifier!]!`](#vulnerabilityidentifier) | Identifiers of the vulnerabilit finding. |
| <a id="pipelinesecurityreportfindinglocation"></a>`location` | [`VulnerabilityLocation`](#vulnerabilitylocation) | Location metadata for the vulnerability. Its fields depend on the type of security scan that found the vulnerability. |
| <a id="pipelinesecurityreportfindingname"></a>`name` | [`String`](#string) | Name of the vulnerability finding. |
@@ -11574,7 +11971,7 @@ Returns [`Board`](#board).
| Name | Type | Description |
| ---- | ---- | ----------- |
-| <a id="projectboardid"></a>`id` | [`BoardID!`](#boardid) | The board's ID. |
+| <a id="projectboardid"></a>`id` | [`BoardID!`](#boardid) | ID of the board. |
##### `Project.boards`
@@ -11633,6 +12030,18 @@ four standard [pagination arguments](#connection-pagination-arguments):
| <a id="projectcontainerrepositoriesname"></a>`name` | [`String`](#string) | Filter the container repositories by their name. |
| <a id="projectcontainerrepositoriessort"></a>`sort` | [`ContainerRepositorySort`](#containerrepositorysort) | Sort container repositories by this criteria. |
+##### `Project.dastProfile`
+
+DAST Profile associated with the project.
+
+Returns [`DastProfile`](#dastprofile).
+
+###### Arguments
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="projectdastprofileid"></a>`id` | [`DastProfileID!`](#dastprofileid) | ID of the DAST Profile. |
+
##### `Project.dastSiteProfile`
DAST Site Profile associated with the project.
@@ -11746,6 +12155,7 @@ Returns [`Issue`](#issue).
| <a id="projectissueiterationwildcardid"></a>`iterationWildcardId` | [`IterationWildcardId`](#iterationwildcardid) | Filter by iteration ID wildcard. |
| <a id="projectissuelabelname"></a>`labelName` | [`[String]`](#string) | Labels applied to this issue. |
| <a id="projectissuemilestonetitle"></a>`milestoneTitle` | [`[String]`](#string) | Milestone applied to this issue. |
+| <a id="projectissuemilestonewildcardid"></a>`milestoneWildcardId` | [`MilestoneWildcardId`](#milestonewildcardid) | Filter issues by milestone ID wildcard. |
| <a id="projectissuenot"></a>`not` | [`NegatedIssueFilterInput`](#negatedissuefilterinput) | Negated arguments. |
| <a id="projectissuesearch"></a>`search` | [`String`](#string) | Search query for issue title or description. |
| <a id="projectissuesort"></a>`sort` | [`IssueSort`](#issuesort) | Sort issues by this criteria. |
@@ -11777,6 +12187,7 @@ Returns [`IssueStatusCountsType`](#issuestatuscountstype).
| <a id="projectissuestatuscountsiids"></a>`iids` | [`[String!]`](#string) | List of IIDs of issues. For example, `["1", "2"]`. |
| <a id="projectissuestatuscountslabelname"></a>`labelName` | [`[String]`](#string) | Labels applied to this issue. |
| <a id="projectissuestatuscountsmilestonetitle"></a>`milestoneTitle` | [`[String]`](#string) | Milestone applied to this issue. |
+| <a id="projectissuestatuscountsmilestonewildcardid"></a>`milestoneWildcardId` | [`MilestoneWildcardId`](#milestonewildcardid) | Filter issues by milestone ID wildcard. |
| <a id="projectissuestatuscountsnot"></a>`not` | [`NegatedIssueFilterInput`](#negatedissuefilterinput) | Negated arguments. |
| <a id="projectissuestatuscountssearch"></a>`search` | [`String`](#string) | Search query for issue title or description. |
| <a id="projectissuestatuscountstypes"></a>`types` | [`[IssueType!]`](#issuetype) | Filter issues by the given issue types. |
@@ -11812,6 +12223,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
| <a id="projectissuesiterationwildcardid"></a>`iterationWildcardId` | [`IterationWildcardId`](#iterationwildcardid) | Filter by iteration ID wildcard. |
| <a id="projectissueslabelname"></a>`labelName` | [`[String]`](#string) | Labels applied to this issue. |
| <a id="projectissuesmilestonetitle"></a>`milestoneTitle` | [`[String]`](#string) | Milestone applied to this issue. |
+| <a id="projectissuesmilestonewildcardid"></a>`milestoneWildcardId` | [`MilestoneWildcardId`](#milestonewildcardid) | Filter issues by milestone ID wildcard. |
| <a id="projectissuesnot"></a>`not` | [`NegatedIssueFilterInput`](#negatedissuefilterinput) | Negated arguments. |
| <a id="projectissuessearch"></a>`search` | [`String`](#string) | Search query for issue title or description. |
| <a id="projectissuessort"></a>`sort` | [`IssueSort`](#issuesort) | Sort issues by this criteria. |
@@ -12172,7 +12584,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="projectsnippetsids"></a>`ids` | [`[SnippetID!]`](#snippetid) | Array of global snippet IDs. For example, `gid://gitlab/ProjectSnippet/1`. |
-| <a id="projectsnippetsvisibility"></a>`visibility` | [`VisibilityScopesEnum`](#visibilityscopesenum) | The visibility of the snippet. |
+| <a id="projectsnippetsvisibility"></a>`visibility` | [`VisibilityScopesEnum`](#visibilityscopesenum) | Visibility of the snippet. |
##### `Project.terraformState`
@@ -12186,6 +12598,28 @@ Returns [`TerraformState`](#terraformstate).
| ---- | ---- | ----------- |
| <a id="projectterraformstatename"></a>`name` | [`String!`](#string) | Name of the Terraform state. |
+##### `Project.timelogs`
+
+Time logged on issues and merge requests in the project.
+
+Returns [`TimelogConnection`](#timelogconnection).
+
+This field returns a [connection](#connections). It accepts the
+four standard [pagination arguments](#connection-pagination-arguments):
+`before: String`, `after: String`, `first: Int`, `last: Int`.
+
+###### Arguments
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="projecttimelogsenddate"></a>`endDate` | [`Time`](#time) | List timelogs within a date range where the logged date is equal to or before endDate. |
+| <a id="projecttimelogsendtime"></a>`endTime` | [`Time`](#time) | List timelogs within a time range where the logged time is equal to or before endTime. |
+| <a id="projecttimelogsgroupid"></a>`groupId` | [`GroupID`](#groupid) | List timelogs for a group. |
+| <a id="projecttimelogsprojectid"></a>`projectId` | [`ProjectID`](#projectid) | List timelogs for a project. |
+| <a id="projecttimelogsstartdate"></a>`startDate` | [`Time`](#time) | List timelogs within a date range where the logged date is equal to or after startDate. |
+| <a id="projecttimelogsstarttime"></a>`startTime` | [`Time`](#time) | List timelogs within a time range where the logged time is equal to or after startTime. |
+| <a id="projecttimelogsusername"></a>`username` | [`String`](#string) | List timelogs for a user. |
+
##### `Project.vulnerabilities`
Vulnerabilities reported on the project.
@@ -12212,7 +12646,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
##### `Project.vulnerabilitiesCountByDay`
-Number of vulnerabilities per day for the project.
+The historical number of vulnerabilities per day for the project.
Returns [`VulnerabilitiesCountByDayConnection`](#vulnerabilitiescountbydayconnection).
@@ -12511,7 +12945,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="repositoryblobspaths"></a>`paths` | [`[String!]!`](#string) | Array of desired blob paths. |
-| <a id="repositoryblobsref"></a>`ref` | [`String`](#string) | The commit ref to get the blobs from. Default value is HEAD. |
+| <a id="repositoryblobsref"></a>`ref` | [`String`](#string) | Commit ref to get the blobs from. Default value is HEAD. |
##### `Repository.branchNames`
@@ -12527,6 +12961,24 @@ Returns [`[String!]`](#string).
| <a id="repositorybranchnamesoffset"></a>`offset` | [`Int!`](#int) | The number of branch names to skip. |
| <a id="repositorybranchnamessearchpattern"></a>`searchPattern` | [`String!`](#string) | The pattern to search for branch names by. |
+##### `Repository.paginatedTree`
+
+Paginated tree of the repository. Available only when feature flag `paginated_tree_graphql_query` is enabled. This flag is disabled by default, because the feature is experimental and is subject to change without notice.
+
+Returns [`TreeConnection`](#treeconnection).
+
+This field returns a [connection](#connections). It accepts the
+four standard [pagination arguments](#connection-pagination-arguments):
+`before: String`, `after: String`, `first: Int`, `last: Int`.
+
+###### Arguments
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="repositorypaginatedtreepath"></a>`path` | [`String`](#string) | The path to get the tree for. Default value is the root of the repository. |
+| <a id="repositorypaginatedtreerecursive"></a>`recursive` | [`Boolean`](#boolean) | Used to get a recursive tree. Default is false. |
+| <a id="repositorypaginatedtreeref"></a>`ref` | [`String`](#string) | The commit ref to get the tree for. Default value is HEAD. |
+
##### `Repository.tree`
Tree of the repository.
@@ -13322,6 +13774,7 @@ Represents a historically accurate report about the timebox.
| <a id="timelogmergerequest"></a>`mergeRequest` | [`MergeRequest`](#mergerequest) | The merge request that logged time was added to. |
| <a id="timelognote"></a>`note` | [`Note`](#note) | The note where the quick action to add the logged time was executed. |
| <a id="timelogspentat"></a>`spentAt` | [`Time`](#time) | Timestamp of when the time tracked was spent at. |
+| <a id="timelogsummary"></a>`summary` | [`String`](#string) | The summary of how the time was spent. |
| <a id="timelogtimespent"></a>`timeSpent` | [`Int!`](#int) | The time spent displayed in seconds. |
| <a id="timeloguser"></a>`user` | [`UserCore!`](#usercore) | The user that logged the time. |
@@ -13409,6 +13862,7 @@ Core represention of a GitLab user.
| <a id="usercoreid"></a>`id` | [`ID!`](#id) | ID of the user. |
| <a id="usercorelocation"></a>`location` | [`String`](#string) | The location of the user. |
| <a id="usercorename"></a>`name` | [`String!`](#string) | Human-readable name of the user. |
+| <a id="usercorenamespace"></a>`namespace` | [`Namespace`](#namespace) | Personal namespace of the user. |
| <a id="usercoreprojectmemberships"></a>`projectMemberships` | [`ProjectMemberConnection`](#projectmemberconnection) | Project memberships of the user. (see [Connections](#connections)) |
| <a id="usercorepublicemail"></a>`publicEmail` | [`String`](#string) | User's public email. |
| <a id="usercorestate"></a>`state` | [`UserState!`](#userstate) | State of the user. |
@@ -13523,7 +13977,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
| ---- | ---- | ----------- |
| <a id="usercoresnippetsids"></a>`ids` | [`[SnippetID!]`](#snippetid) | Array of global snippet IDs. For example, `gid://gitlab/ProjectSnippet/1`. |
| <a id="usercoresnippetstype"></a>`type` | [`TypeEnum`](#typeenum) | The type of snippet. |
-| <a id="usercoresnippetsvisibility"></a>`visibility` | [`VisibilityScopesEnum`](#visibilityscopesenum) | The visibility of the snippet. |
+| <a id="usercoresnippetsvisibility"></a>`visibility` | [`VisibilityScopesEnum`](#visibilityscopesenum) | Visibility of the snippet. |
##### `UserCore.starredProjects`
@@ -13541,6 +13995,28 @@ four standard [pagination arguments](#connection-pagination-arguments):
| ---- | ---- | ----------- |
| <a id="usercorestarredprojectssearch"></a>`search` | [`String`](#string) | Search query. |
+##### `UserCore.timelogs`
+
+Time logged by the user.
+
+Returns [`TimelogConnection`](#timelogconnection).
+
+This field returns a [connection](#connections). It accepts the
+four standard [pagination arguments](#connection-pagination-arguments):
+`before: String`, `after: String`, `first: Int`, `last: Int`.
+
+###### Arguments
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="usercoretimelogsenddate"></a>`endDate` | [`Time`](#time) | List timelogs within a date range where the logged date is equal to or before endDate. |
+| <a id="usercoretimelogsendtime"></a>`endTime` | [`Time`](#time) | List timelogs within a time range where the logged time is equal to or before endTime. |
+| <a id="usercoretimelogsgroupid"></a>`groupId` | [`GroupID`](#groupid) | List timelogs for a group. |
+| <a id="usercoretimelogsprojectid"></a>`projectId` | [`ProjectID`](#projectid) | List timelogs for a project. |
+| <a id="usercoretimelogsstartdate"></a>`startDate` | [`Time`](#time) | List timelogs within a date range where the logged date is equal to or after startDate. |
+| <a id="usercoretimelogsstarttime"></a>`startTime` | [`Time`](#time) | List timelogs within a time range where the logged time is equal to or after startTime. |
+| <a id="usercoretimelogsusername"></a>`username` | [`String`](#string) | List timelogs for a user. |
+
##### `UserCore.todos`
To-do items of the user.
@@ -13633,6 +14109,7 @@ Represents a vulnerability.
| <a id="vulnerabilitydismissedat"></a>`dismissedAt` | [`Time`](#time) | Timestamp of when the vulnerability state was changed to dismissed. |
| <a id="vulnerabilitydismissedby"></a>`dismissedBy` | [`UserCore`](#usercore) | The user that dismissed the vulnerability. |
| <a id="vulnerabilityexternalissuelinks"></a>`externalIssueLinks` | [`VulnerabilityExternalIssueLinkConnection!`](#vulnerabilityexternalissuelinkconnection) | List of external issue links related to the vulnerability. (see [Connections](#connections)) |
+| <a id="vulnerabilityfalsepositive"></a>`falsePositive` | [`Boolean`](#boolean) | Indicates whether the vulnerability is a false positive. Available only when feature flag `vulnerability_flags` is enabled. This flag is disabled by default, because the feature is experimental and is subject to change without notice. |
| <a id="vulnerabilityhassolutions"></a>`hasSolutions` | [`Boolean`](#boolean) | Indicates whether there is a solution available for this vulnerability. |
| <a id="vulnerabilityid"></a>`id` | [`ID!`](#id) | GraphQL ID of the vulnerability. |
| <a id="vulnerabilityidentifiers"></a>`identifiers` | [`[VulnerabilityIdentifier!]!`](#vulnerabilityidentifier) | Identifiers of the vulnerability. |
@@ -14162,8 +14639,8 @@ Alert status values.
| Value | Description |
| ----- | ----------- |
| <a id="alertmanagementstatusacknowledged"></a>`ACKNOWLEDGED` | Someone is actively investigating the problem. |
-| <a id="alertmanagementstatusignored"></a>`IGNORED` | No action will be taken on the alert. |
-| <a id="alertmanagementstatusresolved"></a>`RESOLVED` | No further work is required. |
+| <a id="alertmanagementstatusignored"></a>`IGNORED` | No action will be taken. |
+| <a id="alertmanagementstatusresolved"></a>`RESOLVED` | The problem has been addressed. |
| <a id="alertmanagementstatustriggered"></a>`TRIGGERED` | Investigation has not started. |
### `ApiFuzzingScanMode`
@@ -14403,6 +14880,7 @@ Status of a container repository.
| Value | Description |
| ----- | ----------- |
| <a id="dastsitevalidationstrategyenumheader"></a>`HEADER` | Header validation. |
+| <a id="dastsitevalidationstrategyenummeta_tag"></a>`META_TAG` | Meta tag validation. |
| <a id="dastsitevalidationstrategyenumtext_file"></a>`TEXT_FILE` | Text file validation. |
### `DastTargetTypeEnum`
@@ -14811,6 +15289,8 @@ Values for sorting merge requests.
| Value | Description |
| ----- | ----------- |
+| <a id="mergerequestsortclosed_at_asc"></a>`CLOSED_AT_ASC` | Closed time by ascending order. |
+| <a id="mergerequestsortclosed_at_desc"></a>`CLOSED_AT_DESC` | Closed time by descending order. |
| <a id="mergerequestsortcreated_asc"></a>`CREATED_ASC` | Created at ascending order. |
| <a id="mergerequestsortcreated_desc"></a>`CREATED_DESC` | Created at descending order. |
| <a id="mergerequestsortlabel_priority_asc"></a>`LABEL_PRIORITY_ASC` | Label priority by ascending order. |
@@ -14888,6 +15368,17 @@ Current state of milestone.
| <a id="milestonestateenumactive"></a>`active` | Milestone is currently active. |
| <a id="milestonestateenumclosed"></a>`closed` | Milestone is closed. |
+### `MilestoneWildcardId`
+
+Milestone ID wildcard values.
+
+| Value | Description |
+| ----- | ----------- |
+| <a id="milestonewildcardidany"></a>`ANY` | A milestone is assigned. |
+| <a id="milestonewildcardidnone"></a>`NONE` | No milestone is assigned. |
+| <a id="milestonewildcardidstarted"></a>`STARTED` | An open, started milestone (start date <= today). |
+| <a id="milestonewildcardidupcoming"></a>`UPCOMING` | An open milestone due in the future (due date >= today). |
+
### `MoveType`
The position to which the adjacent object should be moved.
@@ -14924,6 +15415,15 @@ Negated Iteration ID wildcard values.
| ----- | ----------- |
| <a id="negatediterationwildcardidcurrent"></a>`CURRENT` | Current iteration. |
+### `NegatedMilestoneWildcardId`
+
+Negated Milestone ID wildcard values.
+
+| Value | Description |
+| ----- | ----------- |
+| <a id="negatedmilestonewildcardidstarted"></a>`STARTED` | An open, started milestone (start date <= today). |
+| <a id="negatedmilestonewildcardidupcoming"></a>`UPCOMING` | An open milestone due in the future (due date >= today). |
+
### `NetworkPolicyKind`
Kind of the network policy.
@@ -14943,6 +15443,15 @@ Rotation length unit of an on-call rotation.
| <a id="oncallrotationunitenumhours"></a>`HOURS` | Hours. |
| <a id="oncallrotationunitenumweeks"></a>`WEEKS` | Weeks. |
+### `PackageDependencyType`
+
+| Value | Description |
+| ----- | ----------- |
+| <a id="packagedependencytypebundle_dependencies"></a>`BUNDLE_DEPENDENCIES` | bundleDependencies dependency type. |
+| <a id="packagedependencytypedependencies"></a>`DEPENDENCIES` | dependencies dependency type. |
+| <a id="packagedependencytypedev_dependencies"></a>`DEV_DEPENDENCIES` | devDependencies dependency type. |
+| <a id="packagedependencytypepeer_dependencies"></a>`PEER_DEPENDENCIES` | peerDependencies dependency type. |
+
### `PackageGroupSort`
Values for sorting group packages.
@@ -15183,6 +15692,14 @@ State of a Sentry error.
| <a id="servicetypewebex_teams_service"></a>`WEBEX_TEAMS_SERVICE` | WebexTeamsService type. |
| <a id="servicetypeyoutrack_service"></a>`YOUTRACK_SERVICE` | YoutrackService type. |
+### `SharedRunnersSetting`
+
+| Value | Description |
+| ----- | ----------- |
+| <a id="sharedrunnerssettingdisabled_and_unoverridable"></a>`DISABLED_AND_UNOVERRIDABLE` | Sharing of runners is disabled and unoverridable. |
+| <a id="sharedrunnerssettingdisabled_with_override"></a>`DISABLED_WITH_OVERRIDE` | Sharing of runners is disabled with override. |
+| <a id="sharedrunnerssettingenabled"></a>`ENABLED` | Sharing of runners is enabled. |
+
### `SnippetBlobActionEnum`
Type of a snippet blob input action.
@@ -15290,13 +15807,14 @@ Name of the feature that the callout is for.
| <a id="usercalloutfeaturenameenumpersonal_access_token_expiry"></a>`PERSONAL_ACCESS_TOKEN_EXPIRY` | Callout feature name for personal_access_token_expiry. |
| <a id="usercalloutfeaturenameenumpipeline_needs_banner"></a>`PIPELINE_NEEDS_BANNER` | Callout feature name for pipeline_needs_banner. |
| <a id="usercalloutfeaturenameenumpipeline_needs_hover_tip"></a>`PIPELINE_NEEDS_HOVER_TIP` | Callout feature name for pipeline_needs_hover_tip. |
+| <a id="usercalloutfeaturenameenumprofile_personal_access_token_expiry"></a>`PROFILE_PERSONAL_ACCESS_TOKEN_EXPIRY` | Callout feature name for profile_personal_access_token_expiry. |
| <a id="usercalloutfeaturenameenumregistration_enabled_callout"></a>`REGISTRATION_ENABLED_CALLOUT` | Callout feature name for registration_enabled_callout. |
| <a id="usercalloutfeaturenameenumsecurity_configuration_devops_alert"></a>`SECURITY_CONFIGURATION_DEVOPS_ALERT` | Callout feature name for security_configuration_devops_alert. |
| <a id="usercalloutfeaturenameenumsecurity_configuration_upgrade_banner"></a>`SECURITY_CONFIGURATION_UPGRADE_BANNER` | Callout feature name for security_configuration_upgrade_banner. |
-| <a id="usercalloutfeaturenameenumservice_templates_deprecated_callout"></a>`SERVICE_TEMPLATES_DEPRECATED_CALLOUT` | Callout feature name for service_templates_deprecated_callout. |
| <a id="usercalloutfeaturenameenumsuggest_pipeline"></a>`SUGGEST_PIPELINE` | Callout feature name for suggest_pipeline. |
| <a id="usercalloutfeaturenameenumsuggest_popover_dismissed"></a>`SUGGEST_POPOVER_DISMISSED` | Callout feature name for suggest_popover_dismissed. |
| <a id="usercalloutfeaturenameenumtabs_position_highlight"></a>`TABS_POSITION_HIGHLIGHT` | Callout feature name for tabs_position_highlight. |
+| <a id="usercalloutfeaturenameenumterraform_notification_dismissed"></a>`TERRAFORM_NOTIFICATION_DISMISSED` | Callout feature name for terraform_notification_dismissed. |
| <a id="usercalloutfeaturenameenumthreat_monitoring_info"></a>`THREAT_MONITORING_INFO` | Callout feature name for threat_monitoring_info. |
| <a id="usercalloutfeaturenameenumtrial_status_reminder_d14"></a>`TRIAL_STATUS_REMINDER_D14` | Callout feature name for trial_status_reminder_d14. |
| <a id="usercalloutfeaturenameenumtrial_status_reminder_d3"></a>`TRIAL_STATUS_REMINDER_D3` | Callout feature name for trial_status_reminder_d3. |
@@ -15422,8 +15940,8 @@ Vulnerability sort values.
| <a id="vulnerabilitysortseverity_desc"></a>`severity_desc` | Severity in descending order. |
| <a id="vulnerabilitysortstate_asc"></a>`state_asc` | State in ascending order. |
| <a id="vulnerabilitysortstate_desc"></a>`state_desc` | State in descending order. |
-| <a id="vulnerabilitysorttitle_asc"></a>`title_asc` | Title in ascending order. |
-| <a id="vulnerabilitysorttitle_desc"></a>`title_desc` | Title in descending order. |
+| <a id="vulnerabilitysorttitle_asc"></a>`title_asc` **{warning-solid}** | **Deprecated** in 14.2. Deprecated due to performance issues. |
+| <a id="vulnerabilitysorttitle_desc"></a>`title_desc` **{warning-solid}** | **Deprecated** in 14.2. Deprecated due to performance issues. |
### `VulnerabilityState`
@@ -15809,12 +16327,30 @@ A `PackagesConanMetadatumID` is a global ID. It is encoded as a string.
An example `PackagesConanMetadatumID` is: `"gid://gitlab/Packages::Conan::Metadatum/1"`.
+### `PackagesDependencyID`
+
+A `PackagesDependencyID` is a global ID. It is encoded as a string.
+
+An example `PackagesDependencyID` is: `"gid://gitlab/Packages::Dependency/1"`.
+
+### `PackagesDependencyLinkID`
+
+A `PackagesDependencyLinkID` is a global ID. It is encoded as a string.
+
+An example `PackagesDependencyLinkID` is: `"gid://gitlab/Packages::DependencyLink/1"`.
+
### `PackagesMavenMetadatumID`
A `PackagesMavenMetadatumID` is a global ID. It is encoded as a string.
An example `PackagesMavenMetadatumID` is: `"gid://gitlab/Packages::Maven::Metadatum/1"`.
+### `PackagesNugetDependencyLinkMetadatumID`
+
+A `PackagesNugetDependencyLinkMetadatumID` is a global ID. It is encoded as a string.
+
+An example `PackagesNugetDependencyLinkMetadatumID` is: `"gid://gitlab/Packages::Nuget::DependencyLinkMetadatum/1"`.
+
### `PackagesNugetMetadatumID`
A `PackagesNugetMetadatumID` is a global ID. It is encoded as a string.
@@ -15944,6 +16480,14 @@ abstract types.
### Unions
+#### `DependencyLinkMetadata`
+
+Represents metadata associated with a dependency link.
+
+One of:
+
+- [`NugetDependencyLinkMetadata`](#nugetdependencylinkmetadata)
+
#### `Issuable`
Represents an issuable.
@@ -16234,6 +16778,7 @@ Implementations:
| <a id="userid"></a>`id` | [`ID!`](#id) | ID of the user. |
| <a id="userlocation"></a>`location` | [`String`](#string) | The location of the user. |
| <a id="username"></a>`name` | [`String!`](#string) | Human-readable name of the user. |
+| <a id="usernamespace"></a>`namespace` | [`Namespace`](#namespace) | Personal namespace of the user. |
| <a id="userprojectmemberships"></a>`projectMemberships` | [`ProjectMemberConnection`](#projectmemberconnection) | Project memberships of the user. (see [Connections](#connections)) |
| <a id="userpublicemail"></a>`publicEmail` | [`String`](#string) | User's public email. |
| <a id="userstate"></a>`state` | [`UserState!`](#userstate) | State of the user. |
@@ -16348,7 +16893,7 @@ four standard [pagination arguments](#connection-pagination-arguments):
| ---- | ---- | ----------- |
| <a id="usersnippetsids"></a>`ids` | [`[SnippetID!]`](#snippetid) | Array of global snippet IDs. For example, `gid://gitlab/ProjectSnippet/1`. |
| <a id="usersnippetstype"></a>`type` | [`TypeEnum`](#typeenum) | The type of snippet. |
-| <a id="usersnippetsvisibility"></a>`visibility` | [`VisibilityScopesEnum`](#visibilityscopesenum) | The visibility of the snippet. |
+| <a id="usersnippetsvisibility"></a>`visibility` | [`VisibilityScopesEnum`](#visibilityscopesenum) | Visibility of the snippet. |
###### `User.starredProjects`
@@ -16366,6 +16911,28 @@ four standard [pagination arguments](#connection-pagination-arguments):
| ---- | ---- | ----------- |
| <a id="userstarredprojectssearch"></a>`search` | [`String`](#string) | Search query. |
+###### `User.timelogs`
+
+Time logged by the user.
+
+Returns [`TimelogConnection`](#timelogconnection).
+
+This field returns a [connection](#connections). It accepts the
+four standard [pagination arguments](#connection-pagination-arguments):
+`before: String`, `after: String`, `first: Int`, `last: Int`.
+
+####### Arguments
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| <a id="usertimelogsenddate"></a>`endDate` | [`Time`](#time) | List timelogs within a date range where the logged date is equal to or before endDate. |
+| <a id="usertimelogsendtime"></a>`endTime` | [`Time`](#time) | List timelogs within a time range where the logged time is equal to or before endTime. |
+| <a id="usertimelogsgroupid"></a>`groupId` | [`GroupID`](#groupid) | List timelogs for a group. |
+| <a id="usertimelogsprojectid"></a>`projectId` | [`ProjectID`](#projectid) | List timelogs for a project. |
+| <a id="usertimelogsstartdate"></a>`startDate` | [`Time`](#time) | List timelogs within a date range where the logged date is equal to or after startDate. |
+| <a id="usertimelogsstarttime"></a>`startTime` | [`Time`](#time) | List timelogs within a time range where the logged time is equal to or after startTime. |
+| <a id="usertimelogsusername"></a>`username` | [`String`](#string) | List timelogs for a user. |
+
###### `User.todos`
To-do items of the user.
@@ -16429,6 +16996,7 @@ Field that are available while modifying the custom mapping attributes for an HT
| <a id="boardissueinputnot"></a>`not` | [`NegatedBoardIssueInput`](#negatedboardissueinput) | List of negated arguments. |
| <a id="boardissueinputreleasetag"></a>`releaseTag` | [`String`](#string) | Filter by release tag. |
| <a id="boardissueinputsearch"></a>`search` | [`String`](#string) | Search query for issue title or description. |
+| <a id="boardissueinputtypes"></a>`types` | [`[IssueType!]`](#issuetype) | Filter by the given issue types. |
| <a id="boardissueinputweight"></a>`weight` | [`String`](#string) | Filter by weight. |
| <a id="boardissueinputweightwildcardid"></a>`weightWildcardId` | [`WeightWildcardId`](#weightwildcardid) | Filter by weight ID wildcard. Incompatible with weight. |
@@ -16543,8 +17111,9 @@ Represents an escalation rule.
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="escalationruleinputelapsedtimeseconds"></a>`elapsedTimeSeconds` | [`Int!`](#int) | The time in seconds before the rule is activated. |
-| <a id="escalationruleinputoncallscheduleiid"></a>`oncallScheduleIid` | [`ID!`](#id) | The on-call schedule to notify. |
+| <a id="escalationruleinputoncallscheduleiid"></a>`oncallScheduleIid` | [`ID`](#id) | The on-call schedule to notify. |
| <a id="escalationruleinputstatus"></a>`status` | [`EscalationRuleStatus!`](#escalationrulestatus) | The status required to prevent the rule from activating. |
+| <a id="escalationruleinputusername"></a>`username` | [`String`](#string) | The username of the user to notify. |
### `JiraUsersMappingInputType`
@@ -16581,6 +17150,7 @@ Represents an escalation rule.
| <a id="negatedboardissueinputmilestonetitle"></a>`milestoneTitle` | [`String`](#string) | Filter by milestone title. |
| <a id="negatedboardissueinputmyreactionemoji"></a>`myReactionEmoji` | [`String`](#string) | Filter by reaction emoji applied by the current user. |
| <a id="negatedboardissueinputreleasetag"></a>`releaseTag` | [`String`](#string) | Filter by release tag. |
+| <a id="negatedboardissueinputtypes"></a>`types` | [`[IssueType!]`](#issuetype) | Filter by the given issue types. |
| <a id="negatedboardissueinputweight"></a>`weight` | [`String`](#string) | Filter by weight. |
### `NegatedEpicBoardIssueInput`
@@ -16617,6 +17187,7 @@ Represents an escalation rule.
| <a id="negatedissuefilterinputiterationwildcardid"></a>`iterationWildcardId` | [`IterationWildcardId`](#iterationwildcardid) | Filter by negated iteration ID wildcard. |
| <a id="negatedissuefilterinputlabelname"></a>`labelName` | [`[String!]`](#string) | Labels not applied to this issue. |
| <a id="negatedissuefilterinputmilestonetitle"></a>`milestoneTitle` | [`[String!]`](#string) | Milestone not applied to this issue. |
+| <a id="negatedissuefilterinputmilestonewildcardid"></a>`milestoneWildcardId` | [`NegatedMilestoneWildcardId`](#negatedmilestonewildcardid) | Filter by negated milestone wildcard values. |
| <a id="negatedissuefilterinputweight"></a>`weight` | [`String`](#string) | Weight not applied to the issue. |
### `OncallRotationActivePeriodInputType`
diff --git a/doc/api/graphql/removed_items.md b/doc/api/graphql/removed_items.md
index d8fc6cb35f8..1c425d5f1d5 100644
--- a/doc/api/graphql/removed_items.md
+++ b/doc/api/graphql/removed_items.md
@@ -41,8 +41,8 @@ Fields removed in [GitLab 14.0](https://gitlab.com/gitlab-org/gitlab/-/merge_req
Fields removed in [GitLab 13.6](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/44866):
| Field name | GraphQL type | Deprecated in | Use instead |
-| -------------------- | -------------------- | ------------- | -------------------------- |
-| `date` | `Timelog` **(STARTER)** | 12.10 | `spentAt` |
+|----------------------|--------------------------|---------------|----------------------------|
+| `date` | `Timelog` | 12.10 | `spentAt` |
| `designs` | `Issue`, `EpicIssue` | 12.2 | `designCollection` |
| `latestPipeline` | `Commit` | 12.5 | `pipelines` |
| `mergeCommitMessage` | `MergeRequest` | 11.8 | `latestMergeCommitMessage` |
diff --git a/doc/api/graphql/users_example.md b/doc/api/graphql/users_example.md
index 1222cd8ee8e..8fbfb67d166 100644
--- a/doc/api/graphql/users_example.md
+++ b/doc/api/graphql/users_example.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/api/group_milestones.md b/doc/api/group_milestones.md
index a21af94da40..d7de3272005 100644
--- a/doc/api/group_milestones.md
+++ b/doc/api/group_milestones.md
@@ -89,8 +89,8 @@ Parameters:
| `id` | integer/string | yes | The ID or [URL-encoded path of the group](index.md#namespaced-path-encoding) owned by the authenticated user |
| `title` | string | yes | The title of a milestone |
| `description` | string | no | The description of the milestone |
-| `due_date` | date | no | The due date of the milestone, in YYYY-MM-DD format (ISO 8601) |
-| `start_date` | date | no | The start date of the milestone, in YYYY-MM-DD format (ISO 8601) |
+| `due_date` | date | no | The due date of the milestone, in ISO 8601 format (`YYYY-MM-DD`) |
+| `start_date` | date | no | The start date of the milestone, in ISO 8601 format (`YYYY-MM-DD`) |
## Edit milestone
@@ -108,8 +108,8 @@ Parameters:
| `milestone_id` | integer | yes | The ID of a group milestone |
| `title` | string | no | The title of a milestone |
| `description` | string | no | The description of a milestone |
-| `due_date` | date | no | The due date of the milestone, in YYYY-MM-DD format (ISO 8601) |
-| `start_date` | date | no | The start date of the milestone, in YYYY-MM-DD format (ISO 8601) |
+| `due_date` | date | no | The due date of the milestone, in ISO 8601 format (`YYYY-MM-DD`) |
+| `start_date` | date | no | The start date of the milestone, in ISO 8601 format (`YYYY-MM-DD`) |
| `state_event` | string | no | The state event of the milestone _(`close` or `activate`)_ |
## Delete group milestone
diff --git a/doc/api/group_protected_environments.md b/doc/api/group_protected_environments.md
index ce5803fed3c..ddd9ca891d8 100644
--- a/doc/api/group_protected_environments.md
+++ b/doc/api/group_protected_environments.md
@@ -14,7 +14,7 @@ type: concepts, howto
> - To use in GitLab self-managed instances, ask a GitLab administrator to [enable it](../ci/environments/protected_environments.md#enable-or-disable-group-level-protected-environments). **(FREE SELF)**
This in-development feature might not be available for your use. There can be
-[risks when enabling features still in development](../user/feature_flags.md#risks-when-enabling-features-still-in-development).
+[risks when enabling features still in development](../administration/feature_flags.md#risks-when-enabling-features-still-in-development).
Refer to this feature's version history for more details.
Read more about [group-level protected environments](../ci/environments/protected_environments.md#group-level-protected-environments),
diff --git a/doc/api/group_repository_storage_moves.md b/doc/api/group_repository_storage_moves.md
index 53afe8d5ef3..a893bffb1f5 100644
--- a/doc/api/group_repository_storage_moves.md
+++ b/doc/api/group_repository_storage_moves.md
@@ -9,31 +9,35 @@ type: reference
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/53016) in GitLab 13.9.
-Group repositories can be moved between storages. This can be useful when
-[migrating to Gitaly Cluster](../administration/gitaly/praefect.md#migrate-to-gitaly-cluster), for
-example, or to migrate a Group Wiki.
+Group repositories can be moved between storages. This API can help you when
+[migrating to Gitaly Cluster](../administration/gitaly/index.md#migrate-to-gitaly-cluster), for
+example, or to migrate a [group wiki](../user/project/wiki/index.md#group-wikis).
As group repository storage moves are processed, they transition through different states. Values
of `state` are:
-- `initial`: The record has been created but the background job has not yet been scheduled.
+- `initial`: The record has been created, but the background job has not yet been scheduled.
- `scheduled`: The background job has been scheduled.
- `started`: The group repositories are being copied to the destination storage.
- `replicated`: The group has been moved.
-- `failed`: The group repositories failed to copy or the checksums did not match.
-- `finished`: The group has been moved and the repositories on the source storage have been deleted.
-- `cleanup failed`: The group has been moved but the repositories on the source storage could not be deleted.
+- `failed`: The group repositories failed to copy, or the checksums did not match.
+- `finished`: The group has been moved, and the repositories on the source storage have been deleted.
+- `cleanup failed`: The group has been moved, but the repositories on the source storage could not be deleted.
To ensure data integrity, groups are put in a temporary read-only state for the
-duration of the move. During this time, users receive a `The repository is temporarily
-read-only. Please try again later.` message if they try to push new commits.
+duration of the move. During this time, users receive this message if they try to
+push new commits:
+
+```plaintext
+The repository is temporarily read-only. Please try again later.
+```
This API requires you to [authenticate yourself](index.md#authentication) as an administrator.
-For other type of repositories you can read:
+APIs are also available to move other types of repositories:
-- [Project repository storage moves API](project_repository_storage_moves.md)
-- [Snippet repository storage moves API](snippet_repository_storage_moves.md)
+- [Project repository storage moves API](project_repository_storage_moves.md).
+- [Snippet repository storage moves API](snippet_repository_storage_moves.md).
## Retrieve all group repository storage moves
@@ -41,7 +45,7 @@ For other type of repositories you can read:
GET /group_repository_storage_moves
```
-By default, `GET` requests return 20 results at a time because the API results
+By default, `GET` requests return 20 results at a time, because the API results
are [paginated](index.md#pagination).
Example request:
@@ -71,13 +75,13 @@ Example response:
## Retrieve all repository storage moves for a single group
-In order to retrieve all the repository storage moves for a single group you can use the following endpoint:
+To retrieve all the repository storage moves for a single group you can use the following endpoint:
```plaintext
GET /groups/:group_id/repository_storage_moves
```
-By default, `GET` requests return 20 results at a time because the API results
+By default, `GET` requests return 20 results at a time, because the API results
are [paginated](index.md#pagination).
Supported attributes:
@@ -113,7 +117,8 @@ Example response:
## Get a single group repository storage move
-In order to retrieve a single repository storage move throughout all the existing repository storage moves, you can use the following endpoint:
+To retrieve a single repository storage move throughout all the existing repository
+storage moves, you can use the following endpoint:
```plaintext
GET /group_repository_storage_moves/:repository_storage_id
@@ -150,7 +155,8 @@ Example response:
## Get a single repository storage move for a group
-Given a group, you can retrieve a specific repository storage move for that group, through the following endpoint:
+Given a group, you can retrieve a specific repository storage move for that group,
+through the following endpoint:
```plaintext
GET /groups/:group_id/repository_storage_moves/:repository_storage_id
@@ -197,7 +203,7 @@ Supported attributes:
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `group_id` | integer | yes | ID of the group. |
-| `destination_storage_name` | string | no | Name of the destination storage shard. In [GitLab 13.5 and later](https://gitlab.com/gitlab-org/gitaly/-/issues/3209), the storage is selected [automatically based on storage weights](../administration/repository_storage_paths.md#configure-where-new-repositories-are-stored) if not provided. |
+| `destination_storage_name` | string | no | Name of the destination storage shard. In [GitLab 13.5 and later](https://gitlab.com/gitlab-org/gitaly/-/issues/3209), the storage is selected [based on storage weights](../administration/repository_storage_paths.md#configure-where-new-repositories-are-stored) if not provided. |
Example request:
@@ -238,7 +244,7 @@ Supported attributes:
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `source_storage_name` | string | yes | Name of the source storage shard. |
-| `destination_storage_name` | string | no | Name of the destination storage shard. The storage is selected [automatically based on storage weights](../administration/repository_storage_paths.md#configure-where-new-repositories-are-stored) if not provided. |
+| `destination_storage_name` | string | no | Name of the destination storage shard. The storage is selected [based on storage weights](../administration/repository_storage_paths.md#configure-where-new-repositories-are-stored) if not provided. |
Example request:
diff --git a/doc/api/groups.md b/doc/api/groups.md
index 23a8dba954f..3831aef10c9 100644
--- a/doc/api/groups.md
+++ b/doc/api/groups.md
@@ -131,7 +131,7 @@ Parameters:
| `id` | integer/string | yes | The ID or [URL-encoded path of the group](index.md#namespaced-path-encoding) of the immediate parent group |
| `skip_groups` | array of integers | no | Skip the group IDs passed |
| `all_available` | boolean | no | Show all the groups you have access to (defaults to `false` for authenticated users, `true` for administrators); Attributes `owned` and `min_access_level` have precedence |
-| `search` | string | no | Return the list of authorized groups matching the search criteria |
+| `search` | string | no | Return the list of authorized groups matching the search criteria. Only subgroup short paths are searched (not full paths) |
| `order_by` | string | no | Order groups by `name`, `path` or `id`. Default is `name` |
| `sort` | string | no | Order groups in `asc` or `desc` order. Default is `asc` |
| `statistics` | boolean | no | Include group statistics (administrators only) |
@@ -189,7 +189,7 @@ Parameters:
| `id` | integer/string | yes | The ID or [URL-encoded path of the group](index.md#namespaced-path-encoding) of the immediate parent group |
| `skip_groups` | array of integers | no | Skip the group IDs passed |
| `all_available` | boolean | no | Show all the groups you have access to (defaults to `false` for authenticated users, `true` for administrators). Attributes `owned` and `min_access_level` have precedence |
-| `search` | string | no | Return the list of authorized groups matching the search criteria |
+| `search` | string | no | Return the list of authorized groups matching the search criteria. Only descendant group short paths are searched (not full paths) |
| `order_by` | string | no | Order groups by `name`, `path`, or `id`. Default is `name` |
| `sort` | string | no | Order groups in `asc` or `desc` order. Default is `asc` |
| `statistics` | boolean | no | Include group statistics (administrators only) |
@@ -288,11 +288,8 @@ Parameters:
| `with_security_reports` | boolean | no | **(ULTIMATE)** Return only projects that have security reports artifacts present in any of their builds. This means "projects with security reports enabled". Default is `false` |
1. Order by similarity: Orders the results by a similarity score calculated from the provided `search`
-URL parameter. This is an [alpha](https://about.gitlab.com/handbook/product/gitlab-the-product/#alpha) feature [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/221043) in GitLab 13.3.
-
- The feature is behind a feature flag, you can [enable it](../administration/feature_flags.md#enable-or-disable-the-feature)
-with the `similarity_search` flag. When using `order_by=similarity` the `sort` parameter is
-ignored. When the `search` parameter is not provided, the API returns the projects ordered by `name`.
+URL parameter. When using `order_by=similarity`, the `sort` parameter is ignored. When the `search`
+parameter is not provided, the API returns the projects ordered by `name`.
Example response:
diff --git a/doc/api/index.md b/doc/api/index.md
index f1059904ac3..12d01828803 100644
--- a/doc/api/index.md
+++ b/doc/api/index.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
@@ -166,6 +166,15 @@ curl --header "Authorization: Bearer OAUTH-TOKEN" "https://gitlab.example.com/ap
Read more about [GitLab as an OAuth2 provider](oauth2.md).
+NOTE:
+We recommend OAuth access tokens have an expiration. You can use the `refresh_token` parameter
+to refresh tokens. Integrations may need to be updated to use refresh tokens prior to
+expiration, which is based on the [expires_in](https://datatracker.ietf.org/doc/html/rfc6749#appendix-A.14)
+property in the token endpoint response. See [OAuth2 token](oauth2.md) documentation
+for examples requesting a new access token using a refresh token.
+
+A default refresh setting of two hours is tracked in [this issue](https://gitlab.com/gitlab-org/gitlab/-/issues/336598).
+
### Personal/project access tokens
You can use access tokens to authenticate with the API by passing it in either
@@ -254,12 +263,12 @@ tries to steal tokens from other jobs.
> - To use in GitLab self-managed instances, ask a GitLab administrator to [enable it](#enable-or-disable-ci-job-token-scope-limit). **(FREE SELF)**
This in-development feature might not be available for your use. There can be
-[risks when enabling features still in development](../user/feature_flags.md#risks-when-enabling-features-still-in-development).
+[risks when enabling features still in development](../administration/feature_flags.md#risks-when-enabling-features-still-in-development).
Refer to this feature's version history for more details.
You can limit the access scope of a project's CI/CD job token to increase the
job token's security. A job token might give extra permissions that aren't necessary
-to access specific resources. Limiting the job token access scope reduces the risk of a leaked
+to access specific private resources. Limiting the job token access scope reduces the risk of a leaked
token being used to access private data that the user associated to the job can access.
Control the job token access scope with an allowlist of other projects authorized
@@ -273,7 +282,9 @@ setting at all times, and configure the allowlist for cross-project access if ne
For example, when the setting is enabled, jobs in a pipeline in project `A` have
a `CI_JOB_TOKEN` scope limited to project `A`. If the job needs to use the token
-to make an API request to project `B`, then `B` must be added to the allowlist for `A`.
+to make an API request to a private project `B`, then `B` must be added to the allowlist for `A`.
+If project `B` is public or internal, it doesn't need to be added to the allowlist.
+The job token scope is only for controlling access to private projects.
To enable and configure the job token scope limit:
@@ -483,7 +494,7 @@ pass the following parameters:
In the following example, we list 50 [namespaces](namespaces.md) per page:
```shell
-curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/namespaces?per_page=50"
+curl --request GET --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/namespaces?per_page=50"
```
#### Pagination `Link` header
diff --git a/doc/api/invitations.md b/doc/api/invitations.md
index c79295912fa..26e85a9d9f3 100644
--- a/doc/api/invitations.md
+++ b/doc/api/invitations.md
@@ -42,6 +42,7 @@ POST /projects/:id/invitations
| `access_level` | integer | yes | A valid access level |
| `expires_at` | string | no | A date string in the format YEAR-MONTH-DAY |
| `invite_source` | string | no | The source of the invitation that starts the member creation process. See [this issue](https://gitlab.com/gitlab-org/gitlab/-/issues/327120). |
+| `areas_of_focus` | string | no | Areas the inviter wants the member to focus upon. |
```shell
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
diff --git a/doc/api/issues.md b/doc/api/issues.md
index 6de8912c1af..feec9b31747 100644
--- a/doc/api/issues.md
+++ b/doc/api/issues.md
@@ -1950,6 +1950,7 @@ POST /projects/:id/issues/:issue_iid/add_spent_time
| `duration` | string | yes | The duration in human format. e.g: 3h30m |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding) owned by the authenticated user |
| `issue_iid` | integer | yes | The internal ID of a project's issue |
+| `summary` | string | no | A summary of how the time was spent |
```shell
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/issues/93/add_spent_time?duration=1h"
diff --git a/doc/api/job_artifacts.md b/doc/api/job_artifacts.md
index 5e2312891ef..0a39400dfd4 100644
--- a/doc/api/job_artifacts.md
+++ b/doc/api/job_artifacts.md
@@ -33,7 +33,7 @@ To use this in a [`script` definition](../ci/yaml/index.md#script) inside
- The `JOB-TOKEN` header with the GitLab-provided `CI_JOB_TOKEN` variable.
For example, the following job downloads the artifacts of the job with ID
- `42`. Note that the command is wrapped into single quotes because it contains a
+ `42`. The command is wrapped in single quotes because it contains a
colon (`:`):
```yaml
@@ -98,7 +98,7 @@ To use this in a [`script` definition](../ci/yaml/index.md#script) inside
- The `JOB-TOKEN` header with the GitLab-provided `CI_JOB_TOKEN` variable.
For example, the following job downloads the artifacts of the `test` job
- of the `main` branch. Note that the command is wrapped into single quotes
+ of the `main` branch. The command is wrapped in single quotes
because it contains a colon (`:`):
```yaml
diff --git a/doc/api/members.md b/doc/api/members.md
index 560fc8262c0..4b383efd792 100644
--- a/doc/api/members.md
+++ b/doc/api/members.md
@@ -27,7 +27,7 @@ for owner.
The `group_saml_identity` attribute is only visible to a group owner for [SSO enabled groups](../user/group/saml_sso/index.md).
-The `email` attribute is only visible to a group owner who manages the user through [Group Managed Accounts](../user/group/saml_sso/group_managed_accounts.md).
+The `email` attribute is only visible for users with public emails.
## List all members of a group or project
@@ -292,7 +292,8 @@ Example response:
"web_url": "http://192.168.1.8:3000/root",
"last_activity_on": "2021-01-27",
"membership_type": "group_member",
- "removable": true
+ "removable": true,
+ "created_at": "2021-01-03T12:16:02.000Z"
},
{
"id": 2,
@@ -304,7 +305,8 @@ Example response:
"email": "john@example.com",
"last_activity_on": "2021-01-25",
"membership_type": "group_member",
- "removable": true
+ "removable": true,
+ "created_at": "2021-01-04T18:46:42.000Z"
},
{
"id": 3,
@@ -315,7 +317,8 @@ Example response:
"web_url": "http://192.168.1.8:3000/root",
"last_activity_on": "2021-01-20",
"membership_type": "group_invite",
- "removable": false
+ "removable": false,
+ "created_at": "2021-01-09T07:12:31.000Z"
}
]
```
@@ -418,6 +421,7 @@ POST /projects/:id/members
| `access_level` | integer | yes | A valid access level |
| `expires_at` | string | no | A date string in the format `YEAR-MONTH-DAY` |
| `invite_source` | string | no | The source of the invitation that starts the member creation process. See [this issue](https://gitlab.com/gitlab-org/gitlab/-/issues/327120). |
+| `areas_of_focus` | string | no | Areas the inviter wants the member to focus upon. |
```shell
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
diff --git a/doc/api/merge_request_approvals.md b/doc/api/merge_request_approvals.md
index 7bcf4d4c875..ef8af608466 100644
--- a/doc/api/merge_request_approvals.md
+++ b/doc/api/merge_request_approvals.md
@@ -954,7 +954,7 @@ POST /projects/:id/merge_requests/:merge_request_iid/approve
| `id` | integer or string | yes | The ID or [URL-encoded path of a project](index.md#namespaced-path-encoding) |
| `merge_request_iid` | integer | yes | The IID of the merge request |
| `sha` | string | no | The `HEAD` of the merge request |
-| `approval_password` **(PREMIUM)** | string | no | Current user's password. Required if [**Require user password to approve**](../user/project/merge_requests/approvals/settings.md#require-authentication-for-approvals) is enabled in the project settings. |
+| `approval_password` **(PREMIUM)** | string | no | Current user's password. Required if [**Require user password to approve**](../user/project/merge_requests/approvals/settings.md#require-user-password-to-approve) is enabled in the project settings. |
The `sha` parameter works in the same way as
when [accepting a merge request](merge_requests.md#accept-mr): if it is passed, then it must
diff --git a/doc/api/merge_requests.md b/doc/api/merge_requests.md
index bc8c0397a3a..b90f0e70a02 100644
--- a/doc/api/merge_requests.md
+++ b/doc/api/merge_requests.md
@@ -2538,6 +2538,7 @@ POST /projects/:id/merge_requests/:merge_request_iid/add_spent_time
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding) owned by the authenticated user. |
| `merge_request_iid` | integer | yes | The internal ID of the merge request. |
| `duration` | string | yes | The duration in human format, such as `3h30m` |
+| `summary` | string | no | A summary of how the time was spent. |
```shell
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/merge_requests/93/add_spent_time?duration=1h"
diff --git a/doc/api/namespaces.md b/doc/api/namespaces.md
index ac8ea95ef30..03aefaf4380 100644
--- a/doc/api/namespaces.md
+++ b/doc/api/namespaces.md
@@ -6,7 +6,8 @@ info: To determine the technical writer assigned to the Stage/Group associated w
# Namespaces API
-Usernames and group names fall under a special category called namespaces.
+Usernames and group names fall under a special category called
+[namespaces](../user/group/index.md#namespaces).
For users and groups supported API calls see the [users](users.md) and
[groups](groups.md) documentation respectively.
@@ -20,8 +21,15 @@ administrator, a list of all namespaces in the GitLab instance is shown.
```plaintext
GET /namespaces
+GET /namespaces?search=foobar
+GET /namespaces?owned_only=true
```
+| Attribute | Type | Required | Description |
+| ------------ | ------- | -------- | ----------- |
+| `search` | string | no | Returns a list of namespaces the user is authorized to view based on the search criteria |
+| `owned_only` | boolean | no | In GitLab 14.2 and later, returns a list of owned namespaces only |
+
Example request:
```shell
@@ -115,48 +123,6 @@ once a day.
NOTE:
Only group owners are presented with `members_count_with_descendants` and `plan`.
-## Search for namespace
-
-Get all namespaces that match a string in their name or path.
-
-```plaintext
-GET /namespaces?search=foobar
-```
-
-| Attribute | Type | Required | Description |
-| --------- | ------ | -------- | ----------- |
-| `search` | string | no | Returns a list of namespaces the user is authorized to see based on the search criteria |
-
-Example request:
-
-```shell
-curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/namespaces?search=twitter"
-```
-
-Example response:
-
-```json
-[
- {
- "id": 4,
- "name": "twitter",
- "path": "twitter",
- "kind": "group",
- "full_path": "twitter",
- "parent_id": null,
- "avatar_url": null,
- "web_url": "https://gitlab.example.com/groups/twitter",
- "members_count_with_descendants": 2,
- "billable_members_count": 2,
- "max_seats_used": 0,
- "seats_in_use": 0,
- "plan": "default",
- "trial_ends_on": null,
- "trial": false
- }
-]
-```
-
## Get namespace by ID
Get a namespace by ID.
diff --git a/doc/api/oauth2.md b/doc/api/oauth2.md
index 1b06e554e5e..ce455c89d1a 100644
--- a/doc/api/oauth2.md
+++ b/doc/api/oauth2.md
@@ -83,7 +83,7 @@ Before starting the flow, generate the `STATE`, the `CODE_VERIFIER` and the `COD
which use the characters `A-Z`, `a-z`, `0-9`, `-`, `.`, `_`, and `~`.
- The `CODE_CHALLENGE` is an URL-safe base64-encoded string of the SHA256 hash of the
`CODE_VERIFIER`
- - In Ruby, you can set that up with `Base64.urlsafe_encode64(Digest::SHA256.digest(CODE_VERIFIER))`.
+ - In Ruby, you can set that up with `Base64.urlsafe_encode64(Digest::SHA256.digest(CODE_VERIFIER), padding: false)`.
1. Request authorization code. To do that, you should redirect the user to the
`/oauth/authorize` page with the following query parameters:
@@ -123,6 +123,28 @@ Before starting the flow, generate the `STATE`, the `CODE_VERIFIER` and the `COD
"created_at": 1607635748
}
```
+
+1. To retrieve a new `access_token`, use the `refresh_token` parameter. Refresh tokens may
+ be used even after the `access_token` itself expires. This request:
+ - Invalidates the existing `access_token` and `refresh_token`.
+ - Sends new tokens in the response.
+
+ ```ruby
+ parameters = 'client_id=APP_ID&client_secret=APP_SECRET&refresh_token=REFRESH_TOKEN&grant_type=refresh_token&redirect_uri=REDIRECT_URI&code_verifier=CODE_VERIFIER'
+ RestClient.post 'https://gitlab.example.com/oauth/token', parameters
+ ```
+
+ Example response:
+
+ ```json
+ {
+ "access_token": "c97d1fe52119f38c7f67f0a14db68d60caa35ddc86fd12401718b649dcfa9c68",
+ "token_type": "bearer",
+ "expires_in": 7200,
+ "refresh_token": "803c1fd487fec35562c205dac93e9d8e08f9d3652a24079d704df3039df1158f",
+ "created_at": 1628711391
+ }
+ ```
NOTE:
The `redirect_uri` must match the `redirect_uri` used in the original
@@ -181,6 +203,28 @@ be used as a CSRF token.
"created_at": 1607635748
}
```
+
+1. To retrieve a new `access_token`, use the `refresh_token` parameter. Refresh tokens may
+ be used even after the `access_token` itself expires. This request:
+ - Invalidates the existing `access_token` and `refresh_token`.
+ - Sends new tokens in the response.
+
+ ```ruby
+ parameters = 'client_id=APP_ID&client_secret=APP_SECRET&refresh_token=REFRESH_TOKEN&grant_type=refresh_token&redirect_uri=REDIRECT_URI'
+ RestClient.post 'https://gitlab.example.com/oauth/token', parameters
+ ```
+
+ Example response:
+
+ ```json
+ {
+ "access_token": "c97d1fe52119f38c7f67f0a14db68d60caa35ddc86fd12401718b649dcfa9c68",
+ "token_type": "bearer",
+ "expires_in": 7200,
+ "refresh_token": "803c1fd487fec35562c205dac93e9d8e08f9d3652a24079d704df3039df1158f",
+ "created_at": 1628711391
+ }
+ ```
NOTE:
The `redirect_uri` must match the `redirect_uri` used in the original
diff --git a/doc/api/openapi/openapi_interactive.md b/doc/api/openapi/openapi_interactive.md
index c9434147609..f83ac985131 100644
--- a/doc/api/openapi/openapi_interactive.md
+++ b/doc/api/openapi/openapi_interactive.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/api/packages/debian.md b/doc/api/packages/debian.md
index cd97bd609df..154c99d7e0a 100644
--- a/doc/api/packages/debian.md
+++ b/doc/api/packages/debian.md
@@ -4,7 +4,11 @@ group: Package
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
-# Debian API
+# Debian API **(FREE SELF)**
+
+> - Debian API [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/42670) in GitLab 13.5.
+> - Debian group API [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66188) in GitLab 14.2.
+> - [Deployed behind a feature flag](../../user/feature_flags.md), disabled by default.
This is the API documentation for [Debian](../../user/packages/debian_repository/index.md).
@@ -24,20 +28,17 @@ for details on which headers and token types are supported.
## Enable the Debian API
-The Debian API for GitLab is behind a feature flag that is disabled by default. GitLab
-administrators with access to the GitLab Rails console can enable this API for your instance.
-
-To enable it:
+The Debian API is behind a feature flag that is disabled by default.
+[GitLab administrators with access to the GitLab Rails console](../../administration/feature_flags.md)
+can opt to enable it. To enable it, follow the instructions in
+[Enable the Debian API](../../user/packages/debian_repository/index.md#enable-the-debian-api).
-```ruby
-Feature.enable(:debian_packages)
-```
+## Enable the Debian group API
-To disable it:
-
-```ruby
-Feature.disable(:debian_packages)
-```
+The Debian group API is behind a feature flag that is disabled by default.
+[GitLab administrators with access to the GitLab Rails console](../../administration/feature_flags.md)
+can opt to enable it. To enable it, follow the instructions in
+[Enable the Debian group API](../../user/packages/debian_repository/index.md#enable-the-debian-group-api).
## Upload a package file
@@ -61,6 +62,38 @@ curl --request PUT \
"https://gitlab.example.com/api/v4/projects/1/packages/debian/mypkg.deb"
```
+## Download a package
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/64923) in GitLab 14.2.
+
+Download a package file.
+
+```plaintext
+GET projects/:id/packages/debian/pool/:distribution/:letter/:package_name/:package_version/:file_name
+```
+
+| Attribute | Type | Required | Description |
+| ----------------- | ------ | -------- | ----------- |
+| `distribution` | string | yes | The codename or suite of the Debian distribution. |
+| `letter` | string | yes | The Debian Classification (first-letter or lib-first-letter). |
+| `package_name` | string | yes | The source package name. |
+| `package_version` | string | yes | The source package version. |
+| `file_name` | string | yes | The file name. |
+
+```shell
+curl --header "Private-Token: <personal_access_token>" "https://gitlab.example.com/api/v4/projects/1/packages/pool/my-distro/a/my-pkg/1.0.0/example_1.0.0~alpha2_amd64.deb"
+```
+
+Write the output to a file:
+
+```shell
+curl --header "Private-Token: <personal_access_token>" \
+ "https://gitlab.example.com/api/v4/projects/1/packages/pool/my-distro/a/my-pkg/1.0.0/example_1.0.0~alpha2_amd64.deb" \
+ --remote-name
+```
+
+This writes the downloaded file using the remote file name in the current directory.
+
## Route prefix
The remaining endpoints described are two sets of identical routes that each make requests in
@@ -95,7 +128,7 @@ The examples in this document all use the project-level prefix.
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/64067) in GitLab 14.1.
-Download a Debian package file.
+Download a Debian distribution file.
```plaintext
GET <route-prefix>/dists/*distribution/Release
@@ -117,16 +150,13 @@ curl --header "Private-Token: <personal_access_token>" \
--remote-name
```
-This writes the downloaded file to `Release` in the current directory.
+This writes the downloaded file using the remote file name in the current directory.
## Download a signed distribution Release file
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/64067) in GitLab 14.1.
-Download a Debian package file.
-
-Signed releases are [not supported](https://gitlab.com/groups/gitlab-org/-/epics/6057#note_582697034).
-Therefore, this endpoint downloads the unsigned release file.
+Download a signed Debian distribution file.
```plaintext
GET <route-prefix>/dists/*distribution/InRelease
@@ -148,4 +178,62 @@ curl --header "Private-Token: <personal_access_token>" \
--remote-name
```
-This writes the downloaded file to `InRelease` in the current directory.
+This writes the downloaded file using the remote file name in the current directory.
+
+## Download a release file signature
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/64923) in GitLab 14.2.
+
+Download a Debian release file signature.
+
+```plaintext
+GET <route-prefix>/dists/*distribution/Release.gpg
+```
+
+| Attribute | Type | Required | Description |
+| ----------------- | ------ | -------- | ----------- |
+| `distribution` | string | yes | The codename or suite of the Debian distribution. |
+
+```shell
+curl --header "Private-Token: <personal_access_token>" "https://gitlab.example.com/api/v4/projects/1/packages/debian/dists/my-distro/Release.gpg"
+```
+
+Write the output to a file:
+
+```shell
+curl --header "Private-Token: <personal_access_token>" \
+ "https://gitlab.example.com/api/v4/projects/1/packages/debian/dists/my-distro/Release.gpg" \
+ --remote-name
+```
+
+This writes the downloaded file using the remote file name in the current directory.
+
+## Download a binary file's index
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/64923) in GitLab 14.2.
+
+Download a distribution index.
+
+```plaintext
+GET <route-prefix>/dists/*distribution/:component/binary-:architecture/Packages
+```
+
+| Attribute | Type | Required | Description |
+| ----------------- | ------ | -------- | ----------- |
+| `distribution` | string | yes | The codename or suite of the Debian distribution. |
+| `component` | string | yes | The distribution component name. |
+| `architecture` | string | yes | The distribution architecture type. |
+
+```shell
+curl --header "Private-Token: <personal_access_token>" "https://gitlab.example.com/api/v4/projects/1/packages/debian/dists/my-distro/main/amd64/Packages"
+```
+
+Write the output to a file:
+
+```shell
+curl --header "Private-Token: <personal_access_token>" \
+ "https://gitlab.example.com/api/v4/projects/1/packages/debian/dists/my-distro/main/amd64/Packages" \
+ --remote-name
+```
+
+This writes the downloaded file using the remote file name in the current directory.
diff --git a/doc/api/packages/debian_group_distributions.md b/doc/api/packages/debian_group_distributions.md
index ba61bf49e01..c5d2effcf44 100644
--- a/doc/api/packages/debian_group_distributions.md
+++ b/doc/api/packages/debian_group_distributions.md
@@ -4,30 +4,27 @@ group: Package
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
-# Debian group distributions API **(FREE)**
+# Debian group distributions API **(FREE SELF)**
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/5835) in GitLab 14.0.
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66188) in GitLab 14.2.
+> - [Deployed behind a feature flag](../../user/feature_flags.md), disabled by default.
-See the [Debian package registry documentation](../../user/packages/debian_repository/index.md)
-for more information about working with Debian packages.
+This is the reference documentation for the Debian group distributions API. This API is behind a
+feature flag that is disabled by default. To use this API, you must [enable it](#enable-the-debian-group-api).
-## Enable Debian repository feature
+WARNING:
+This API is under development and is not meant for production use.
-Debian repository support is gated behind a feature flag that is **disabled by default**.
-[GitLab administrators with access to the GitLab Rails console](../../administration/feature_flags.md)
-can opt to enable it.
-
-To enable it:
-
-```ruby
-Feature.enable(:debian_packages)
-```
+For more information about working with Debian packages, see the
+[Debian package registry documentation](../../user/packages/debian_repository/index.md).
-To disable it:
+## Enable the Debian group API
-```ruby
-Feature.disable(:debian_packages)
-```
+Debian group repository support is still a work in progress. It's gated behind a feature flag that's
+**disabled by default**.
+[GitLab administrators with access to the GitLab Rails console](../../administration/feature_flags.md)
+can opt to enable it. To enable it, follow the instructions in
+[Enable the Debian group API](../../user/packages/debian_repository/index.md#enable-the-debian-group-api).
## List all Debian distributions in a group
diff --git a/doc/api/packages/debian_project_distributions.md b/doc/api/packages/debian_project_distributions.md
index aad5558dcba..bedf3f1f27a 100644
--- a/doc/api/packages/debian_project_distributions.md
+++ b/doc/api/packages/debian_project_distributions.md
@@ -4,30 +4,26 @@ group: Package
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
-# Debian project distributions API **(FREE)**
+# Debian project distributions API **(FREE SELF)**
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/5835) in GitLab 14.0.
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/42670) in GitLab 13.5.
+> - [Deployed behind a feature flag](../../user/feature_flags.md), disabled by default.
-See the [Debian package registry documentation](../../user/packages/debian_repository/index.md)
-for more information about working with Debian packages.
+This is the reference documentation for the Debian project distributions API. This API is behind a
+feature flag that is disabled by default. To use this API, you must [enable the Debian API](#enable-the-debian-api).
-## Enable Debian repository feature
+WARNING:
+This API is under development and is not meant for production use.
-Debian repository support is gated behind a feature flag that is **disabled by default**.
-[GitLab administrators with access to the GitLab Rails console](../../administration/feature_flags.md)
-can opt to enable it.
-
-To enable it:
-
-```ruby
-Feature.enable(:debian_packages)
-```
+For more information about working with Debian packages, see the
+[Debian package registry documentation](../../user/packages/debian_repository/index.md).
-To disable it:
+## Enable the Debian API
-```ruby
-Feature.disable(:debian_packages)
-```
+The Debian API is behind a feature flag that is disabled by default.
+[GitLab administrators with access to the GitLab Rails console](../../administration/feature_flags.md)
+can opt to enable it. To enable it, follow the instructions in
+[Enable the Debian API](../../user/packages/debian_repository/index.md#enable-the-debian-api).
## List all Debian distributions in a project
diff --git a/doc/api/packages/helm.md b/doc/api/packages/helm.md
index a76fa9d3755..f1d5f24cd99 100644
--- a/doc/api/packages/helm.md
+++ b/doc/api/packages/helm.md
@@ -11,8 +11,7 @@ This is the API documentation for [Helm](../../user/packages/helm_repository/ind
WARNING:
This API is used by the Helm-related package clients such as [Helm](https://helm.sh/)
and [`helm-push`](https://github.com/chartmuseum/helm-push/#readme),
-and is generally not meant for manual consumption. This API is under development and is not ready
-for production use due to limited functionality.
+and is generally not meant for manual consumption.
For instructions on how to upload and install Helm packages from the GitLab
Package Registry, see the [Helm registry documentation](../../user/packages/helm_repository/index.md).
diff --git a/doc/api/pipelines.md b/doc/api/pipelines.md
index 7d433923865..ad7336bba8f 100644
--- a/doc/api/pipelines.md
+++ b/doc/api/pipelines.md
@@ -35,7 +35,7 @@ GET /projects/:id/pipelines
| `ref` | string | no | The ref of pipelines |
| `sha` | string | no | The SHA of pipelines |
| `yaml_errors`| boolean | no | Returns pipelines with invalid configurations |
-| `name`| string | no | The name of the user who triggered pipelines |
+| `name`| string | no | _([Deprecated in GitLab 14.2](https://gitlab.com/gitlab-org/gitlab/-/issues/336953))_ The name of the user who triggered pipelines |
| `username`| string | no | The username of the user who triggered pipelines |
| `updated_after` | datetime | no | Return pipelines updated after the specified date. Expected in ISO 8601 format (`2019-03-15T08:00:00Z`). |
| `updated_before` | datetime | no | Return pipelines updated before the specified date. Expected in ISO 8601 format (`2019-03-15T08:00:00Z`). |
@@ -52,6 +52,7 @@ Example of response
[
{
"id": 47,
+ "iid": 12,
"project_id": 1,
"status": "pending",
"ref": "new-pipeline",
@@ -62,6 +63,7 @@ Example of response
},
{
"id": 48,
+ "iid": 13,
"project_id": 1,
"status": "pending",
"ref": "new-pipeline",
@@ -93,6 +95,7 @@ Example of response
```json
{
"id": 46,
+ "iid": 11,
"project_id": 1,
"status": "success",
"ref": "main",
@@ -207,6 +210,59 @@ Sample response:
}
```
+### Get a pipeline's test report summary
+
+> Introduced in [GitLab 14.2](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/65471)
+
+NOTE:
+This API route is part of the [Unit test report](../ci/unit_test_reports.md) feature.
+
+```plaintext
+GET /projects/:id/pipelines/:pipeline_id/test_report_summary
+```
+
+| Attribute | Type | Required | Description |
+|------------|---------|----------|---------------------|
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding) owned by the authenticated user |
+| `pipeline_id` | integer | yes | The ID of a pipeline |
+
+Sample request:
+
+```shell
+curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/pipelines/46/test_report_summary"
+```
+
+Sample response:
+
+```json
+{
+ "total": {
+ "time": 1904,
+ "count": 3363,
+ "success": 3351,
+ "failed": 0,
+ "skipped": 12,
+ "error": 0,
+ "suite_error": null
+ },
+ "test_suites": [
+ {
+ "name": "test",
+ "total_time": 1904,
+ "total_count": 3363,
+ "success_count": 3351,
+ "failed_count": 0,
+ "skipped_count": 12,
+ "error_count": 0,
+ "build_ids": [
+ 66004
+ ],
+ "suite_error": null
+ }
+ ]
+}
+```
+
## Create a new pipeline
```plaintext
@@ -228,6 +284,7 @@ Example of response
```json
{
"id": 61,
+ "iid": 21,
"project_id": 1,
"sha": "384c444e840a515b23f21915ee5766b87068a70d",
"ref": "main",
@@ -275,6 +332,7 @@ Response:
```json
{
"id": 46,
+ "iid": 11,
"project_id": 1,
"status": "pending",
"ref": "main",
@@ -322,6 +380,7 @@ Response:
```json
{
"id": 46,
+ "iid": 11,
"project_id": 1,
"status": "canceled",
"ref": "main",
diff --git a/doc/api/project_badges.md b/doc/api/project_badges.md
index 7726261a329..2e4ab0e2b8c 100644
--- a/doc/api/project_badges.md
+++ b/doc/api/project_badges.md
@@ -21,6 +21,7 @@ Badges support placeholders that are replaced in real time in both the link and
- **%{commit_sha}**: Replaced by the last project's commit SHA.
<!-- vale gitlab.Spelling = YES -->
+
## List all badges of a project
Gets a list of a project's badges and its group badges.
diff --git a/doc/api/project_repository_storage_moves.md b/doc/api/project_repository_storage_moves.md
index fe2750fa4bf..ebb15e1c1d6 100644
--- a/doc/api/project_repository_storage_moves.md
+++ b/doc/api/project_repository_storage_moves.md
@@ -10,7 +10,7 @@ type: reference
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/31285) in GitLab 13.0.
Project repositories including wiki and design repositories can be moved between storages. This can be useful when
-[migrating to Gitaly Cluster](../administration/gitaly/praefect.md#migrate-to-gitaly-cluster),
+[migrating to Gitaly Cluster](../administration/gitaly/index.md#migrate-to-gitaly-cluster),
for example.
As project repository storage moves are processed, they transition through different states. Values
diff --git a/doc/api/projects.md b/doc/api/projects.md
index 72de8ab6844..a510f05df58 100644
--- a/doc/api/projects.md
+++ b/doc/api/projects.md
@@ -19,6 +19,8 @@ Values for the project visibility level are:
- `internal`: the project can be cloned by any signed-in user except [external users](../user/permissions.md#external-users).
- `public`: the project can be accessed without any authentication.
+For more, read [Project visibility](../public_access/public_access.md).
+
## Project merge method
There are three options for `merge_method` to choose from:
@@ -47,11 +49,11 @@ GET /projects
| `archived` | boolean | **{dotted-circle}** No | Limit by archived status. |
| `id_after` | integer | **{dotted-circle}** No | Limit results to projects with IDs greater than the specified ID. |
| `id_before` | integer | **{dotted-circle}** No | Limit results to projects with IDs less than the specified ID. |
-| `last_activity_after` | datetime | **{dotted-circle}** No | Limit results to projects with last_activity after specified time. Format: ISO 8601 `YYYY-MM-DDTHH:MM:SSZ` |
-| `last_activity_before` | datetime | **{dotted-circle}** No | Limit results to projects with last_activity before specified time. Format: ISO 8601 `YYYY-MM-DDTHH:MM:SSZ` |
+| `last_activity_after` | datetime | **{dotted-circle}** No | Limit results to projects with last_activity after specified time. Format: ISO 8601 (`YYYY-MM-DDTHH:MM:SSZ`) |
+| `last_activity_before` | datetime | **{dotted-circle}** No | Limit results to projects with last_activity before specified time. Format: ISO 8601 (`YYYY-MM-DDTHH:MM:SSZ`) |
| `membership` | boolean | **{dotted-circle}** No | Limit by projects that the current user is a member of. |
| `min_access_level` | integer | **{dotted-circle}** No | Limit by current user minimal [access level](members.md#valid-access-levels). |
-| `order_by` | string | **{dotted-circle}** No | Return projects ordered by `id`, `name`, `path`, `created_at`, `updated_at`, or `last_activity_at` fields. `repository_size`, `storage_size`, `packages_size` or `wiki_size` fields are only allowed for admins. Default is `created_at`. |
+| `order_by` | string | **{dotted-circle}** No | Return projects ordered by `id`, `name`, `path`, `created_at`, `updated_at`, `last_activity_at`, or `similarity` fields. `repository_size`, `storage_size`, `packages_size` or `wiki_size` fields are only allowed for admins. `similarity` ([introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/332890) in GitLab 14.1) is only available when searching and is limited to projects that the current user is a member of. Default is `created_at`. |
| `owned` | boolean | **{dotted-circle}** No | Limit by projects explicitly owned by the current user. |
| `repository_checksum_failed` **(PREMIUM)** | boolean | **{dotted-circle}** No | Limit projects where the repository checksum calculation has failed ([Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/6137) in [GitLab Premium](https://about.gitlab.com/pricing/) 11.2). |
| `repository_storage` | string | **{dotted-circle}** No | Limit results to projects stored on `repository_storage`. _(admins only)_ |
@@ -147,7 +149,8 @@ When the user is authenticated and `simple` is not set this returns something li
"snippets_enabled": false,
"can_create_merge_request_in": true,
"resolve_outdated_diff_discussions": false,
- "container_registry_enabled": false,
+ "container_registry_enabled": false, // deprecated, use container_registry_access_level instead
+ "container_registry_access_level": "disabled",
"created_at": "2013-09-30T13:46:02Z",
"last_activity_at": "2013-09-30T13:46:02Z",
"creator_id": 3,
@@ -236,7 +239,8 @@ When the user is authenticated and `simple` is not set this returns something li
"snippets_enabled": false,
"can_create_merge_request_in": true,
"resolve_outdated_diff_discussions": false,
- "container_registry_enabled": false,
+ "container_registry_enabled": false, // deprecated, use container_registry_access_level instead
+ "container_registry_access_level": "disabled",
"created_at": "2013-09-30T13:46:02Z",
"last_activity_at": "2013-09-30T13:46:02Z",
"creator_id": 3,
@@ -423,7 +427,8 @@ GET /users/:user_id/projects
"snippets_enabled": false,
"can_create_merge_request_in": true,
"resolve_outdated_diff_discussions": false,
- "container_registry_enabled": false,
+ "container_registry_enabled": false, // deprecated, use container_registry_access_level instead
+ "container_registry_access_level": "disabled",
"created_at": "2013-09-30T13:46:02Z",
"last_activity_at": "2013-09-30T13:46:02Z",
"creator_id": 3,
@@ -512,7 +517,8 @@ GET /users/:user_id/projects
"snippets_enabled": false,
"can_create_merge_request_in": true,
"resolve_outdated_diff_discussions": false,
- "container_registry_enabled": false,
+ "container_registry_enabled": false, // deprecated, use container_registry_access_level instead
+ "container_registry_access_level": "disabled",
"created_at": "2013-09-30T13:46:02Z",
"last_activity_at": "2013-09-30T13:46:02Z",
"creator_id": 3,
@@ -661,7 +667,8 @@ Example response:
"snippets_enabled": false,
"can_create_merge_request_in": true,
"resolve_outdated_diff_discussions": false,
- "container_registry_enabled": false,
+ "container_registry_enabled": false, // deprecated, use container_registry_access_level instead
+ "container_registry_access_level": "disabled",
"created_at": "2013-09-30T13:46:02Z",
"last_activity_at": "2013-09-30T13:46:02Z",
"creator_id": 3,
@@ -743,7 +750,8 @@ Example response:
"snippets_enabled": false,
"can_create_merge_request_in": true,
"resolve_outdated_diff_discussions": false,
- "container_registry_enabled": false,
+ "container_registry_enabled": false, // deprecated, use container_registry_access_level instead
+ "container_registry_access_level": "disabled",
"created_at": "2013-09-30T13:46:02Z",
"last_activity_at": "2013-09-30T13:46:02Z",
"creator_id": 3,
@@ -869,7 +877,8 @@ GET /projects/:id
"snippets_enabled": false,
"can_create_merge_request_in": true,
"resolve_outdated_diff_discussions": false,
- "container_registry_enabled": false,
+ "container_registry_enabled": false, // deprecated, use container_registry_access_level instead
+ "container_registry_access_level": "disabled",
"container_expiration_policy": {
"cadence": "7d",
"enabled": false,
@@ -1179,7 +1188,8 @@ POST /projects
| `builds_access_level` | string | **{dotted-circle}** No | One of `disabled`, `private`, or `enabled`. |
| `ci_config_path` | string | **{dotted-circle}** No | The path to CI configuration file. |
| `container_expiration_policy_attributes` | hash | **{dotted-circle}** No | Update the image cleanup policy for this project. Accepts: `cadence` (string), `keep_n` (integer), `older_than` (string), `name_regex` (string), `name_regex_delete` (string), `name_regex_keep` (string), `enabled` (boolean). Valid values for `cadence` are: `1d` (every day), `7d` (every week), `14d` (every two weeks), `1month` (every month), or `3month` (every quarter). |
-| `container_registry_enabled` | boolean | **{dotted-circle}** No | Enable container registry for this project. |
+| `container_registry_enabled` | boolean | **{dotted-circle}** No | _(Deprecated)_ Enable container registry for this project. Use `container_registry_access_level` instead. |
+| `container_registry_access_level` | string | **{dotted-circle}** No | Set visibility of container registry, for this project, to one of `disabled`, `private` or `enabled`. |
| `default_branch` | string | **{dotted-circle}** No | The [default branch](../user/project/repository/branches/default.md) name. Requires `initialize_with_readme` to be `true`. |
| `description` | string | **{dotted-circle}** No | Short project description. |
| `emails_disabled` | boolean | **{dotted-circle}** No | Disable email notifications. |
@@ -1254,7 +1264,8 @@ POST /projects/user/:user_id
| `build_timeout` | integer | **{dotted-circle}** No | The maximum amount of time, in seconds, that a job can run. |
| `builds_access_level` | string | **{dotted-circle}** No | One of `disabled`, `private`, or `enabled`. |
| `ci_config_path` | string | **{dotted-circle}** No | The path to CI configuration file. |
-| `container_registry_enabled` | boolean | **{dotted-circle}** No | Enable container registry for this project. |
+| `container_registry_enabled` | boolean | **{dotted-circle}** No | _(Deprecated)_ Enable container registry for this project. Use `container_registry_access_level` instead. |
+| `container_registry_access_level` | string | **{dotted-circle}** No | Set visibility of container registry, for this project, to one of `disabled`, `private` or `enabled`. |
| `description` | string | **{dotted-circle}** No | Short project description. |
| `default_branch` | string | **{dotted-circle}** No | The [default branch](../user/project/repository/branches/default.md) name. Requires `initialize_with_readme` to be `true`. |
| `emails_disabled` | boolean | **{dotted-circle}** No | Disable email notifications. |
@@ -1331,7 +1342,8 @@ PUT /projects/:id
| `ci_default_git_depth` | integer | **{dotted-circle}** No | Default number of revisions for [shallow cloning](../ci/pipelines/settings.md#limit-the-number-of-changes-fetched-during-clone). |
| `ci_forward_deployment_enabled` | boolean | **{dotted-circle}** No | When a new deployment job starts, [skip older deployment jobs](../ci/pipelines/settings.md#skip-outdated-deployment-jobs) that are still pending |
| `container_expiration_policy_attributes` | hash | **{dotted-circle}** No | Update the image cleanup policy for this project. Accepts: `cadence` (string), `keep_n` (integer), `older_than` (string), `name_regex` (string), `name_regex_delete` (string), `name_regex_keep` (string), `enabled` (boolean). |
-| `container_registry_enabled` | boolean | **{dotted-circle}** No | Enable container registry for this project. |
+| `container_registry_enabled` | boolean | **{dotted-circle}** No | _(Deprecated)_ Enable container registry for this project. Use `container_registry_access_level` instead. |
+| `container_registry_access_level` | string | **{dotted-circle}** No | Set visibility of container registry, for this project, to one of `disabled`, `private` or `enabled`. |
| `default_branch` | string | **{dotted-circle}** No | The [default branch](../user/project/repository/branches/default.md) name. |
| `description` | string | **{dotted-circle}** No | Short project description. |
| `emails_disabled` | boolean | **{dotted-circle}** No | Disable email notifications. |
@@ -1471,7 +1483,8 @@ Example responses:
"snippets_enabled": false,
"can_create_merge_request_in": true,
"resolve_outdated_diff_discussions": false,
- "container_registry_enabled": false,
+ "container_registry_enabled": false, // deprecated, use container_registry_access_level instead
+ "container_registry_access_level": "disabled",
"created_at": "2013-09-30T13:46:02Z",
"last_activity_at": "2013-09-30T13:46:02Z",
"creator_id": 3,
@@ -1563,7 +1576,8 @@ Example response:
"snippets_enabled": false,
"can_create_merge_request_in": true,
"resolve_outdated_diff_discussions": false,
- "container_registry_enabled": false,
+ "container_registry_enabled": false, // deprecated, use container_registry_access_level instead
+ "container_registry_access_level": "disabled",
"created_at": "2013-09-30T13:46:02Z",
"last_activity_at": "2013-09-30T13:46:02Z",
"creator_id": 3,
@@ -1661,7 +1675,8 @@ Example response:
"snippets_enabled": false,
"can_create_merge_request_in": true,
"resolve_outdated_diff_discussions": false,
- "container_registry_enabled": false,
+ "container_registry_enabled": false, // deprecated, use container_registry_access_level instead
+ "container_registry_access_level": "disabled",
"created_at": "2013-09-30T13:46:02Z",
"last_activity_at": "2013-09-30T13:46:02Z",
"creator_id": 3,
@@ -1839,7 +1854,8 @@ Example response:
"snippets_enabled": false,
"can_create_merge_request_in": true,
"resolve_outdated_diff_discussions": false,
- "container_registry_enabled": false,
+ "container_registry_enabled": false, // deprecated, use container_registry_access_level instead
+ "container_registry_access_level": "disabled",
"created_at": "2013-09-30T13:46:02Z",
"last_activity_at": "2013-09-30T13:46:02Z",
"creator_id": 3,
@@ -1958,7 +1974,8 @@ Example response:
"snippets_enabled": false,
"can_create_merge_request_in": true,
"resolve_outdated_diff_discussions": false,
- "container_registry_enabled": false,
+ "container_registry_enabled": false, // deprecated, use container_registry_access_level instead
+ "container_registry_access_level": "disabled",
"created_at": "2013-09-30T13:46:02Z",
"last_activity_at": "2013-09-30T13:46:02Z",
"creator_id": 3,
@@ -2203,6 +2220,29 @@ DELETE /projects/:id/share/:group_id
curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/share/17"
```
+## Import project members
+
+Import members from another project.
+
+```plaintext
+POST /projects/:id/import_project_members/:project_id
+```
+
+| Attribute | Type | Required | Description |
+|--------------|-------------------|------------------------|-------------|
+| `id` | integer or string | **{check-circle}** Yes | The ID or [URL-encoded path](index.md#namespaced-path-encoding) of the target project to receive the members. |
+| `project_id` | integer or string | **{check-circle}** Yes | The ID or [URL-encoded path](index.md#namespaced-path-encoding) of the source project to import the members from. |
+
+```shell
+curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/import_project_members/32"
+```
+
+Returns:
+
+- `200 OK` on success.
+- `404 Project Not Found` if the target or source project does not exist or cannot be accessed by the requester.
+- `422 Unprocessable Entity` if the import of project members does not complete successfully.
+
## Hooks
Also called Project Hooks and Webhooks. These are different for [System Hooks](system_hooks.md)
@@ -2561,7 +2601,8 @@ Example response:
"archived": false,
"visibility": "private",
"resolve_outdated_diff_discussions": false,
- "container_registry_enabled": true,
+ "container_registry_enabled": true, // deprecated, use container_registry_access_level instead
+ "container_registry_access_level": "enabled",
"container_expiration_policy": {
"cadence": "7d",
"enabled": false,
diff --git a/doc/api/releases/index.md b/doc/api/releases/index.md
index cb688b81336..35bf24c586c 100644
--- a/doc/api/releases/index.md
+++ b/doc/api/releases/index.md
@@ -15,6 +15,15 @@ info: To determine the technical writer assigned to the Stage/Group associated w
> - [The permission model for create, update and delete actions was fixed](https://gitlab.com/gitlab-org/gitlab/-/issues/327505) in GitLab 14.1.
See [Release permissions](../../user/project/releases/index.md#release-permissions) for more information.
+## Authentication
+
+For authentication, the Releases API accepts either:
+
+- A [Personal Access Token](../../user/profile/personal_access_tokens.md) using the
+ `PRIVATE-TOKEN` header.
+- The [GitLab CI/CD job token](../index.md#gitlab-cicd-job-token) `$CI_JOB_TOKEN` using
+ the `JOB-TOKEN` header.
+
## List Releases
Paginated list of Releases, sorted by `released_at`.
diff --git a/doc/api/repositories.md b/doc/api/repositories.md
index 7e50a2c9f4c..9d464c94d99 100644
--- a/doc/api/repositories.md
+++ b/doc/api/repositories.md
@@ -22,11 +22,11 @@ Supported attributes:
| Attribute | Type | Required | Description |
| :---------- | :------------- | :------- | :---------- |
-| `id` | integer/string | no | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding) owned by the authenticated user. |
-| `path` | string | yes | The path inside repository. Used to get content of subdirectories. |
-| `ref` | string | yes | The name of a repository branch or tag or if not given the default branch. |
-| `recursive` | boolean | yes | Boolean value used to get a recursive tree (false by default). |
-| `per_page` | integer | yes | Number of results to show per page. If not specified, defaults to `20`. [Learn more on pagination](index.md#pagination). |
+| `id` | integer/string | yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding) owned by the authenticated user. |
+| `path` | string | no | The path inside repository. Used to get content of subdirectories. |
+| `ref` | string | no | The name of a repository branch or tag or if not given the default branch. |
+| `recursive` | boolean | no | Boolean value used to get a recursive tree (false by default). |
+| `per_page` | integer | no | Number of results to show per page. If not specified, defaults to `20`. [Learn more on pagination](index.md#pagination). |
```json
[
@@ -85,7 +85,7 @@ Supported attributes:
## Get a blob from repository
Allows you to receive information about blob in repository like size and
-content. Note that blob content is Base64 encoded. This endpoint can be accessed
+content. Blob content is Base64 encoded. This endpoint can be accessed
without authentication if the repository is publicly accessible.
```plaintext
@@ -112,8 +112,8 @@ Supported attributes:
| Attribute | Type | Required | Description |
| :-------- | :------- | :------- | :---------- |
-| `id` | datatype | yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding) owned by the authenticated user. |
-| `sha` | datatype | yes | The blob SHA. |
+| `id` | integer or string | yes | The ID or [URL-encoded path of the project](index.md#namespaced-path-encoding) owned by the authenticated user. |
+| `sha` | string | yes | The blob SHA. |
## Get file archive
@@ -149,7 +149,7 @@ curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.com/api/v4/pr
## Compare branches, tags or commits
This endpoint can be accessed without authentication if the repository is
-publicly accessible. Note that diffs could have an empty diff string if [diff limits](../development/diffs.md#diff-limits) are reached.
+publicly accessible. Diffs can have an empty diff string if [diff limits](../development/diffs.md#diff-limits) are reached.
```plaintext
GET /projects/:id/repository/compare
@@ -607,7 +607,7 @@ template: |
{% end %}
```
-Note that when specifying the template you should use `template: |` and not
+When specifying the template you should use `template: |` and not
`template: >`, as the latter doesn't preserve newlines in the template.
### Template data
diff --git a/doc/api/repository_files.md b/doc/api/repository_files.md
index 0dc50543f1e..1e33aadbc1b 100644
--- a/doc/api/repository_files.md
+++ b/doc/api/repository_files.md
@@ -24,7 +24,7 @@ in the following table.
## Get file from repository
Allows you to receive information about file in repository like name, size,
-content. Note that file content is Base64 encoded. This endpoint can be accessed
+content. File content is Base64 encoded. This endpoint can be accessed
without authentication if the repository is publicly accessible.
```plaintext
diff --git a/doc/api/services.md b/doc/api/services.md
index 3652dd99fcd..8daaa532ff4 100644
--- a/doc/api/services.md
+++ b/doc/api/services.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
@@ -259,7 +259,7 @@ GET /projects/:id/services/buildkite
## Campfire
Send notifications about push events to Campfire chat rooms.
-Note that [new users can no longer sign up for Campfire](https://basecamp.com/retired/campfire).
+[New users can no longer sign up for Campfire](https://basecamp.com/retired/campfire).
### Create/Edit Campfire service
@@ -695,16 +695,15 @@ Get Hangouts Chat service settings for a project.
GET /projects/:id/services/hangouts-chat
```
-## Irker (IRC gateway)
+## irker (IRC gateway)
-Send IRC messages, on update, to a list of recipients through an Irker gateway.
+Send IRC messages, on update, to a list of recipients through an irker gateway.
-### Create/Edit Irker (IRC gateway) service
+For more information, see the [irker integration documentation](../user/project/integrations/irker.md).
-Set Irker (IRC gateway) service for a project.
+### Create/Edit irker (IRC gateway) service
-NOTE:
-Irker does NOT have built-in authentication, which makes it vulnerable to spamming IRC channels if it is hosted outside of a firewall. Please make sure you run the daemon within a secured network to prevent abuse. For more details, read [Security analysis of `irker`](http://www.catb.org/~esr/irker/security.html).
+Set irker (IRC gateway) service for a project.
```plaintext
PUT /projects/:id/services/irker
@@ -721,17 +720,17 @@ Parameters:
| `colorize_messages` | boolean | false | Colorize messages |
| `push_events` | boolean | false | Enable notifications for push events |
-### Delete Irker (IRC gateway) service
+### Delete irker (IRC gateway) service
-Delete Irker (IRC gateway) service for a project.
+Delete irker (IRC gateway) service for a project.
```plaintext
DELETE /projects/:id/services/irker
```
-### Get Irker (IRC gateway) service settings
+### Get irker (IRC gateway) service settings
-Get Irker (IRC gateway) service settings for a project.
+Get irker (IRC gateway) service settings for a project.
```plaintext
GET /projects/:id/services/irker
diff --git a/doc/api/settings.md b/doc/api/settings.md
index d49dca96dfd..d49359b5d43 100644
--- a/doc/api/settings.md
+++ b/doc/api/settings.md
@@ -79,6 +79,7 @@ Example response:
"asset_proxy_whitelist": ["example.com", "*.example.com", "your-instance.com"],
"asset_proxy_allowlist": ["example.com", "*.example.com", "your-instance.com"],
"npm_package_requests_forwarding": true,
+ "pypi_package_requests_forwarding": true,
"snippet_size_limit": 52428800,
"issues_create_limit": 300,
"raw_blob_request_limit": 300,
@@ -96,7 +97,7 @@ Example response:
```
Users on GitLab [Premium or Ultimate](https://about.gitlab.com/pricing/) may also see
-the `file_template_project_id`, `deletion_adjourned_period`, or the `geo_node_allowed_ips` parameters:
+the `file_template_project_id`, `delayed_project_deletion`, `deletion_adjourned_period`, or the `geo_node_allowed_ips` parameters:
```json
{
@@ -104,6 +105,7 @@ the `file_template_project_id`, `deletion_adjourned_period`, or the `geo_node_al
"signup_enabled" : true,
"file_template_project_id": 1,
"geo_node_allowed_ips": "0.0.0.0/0, ::/0",
+ "delayed_project_deletion": false,
"deletion_adjourned_period": 7,
...
}
@@ -179,6 +181,7 @@ Example response:
"allow_local_requests_from_web_hooks_and_services": true,
"allow_local_requests_from_system_hooks": false,
"npm_package_requests_forwarding": true,
+ "pypi_package_requests_forwarding": true,
"snippet_size_limit": 52428800,
"issues_create_limit": 300,
"raw_blob_request_limit": 300,
@@ -200,6 +203,7 @@ these parameters:
- `file_template_project_id`
- `geo_node_allowed_ips`
- `geo_status_timeout`
+- `delayed_project_delection`
- `deletion_adjourned_period`
Example responses: **(PREMIUM SELF)**
@@ -241,8 +245,9 @@ listed in the descriptions of the relevant settings.
| `check_namespace_plan` | boolean | no | **(PREMIUM)** Enabling this makes only licensed EE features available to projects if the project namespace's plan includes the feature or if the project is public. |
| `commit_email_hostname` | string | no | Custom hostname (for private commit emails). |
| `container_registry_token_expire_delay` | integer | no | Container Registry token duration in minutes. |
-| `deactivate_dormant_users` | boolean | no | Enable [atomatic deactivation of dormant users](../user/admin_area/moderate_users.md#automatically-deactivate-dormant-users). |
+| `deactivate_dormant_users` | boolean | no | Enable [automatic deactivation of dormant users](../user/admin_area/moderate_users.md#automatically-deactivate-dormant-users). |
| `default_artifacts_expire_in` | string | no | Set the default expiration time for each job's artifacts. |
+| `default_branch_name` | string | no | [Instance-level custom initial branch name](../user/project/repository/branches/default.md#instance-level-custom-initial-branch-name) ([introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/225258) in GitLab 13.2). |
| `default_branch_protection` | integer | no | Determine if developers can push to the default branch. Can take: `0` _(not protected, both developers and maintainers can push new commits, force push, or delete the branch)_, `1` _(partially protected, developers and maintainers can push new commits, but cannot force push, or delete, the branch)_ or `2` _(fully protected, developers cannot push new commits, but maintainers can; no-one can force push or delete the branch)_ as a parameter. Default is `2`. |
| `default_ci_config_path` | string | no | Default CI/CD configuration file and path for new projects (`.gitlab-ci.yml` if not set). |
| `default_group_visibility` | string | no | What visibility level new groups receive. Can take `private`, `internal` and `public` as a parameter. Default is `private`. |
@@ -250,6 +255,7 @@ listed in the descriptions of the relevant settings.
| `default_project_visibility` | string | no | What visibility level new projects receive. Can take `private`, `internal` and `public` as a parameter. Default is `private`. |
| `default_projects_limit` | integer | no | Project limit per user. Default is `100000`. |
| `default_snippet_visibility` | string | no | What visibility level new snippets receive. Can take `private`, `internal` and `public` as a parameter. Default is `private`. |
+| `delayed_project_deletion` | boolean | no | **(PREMIUM SELF)** Enable delayed project deletion by default in new groups. Default is `false`. |
| `deletion_adjourned_period` | integer | no | **(PREMIUM SELF)** The number of days to wait before deleting a project or group that is marked for deletion. Value must be between 0 and 90.
| `diff_max_patch_bytes` | integer | no | Maximum [diff patch size](../user/admin_area/diff_limits.md), in bytes. |
| `diff_max_files` | integer | no | Maximum [files in a diff](../user/admin_area/diff_limits.md). |
@@ -324,7 +330,7 @@ listed in the descriptions of the relevant settings.
| `html_emails_enabled` | boolean | no | Enable HTML emails. |
| `import_sources` | array of strings | no | Sources to allow project import from, possible values: `github`, `bitbucket`, `bitbucket_server`, `gitlab`, `fogbugz`, `git`, `gitlab_project`, `gitea`, `manifest`, and `phabricator`. |
| `in_product_marketing_emails_enabled` | boolean | no | Enable [in-product marketing emails](../user/profile/notifications.md#global-notification-settings). Enabled by default. |
-| `invisible_captcha_enabled` | boolean | no | <!-- vale gitlab.Spelling = NO --> Enable Invisible Captcha <!-- vale gitlab.Spelling = YES --> spam detection during sign-up. Disabled by default. |
+| `invisible_captcha_enabled` | boolean | no | Enable Invisible CAPTCHA spam detection during sign-up. Disabled by default. |
| `issues_create_limit` | integer | no | Max number of issue creation requests per minute per user. Disabled by default.|
| `keep_latest_artifact` | boolean | no | Prevent the deletion of the artifacts from the most recent successful jobs, regardless of the expiry time. Enabled by default. |
| `local_markdown_version` | integer | no | Increase this value when any cached Markdown should be invalidated. |
@@ -343,6 +349,7 @@ listed in the descriptions of the relevant settings.
| `mirror_max_capacity` | integer | no | **(PREMIUM)** Maximum number of mirrors that can be synchronizing at the same time. |
| `mirror_max_delay` | integer | no | **(PREMIUM)** Maximum time (in minutes) between updates that a mirror can have when scheduled to synchronize. |
| `npm_package_requests_forwarding` | boolean | no | **(PREMIUM)** Use npmjs.org as a default remote repository when the package is not found in the GitLab Package Registry for npm. |
+| `pypi_package_requests_forwarding` | boolean | no | **(PREMIUM)** Use pypi.org as a default remote repository when the package is not found in the GitLab Package Registry for PyPI. |
| `outbound_local_requests_whitelist` | array of strings | no | Define a list of trusted domains or IP addresses to which local requests are allowed when local requests for hooks and services are disabled.
| `pages_domain_verification_enabled` | boolean | no | Require users to prove ownership of custom domains. Domain verification is an essential security measure for public GitLab sites. Users are required to demonstrate they control a domain before it is enabled. |
| `password_authentication_enabled_for_git` | boolean | no | Enable authentication for Git over HTTP(S) via a GitLab account password. Default is `true`. |
@@ -370,7 +377,7 @@ listed in the descriptions of the relevant settings.
| `repository_size_limit` | integer | no | **(PREMIUM)** Size limit per repository (MB) |
| `repository_storages_weighted` | hash of strings to integers | no | (GitLab 13.1 and later) Hash of names of taken from `gitlab.yml` to [weights](../administration/repository_storage_paths.md#configure-where-new-repositories-are-stored). New projects are created in one of these stores, chosen by a weighted random selection. |
| `repository_storages` | array of strings | no | (GitLab 13.0 and earlier) List of names of enabled storage paths, taken from `gitlab.yml`. New projects are created in one of these stores, chosen at random. |
-| `require_admin_approval_after_user_signup` | boolean | no | When enabled, any user that signs up for an account using the registration form is placed under a **Pending approval** state and has to be explicitly [approved](../user/admin_area/approving_users.md) by an administrator. |
+| `require_admin_approval_after_user_signup` | boolean | no | When enabled, any user that signs up for an account using the registration form is placed under a **Pending approval** state and has to be explicitly [approved](../user/admin_area/moderate_users.md) by an administrator. |
| `require_two_factor_authentication` | boolean | no | (**If enabled, requires:** `two_factor_grace_period`) Require all users to set up Two-factor authentication. |
| `restricted_visibility_levels` | array of strings | no | Selected levels cannot be used by non-Administrator users for groups, projects or snippets. Can take `private`, `internal` and `public` as a parameter. Default is `null` which means there is no restriction. |
| `rsa_key_restriction` | integer | no | The minimum allowed bit length of an uploaded RSA key. Default is `0` (no restriction). `-1` disables RSA keys. |
diff --git a/doc/api/snippet_repository_storage_moves.md b/doc/api/snippet_repository_storage_moves.md
index 9951e073c39..a73542c8505 100644
--- a/doc/api/snippet_repository_storage_moves.md
+++ b/doc/api/snippet_repository_storage_moves.md
@@ -10,7 +10,7 @@ type: reference
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/49228) in GitLab 13.8.
Snippet repositories can be moved between storages. This can be useful when
-[migrating to Gitaly Cluster](../administration/gitaly/praefect.md#migrate-to-gitaly-cluster), for
+[migrating to Gitaly Cluster](../administration/gitaly/index.md#migrate-to-gitaly-cluster), for
example.
As snippet repository storage moves are processed, they transition through different states. Values
diff --git a/doc/api/system_hooks.md b/doc/api/system_hooks.md
index 1f0bce1c78f..39a3ccb2bc3 100644
--- a/doc/api/system_hooks.md
+++ b/doc/api/system_hooks.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/api/usage_data.md b/doc/api/usage_data.md
index 7a7f36ce43a..00d87c89faf 100644
--- a/doc/api/usage_data.md
+++ b/doc/api/usage_data.md
@@ -13,7 +13,7 @@ The Service Data API is associated with [Service Ping](../development/service_pi
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/57270) in GitLab 13.11.
-Export all metric definitions as a single YAML file, similar to the [Metrics Dictionary](../development/usage_ping/dictionary.md), for easier importing.
+Export all metric definitions as a single YAML file, similar to the [Metrics Dictionary](https://gitlab-org.gitlab.io/growth/product-intelligence/metric-dictionary), for easier importing.
```plaintext
GET /usage_data/metric_definitions
diff --git a/doc/api/users.md b/doc/api/users.md
index 0d922487cf9..6ba751bd292 100644
--- a/doc/api/users.md
+++ b/doc/api/users.md
@@ -109,6 +109,7 @@ GET /users
| `two_factor` | string | no | Filter users by Two-factor authentication. Filter values are `enabled` or `disabled`. By default it returns all users |
| `without_projects` | boolean | no | Filter users without projects. Default is `false`, which means that all users are returned, with and without projects. |
| `admins` | boolean | no | Return only admin users. Default is `false` |
+| `saml_provider_id` **(PREMIUM)** | number | no | Return only users created by the specified SAML provider ID. If not included, it returns all users. |
```json
[
@@ -407,7 +408,7 @@ users. Either `password`, `reset_password`, or `force_random_password`
must be specified. If `reset_password` and `force_random_password` are
both `false`, then `password` is required.
-Note that `force_random_password` and `reset_password` take priority
+`force_random_password` and `reset_password` take priority
over `password`. In addition, `reset_password` and
`force_random_password` can be used together.
@@ -433,7 +434,7 @@ Parameters:
| `email` | Yes | Email |
| `extern_uid` | No | External UID |
| `external` | No | Flags the user as external - true or false (default) |
-| `extra_shared_runners_minutes_limit` | No | Extra pipeline minutes quota for this user (purchased in addition to the minutes included in the plan) **(STARTER)** |
+| `extra_shared_runners_minutes_limit` | No | Extra pipeline minutes quota for this user (purchased in addition to the minutes included in the plan) **(PREMIUM)** |
| `force_random_password` | No | Set user password to a random value - true or false (default) |
| `group_id_for_saml` | No | ID of group where SAML has been configured |
| `linkedin` | No | LinkedIn |
@@ -446,7 +447,7 @@ Parameters:
| `projects_limit` | No | Number of projects user can create |
| `provider` | No | External provider name |
| `reset_password` | No | Send user password reset link - true or false(default) |
-| `shared_runners_minutes_limit` | No | Pipeline minutes quota for this user (included in plan). Can be `nil` (default; inherit system default), `0` (unlimited) or `> 0` **(STARTER)** |
+| `shared_runners_minutes_limit` | No | Pipeline minutes quota for this user (included in plan). Can be `nil` (default; inherit system default), `0` (unlimited) or `> 0` **(PREMIUM)** |
| `skip_confirmation` | No | Skip confirmation - true or false (default) |
| `skype` | No | Skype ID |
| `theme_id` | No | The GitLab theme for the user (see [the user preference docs](../user/profile/preferences.md#navigation-theme) for more information) |
@@ -475,7 +476,7 @@ Parameters:
| `email` | No | Email |
| `extern_uid` | No | External UID |
| `external` | No | Flags the user as external - true or false (default) |
-| `extra_shared_runners_minutes_limit` | No | Extra pipeline minutes quota for this user (purchased in addition to the minutes included in the plan) **(STARTER)** |
+| `extra_shared_runners_minutes_limit` | No | Extra pipeline minutes quota for this user (purchased in addition to the minutes included in the plan) **(PREMIUM)** |
| `group_id_for_saml` | No | ID of group where SAML has been configured |
| `id` | Yes | The ID of the user |
| `linkedin` | No | LinkedIn |
@@ -488,7 +489,7 @@ Parameters:
| `projects_limit` | No | Limit projects each user can create |
| `provider` | No | External provider name |
| `public_email` | No | The public email of the user (must be already verified) |
-| `shared_runners_minutes_limit` | No | Pipeline minutes quota for this user (included in plan). Can be `nil` (default; inherit system default), `0` (unlimited) or `> 0` **(STARTER)** |
+| `shared_runners_minutes_limit` | No | Pipeline minutes quota for this user (included in plan). Can be `nil` (default; inherit system default), `0` (unlimited) or `> 0` **(PREMIUM)** |
| `skip_reconfirmation` | No | Skip reconfirmation - true or false (default) |
| `skype` | No | Skype ID |
| `theme_id` | No | The GitLab theme for the user (see [the user preference docs](../user/profile/preferences.md#navigation-theme) for more information) |
@@ -858,9 +859,13 @@ Example response:
Get the counts (same as in top right menu) of the currently signed in user.
-| Attribute | Type | Description |
-| ---------------- | ------ | ------------------------------------------------------------ |
-| `merge_requests` | number | Merge requests that are active and assigned to current user. |
+| Attribute | Type | Description |
+| --------------------------------- | ------ | ---------------------------------------------------------------------------- |
+| `assigned_issues` | number | Number of issues that are open and assigned to the current user. [Added](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66909) in GitLab 14.2. |
+| `assigned_merge_requests` | number | Number of merge requests that are active and assigned to the current user. [Added](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/50026) in GitLab 13.8. |
+| `merge_requests` | number | [Deprecated](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/50026) in GitLab 13.8. Equivalent to and replaced by `assigned_merge_requests`. |
+| `review_requested_merge_requests` | number | Number of merge requests that the current user has been requested to review. [Added](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/50026) in GitLab 13.8. |
+| `todos` | number | Number of pending to-do items for current user. [Added](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66909) in GitLab 14.2. |
```plaintext
GET /user_counts
@@ -874,7 +879,11 @@ Example response:
```json
{
- "merge_requests": 4
+ "merge_requests": 4,
+ "assigned_issues": 15,
+ "assigned_merge_requests": 11,
+ "review_requested_merge_requests": 0,
+ "todos": 1
}
```
@@ -1537,7 +1546,7 @@ curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitla
Returns:
-- `201 OK` on success.
+- `201 Created` on success.
- `404 User Not Found` if user cannot be found.
- `403 Forbidden` if the user cannot be approved because they are blocked by an administrator or by LDAP synchronization.
@@ -1599,7 +1608,7 @@ Example response:
> Requires admin permissions.
> Token values are returned once. Make sure you save it - you can't access it again.
-It creates a new impersonation token. Note that only administrators can do this.
+It creates a new impersonation token. Only administrators can do this.
You are only able to create impersonation tokens to impersonate the user and perform
both API calls and Git reads and writes. The user can't see these tokens in their profile
settings page.
@@ -1757,7 +1766,7 @@ Example response:
]
```
-Please note that `last_activity_at` is deprecated, please use `last_activity_on`.
+`last_activity_at` is deprecated. Use `last_activity_on` instead.
## User memberships (admin only)
diff --git a/doc/api/v3_to_v4.md b/doc/api/v3_to_v4.md
index 69e1ea56c2c..8875e4daa87 100644
--- a/doc/api/v3_to_v4.md
+++ b/doc/api/v3_to_v4.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/api/version.md b/doc/api/version.md
index 313ba4da7d4..b23930e70f9 100644
--- a/doc/api/version.md
+++ b/doc/api/version.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/architecture/blueprints/consolidating_groups_and_projects/index.md b/doc/architecture/blueprints/consolidating_groups_and_projects/index.md
new file mode 100644
index 00000000000..fab886808e2
--- /dev/null
+++ b/doc/architecture/blueprints/consolidating_groups_and_projects/index.md
@@ -0,0 +1,155 @@
+---
+stage: none
+group: unassigned
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+comments: false
+description: Consolidating groups and projects
+---
+
+# Consolidating Group and Project
+
+There are numerous features that exist exclusively within groups or
+projects. The boundary between group and project features used to be clear.
+However, there is growing demand to have group features within projects, and
+project features within groups. For example, having issues in groups, and epics
+in projects.
+
+The [Simplify Groups & Projects Working Group](https://about.gitlab.com/company/team/structure/working-groups/simplify-groups-and-projects/)
+determined that our architecture is a significant hurdle in sharing features
+across groups and projects.
+
+Architecture issue: <https://gitlab.com/gitlab-org/architecture/tasks/-/issues/7>
+
+## Challenges
+
+### Feature duplication
+
+When a feature needs to be made available on a different level, we have
+no established process in place. This results in the reimplementation of
+the same feature. Those implementations diverge from each other over time as
+they all live on their own. A few more problems with this approach:
+
+- Features are coupled to their container. In practice it is not straight
+ forward to decouple a feature from its container. The degree of coupling
+ varies across features.
+- Naive duplication of features will result in a more complex and fragile code base.
+- Generalizing solutions across groups and projects may degrade system performance.
+- The range of features span across many teams, and these changes will need to
+ manage development interference.
+- The group/project hierarchy creates a natural feature hierarchy. When features
+ exist across containers the feature hierarchy becomes ambiguous.
+- Duplication of features slows down development velocity.
+
+There is potential for significant architectural changes. These changes will
+have to be independent of the product design, so that customer experience
+remains consistent.
+
+### Performance
+
+Resources can only be queried in elaborate / complicated ways. This caused
+performance issues with authorization, epics, and many other places. As an
+example, to query the projects a user has access to, the following sources need
+to be considered:
+
+- personal projects
+- direct group membership
+- direct project membership
+- inherited group membership
+- inherited project membership
+- group sharing
+- inherited membership via group sharing
+- project sharing
+
+Group / project membership, group / project sharing are also examples of
+duplicated features.
+
+## Goals
+
+For now this blueprint strictly relates to the engineering challenges.
+
+- Consolidate the group and project container architecture.
+- Develop a set of solutions to decouple features from their container.
+- Decouple engineering changes from product changes.
+- Develop a strategy to make architectural changes without adversely affecting
+ other teams.
+- Provide a solution for requests asking for features availability of other levels.
+
+## Proposal
+
+Use our existing `Namespace` model as a container for features. We already have
+a `Namespace` associated with `User` (personal namespace), and with `Group`
+(which is a subclass of `Namespace`). We can extend this further, by associating
+`Namespace` with `Projects` by introducing `ProjectNamespaces`. Each `Project`
+should be owned by its `ProjectNamespace`, and this relation should replace the
+existing `Project` <-> `Group` / personal namespace relation.
+
+We also lack a model specific for personal namespaces, and we use the generic
+`Namespace` model instead. This is confusing, but can be fixed by creating a
+dedicated subclass: `UserNamespace`.
+
+As a result, the `Namespace` hierarchy will transition to:
+
+```mermaid
+classDiagram
+ Namespace <|-- UserNamespace
+ Namespace <|-- Group
+ Namespace <|-- ProjectNamespace
+```
+
+New features should be implemented on `Namespace`. Similarly, when a feature
+need to be reimplemented on a different level, moving it to `Namespace`
+essentially makes it available on all levels:
+
+- personal namespaces
+- groups
+- projects
+
+Various traversal queries are already available on `Namespaces` to query the
+group hierarchy. `Projects` represents the leaf nodes in the hierarchy, but with
+the introduction of `ProjectNamespace`, these traversal queries can be used to
+retrieve projects as well.
+
+This also enables further simplification of some of our core features:
+
+- routes should be generated based on the `Namespace` hierarchy, instead of
+ mixing project with the group hierarchy.
+- there is no need to differentiate between `GroupMembers` and `ProjectMembers`.
+ All `Members` should be related to a `Namespace`. This can lead to simplified
+ querying, and potentially deduplicating policies.
+
+As more and more features will be migrated to `Namespace`, the role of `Project`
+model will diminish over time to essentially a container around repository
+related functionality.
+
+## Iterations
+
+The work required to establish `Namespace` as a container for our features is
+tracked under [Consolidate Groups and Projects](https://gitlab.com/groups/gitlab-org/-/epics/6473)
+epic.
+
+## Who
+
+Proposal:
+
+<!-- vale gitlab.Spelling = NO -->
+
+| Role | Who
+|------------------------------|-------------------------------------|
+| Author | Alex Pooley, Imre Farkas |
+| Architecture Evolution Coach | Dmitriy Zaporozhets, Grzegorz Bizon |
+| Engineering Leader | Michelle Gill |
+| Domain Expert | Jan Provaznik |
+
+<!-- vale gitlab.Spelling = YES -->
+
+DRIs:
+
+<!-- vale gitlab.Spelling = NO -->
+
+| Role | Who
+|------------------------------|------------------------|
+| Product | Melissa Ushakov |
+| Leadership | Michelle Gill |
+| Engineering | Imre Farkas |
+
+<!-- vale gitlab.Spelling = YES -->
diff --git a/doc/architecture/blueprints/database/scalability/patterns/img/db_terminology_v14_2.png b/doc/architecture/blueprints/database/scalability/patterns/img/db_terminology_v14_2.png
new file mode 100644
index 00000000000..85ba1360f06
--- /dev/null
+++ b/doc/architecture/blueprints/database/scalability/patterns/img/db_terminology_v14_2.png
Binary files differ
diff --git a/doc/architecture/blueprints/database/scalability/patterns/img/read_mostly_licenses_calls_v14_2.png b/doc/architecture/blueprints/database/scalability/patterns/img/read_mostly_licenses_calls_v14_2.png
new file mode 100644
index 00000000000..f6ae995391c
--- /dev/null
+++ b/doc/architecture/blueprints/database/scalability/patterns/img/read_mostly_licenses_calls_v14_2.png
Binary files differ
diff --git a/doc/architecture/blueprints/database/scalability/patterns/img/read_mostly_licenses_fixed_v14_2.png b/doc/architecture/blueprints/database/scalability/patterns/img/read_mostly_licenses_fixed_v14_2.png
new file mode 100644
index 00000000000..dcfaae230d3
--- /dev/null
+++ b/doc/architecture/blueprints/database/scalability/patterns/img/read_mostly_licenses_fixed_v14_2.png
Binary files differ
diff --git a/doc/architecture/blueprints/database/scalability/patterns/img/read_mostly_readwriteratio_v14_2.png b/doc/architecture/blueprints/database/scalability/patterns/img/read_mostly_readwriteratio_v14_2.png
new file mode 100644
index 00000000000..9b85f814bc1
--- /dev/null
+++ b/doc/architecture/blueprints/database/scalability/patterns/img/read_mostly_readwriteratio_v14_2.png
Binary files differ
diff --git a/doc/architecture/blueprints/database/scalability/patterns/img/read_mostly_subscriptions_reads_v14_2.png b/doc/architecture/blueprints/database/scalability/patterns/img/read_mostly_subscriptions_reads_v14_2.png
new file mode 100644
index 00000000000..4f448841e48
--- /dev/null
+++ b/doc/architecture/blueprints/database/scalability/patterns/img/read_mostly_subscriptions_reads_v14_2.png
Binary files differ
diff --git a/doc/architecture/blueprints/database/scalability/patterns/img/read_mostly_subscriptions_writes_v14_2.png b/doc/architecture/blueprints/database/scalability/patterns/img/read_mostly_subscriptions_writes_v14_2.png
new file mode 100644
index 00000000000..e4f5756051f
--- /dev/null
+++ b/doc/architecture/blueprints/database/scalability/patterns/img/read_mostly_subscriptions_writes_v14_2.png
Binary files differ
diff --git a/doc/architecture/blueprints/database/scalability/patterns/index.md b/doc/architecture/blueprints/database/scalability/patterns/index.md
new file mode 100644
index 00000000000..dadf3634407
--- /dev/null
+++ b/doc/architecture/blueprints/database/scalability/patterns/index.md
@@ -0,0 +1,12 @@
+---
+stage: Enablement
+group: Database
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+comments: false
+description: 'Learn how to scale the database through the use of best-of-class database scalability patterns'
+---
+
+# Database Scalability Patterns
+
+- [Read-mostly](read_mostly.md)
+- [Time-decay](time_decay.md)
diff --git a/doc/architecture/blueprints/database/scalability/patterns/read_mostly.md b/doc/architecture/blueprints/database/scalability/patterns/read_mostly.md
new file mode 100644
index 00000000000..02b56841507
--- /dev/null
+++ b/doc/architecture/blueprints/database/scalability/patterns/read_mostly.md
@@ -0,0 +1,152 @@
+---
+stage: Enablement
+group: Database
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+comments: false
+description: 'Learn how to scale operating on read-mostly data at scale'
+---
+
+# Read-mostly data
+
+[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/326037) in GitLab 14.0.
+
+This document describes the *read-mostly* pattern introduced in the
+[Database Scalability Working Group](https://about.gitlab.com/company/team/structure/working-groups/database-scalability/#read-mostly-data).
+We discuss the characteristics of *read-mostly* data and propose best practices for GitLab development
+to consider in this context.
+
+## Characteristics of read-mostly data
+
+As the name already suggests, *read-mostly* data is about data that is much more often read than
+updated. Writing this data through updates, inserts, or deletes is a very rare event compared to
+reading this data.
+
+In addition, *read-mostly* data in this context is typically a small dataset. We explicitly don't deal
+with large datasets here, even though they often have a "write once, read often" characteristic, too.
+
+### Example: license data
+
+Let's introduce a canonical example: license data in GitLab. A GitLab instance may have a license
+attached to use GitLab enterprise features. This license data is held instance-wide, that
+is, there typically only exist a few relevant records. This information is kept in a table
+`licenses` which is very small.
+
+We consider this *read-mostly* data, because it follows above outlined characteristics:
+
+- **Rare writes:** license data very rarely sees any writes after having inserted the license.
+- **Frequent reads:** license data is read extremely often to check if enterprise features can be used.
+- **Small size:** this dataset is very small. On GitLab.com we have 5 records at < 50 kB total relation size.
+
+### Effects of *read-mostly* data at scale
+
+Given this dataset is small and read very often, we can expect data to nearly always reside in
+database caches and/or database disk caches. Thus, the concern with *read-mostly* data is typically
+not around database I/O overhead, because we typically don't read data from disk anyway.
+
+However, considering the high frequency reads, this has potential to incur overhead in terms of
+database CPU load and database context switches. Additionally, those high frequency queries go
+through the whole database stack. They also cause overhead on the database connection
+multiplexing components and load balancers. Also, the application spends cycles in preparing and
+sending queries to retrieve the data, deserialize the results and allocate new objects to represent
+the information gathered - all in a high frequency fashion.
+
+In the example of license data above, the query to read license data was
+[identified](https://gitlab.com/gitlab-org/gitlab/-/issues/292900) to stand out in terms of query
+frequency. In fact, we were seeing around 6,000 queries per second (QPS) on the cluster during peak
+times. With the cluster size at that time, we were seeing about 1,000 QPS on each replica, and fewer
+than 400 QPS on the primary at peak times. The difference is explained by our
+[database load balancing for scaling reads](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/lib/gitlab/database/load_balancing.rb),
+which favors replicas for pure read-only transactions.
+
+![Licenses Calls](img/read_mostly_licenses_calls_v14_2.png)
+
+The overall transaction throughput on the database primary at the time varied between 50,000 and
+70,000 transactions per second (TPS). In comparison, this query frequency only takes a small
+portion of the overall query frequency. However, we do expect this to still have considerable
+overhead in terms of context switches. It is worth removing this overhead, if we can.
+
+## How to recognize read-mostly data
+
+It can be difficult to recognize *read-mostly* data, even though there are clear cases like in our
+example.
+
+One approach is to look at the [read/write ratio and statistics from, for example, the primary](https://bit.ly/3frdtyz). Here, we look at the TOP20 tables by their read/write ratio over 60 minutes (taken in a peak traffic time):
+
+```plaintext
+bottomk(20,
+avg by (relname, fqdn) (
+ (
+ rate(pg_stat_user_tables_seq_tup_read{env="gprd"}[1h])
+ +
+ rate(pg_stat_user_tables_idx_tup_fetch{env="gprd"}[1h])
+ ) /
+ (
+ rate(pg_stat_user_tables_seq_tup_read{env="gprd"}[1h])
+ + rate(pg_stat_user_tables_idx_tup_fetch{env="gprd"}[1h])
+ + rate(pg_stat_user_tables_n_tup_ins{env="gprd"}[1h])
+ + rate(pg_stat_user_tables_n_tup_upd{env="gprd"}[1h])
+ + rate(pg_stat_user_tables_n_tup_del{env="gprd"}[1h])
+ )
+) and on (fqdn) (pg_replication_is_replica == 0)
+)
+```
+
+This yields a good impression of which tables are much more often read than written (on the database
+primary):
+
+![Read Write Ratio TOP20](img/read_mostly_readwriteratio_v14_2.png)
+
+From here, we can [zoom](https://bit.ly/2VmloX1) into for example `gitlab_subscriptions` and realize that index reads peak at above 10k tuples per second overall (there are no seq scans):
+
+![Subscriptions: reads](img/read_mostly_subscriptions_reads_v14_2.png)
+
+We very rarely write to the table (there are no seq scans):
+
+![Subscriptions: writes](img/read_mostly_subscriptions_writes_v14_2.png)
+
+Additionally, the table is only 400 MB in size - so this may be another candidate we may want to
+consider in this pattern (see [#327483](https://gitlab.com/gitlab-org/gitlab/-/issues/327483)).
+
+## Best practices for handling read-mostly data at scale
+
+### Cache read-mostly data
+
+To reduce the database overhead, we implement a cache for the data and thus significantly
+reduce the query frequency on the database side. There are different scopes for caching available:
+
+- `RequestStore`: per-request in-memory cache (based on [request_store gem](https://github.com/steveklabnik/request_store))
+- [`ProcessMemoryCache`](https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/process_memory_cache.rb#L4): per-process in-memory cache (a `ActiveSupport::Cache::MemoryStore`)
+- [`Gitlab::Redis::Cache`](https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/redis/cache.rb) and `Rails.cache`: full-blown cache in Redis
+
+Continuing the above example, we had a `RequestStore` in place to cache license information on a
+per-request basis. However, that still leads to one query per request. When we started to cache license information
+[using a process-wide in-memory cache](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/50318)
+for 1 second, query frequency dramatically dropped:
+
+![Licenses Calls - Fixed](img/read_mostly_licenses_fixed_v14_2.png)
+
+The choice of caching here highly depends on the characteristics of data in question. A very small
+dataset like license data that is nearly never updated is a good candidate for in-memory caching.
+A per-process cache is favorable here, because this unties the cache refresh rate from the incoming
+request rate.
+
+A caveat here is that our Redis setup is currently not using Redis secondaries and we rely on a
+single node for caching. That is, we need to strike a balance to avoid Redis falling over due to
+increased pressure. In comparison, reading data from PostgreSQL replicas can be distributed across
+several read-only replicas. Even though a query to the database might be more expensive, the
+load is balanced across more nodes.
+
+### Read read-mostly data from replica
+
+With or without caching implemented, we also must make sure to read data from database replicas if
+we can. This supports our efforts to scale reads across many database replicas and removes
+unnecessary workload from the database primary.
+
+GitLab [database load balancing for reads](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/lib/gitlab/database/load_balancing.rb)
+sticks to the primary after a first write or when opening an
+explicit transaction. In the context of *read-mostly* data, we strive to read this data outside of a
+transaction scope and before doing any writes. This is often possible given that this data is only
+seldom updated (and thus we're often not concerned with reading slightly stale data, for example).
+However, it can be non-obvious that this query cannot be sent to a replica because of a previous
+write or transaction. Hence, when we encounter *read-mostly* data, it is a good practice to check the
+wider context and make sure this data can be read from a replica.
diff --git a/doc/architecture/blueprints/database/scalability/patterns/time_decay.md b/doc/architecture/blueprints/database/scalability/patterns/time_decay.md
new file mode 100644
index 00000000000..9309c581d54
--- /dev/null
+++ b/doc/architecture/blueprints/database/scalability/patterns/time_decay.md
@@ -0,0 +1,361 @@
+---
+stage: Enablement
+group: Database
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+comments: false
+description: 'Learn how to operate on large time-decay data'
+---
+
+# Time-decay data
+
+[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/326035) in GitLab 14.0.
+
+This document describes the *time-decay pattern* introduced in the
+[Database Scalability Working Group](https://about.gitlab.com/company/team/structure/working-groups/database-scalability/#time-decay-data).
+We discuss the characteristics of time-decay data, and propose best practices for GitLab development
+to consider in this context.
+
+Some datasets are subject to strong time-decay effects, in which recent data is accessed far more
+frequently than older data. Another aspect of time-decay: with time, some types of data become
+less important. This means we can also move old data to a bit less durable (less available) storage,
+or even delete the data, in extreme cases.
+
+Those effects are usually tied to product or application semantics. They can vary in the degree
+that older data are accessed, and how useful or required older data are to the users or the
+application.
+
+Let's first consider entities with no inherent time-related bias for their data.
+
+A record for a user or a project may be equally important and frequently accessed, irrelevant to when
+it was created. We can not predict by using a user's `id` or `created_at` how often the related
+record is accessed or updated.
+
+On the other hand, a good example for datasets with extreme time-decay effects are logs and time
+series data, such as events recording user actions.
+
+Most of the time, that type of data may have no business use after a couple of days or weeks, and
+quickly become less important even from a data analysis perspective. They represent a snapshot that
+quickly becomes less and less relevant to the current state of the application, until at
+some point it has no real value.
+
+In the middle of the two extremes, we can find datasets that have useful information that we want to
+keep around, but with old records seldom being accessed after an initial (small) time period after
+creation.
+
+## Characteristics of time-decay data
+
+We are interested in datasets that show the following characteristics:
+
+- **Size of the dataset:** they are considerably large.
+- **Access methods:** we can filter the vast majority of queries accessing the dataset
+ by a time related dimension or a categorical dimension with time decay effects.
+- **Immutability:** the time-decay status does not change.
+- **Retention:** whether we want to keep the old data or not, or whether old
+ data should remain accessible by users through the application.
+
+### Size of the dataset
+
+There can be datasets of variable sizes that show strong time-decay effects, but in the context of
+this blueprint, we intend to focus on entities with a **considerably large dataset**.
+
+Smaller datasets do not contribute significantly to the database related resource usage, nor do they
+inflict a considerable performance penalty to queries.
+
+In contrast, large datasets over about 50 million records, or 100 GB in size, add a significant
+overhead to constantly accessing a really small subset of the data. In those cases, we would want to
+use the time-decay effect in our advantage and reduce the actively accessed dataset.
+
+### Data access methods
+
+The second and most important characteristic of time-decay data is that most of the time, we are
+able to implicitly or explicitly access the data using a date filter,
+**restricting our results based on a time-related dimension**.
+
+There can be many such dimensions, but we are only going to focus on the creation date as it is both
+the most commonly used, and the one that we can control and optimize against. It:
+
+- Is immutable.
+- Is set when the record is created
+- Can be tied to physically clustering the records, without having to move them around.
+
+It's important to add that even if time-decay data are not accessed that way by the application by
+default, you can make the vast majority of the queries explicitly filter the data in such
+a way. **Time decay data without such a time-decay related access method are of no use from an optimization perspective, as there is no way to set and follow a scaling pattern.**
+
+We are not restricting the definition to data that are always accessed using a time-decay related
+access method, as there may be some outlier operations. These may be necessary and we can accept
+them not scaling, if the rest of the access methods can scale. An example:
+an administrator accessing all past events of a specific type, while all other operations only access
+a maximum of a month of events, restricted to 6 months in the past.
+
+### Immutability
+
+The third characteristic of time-decay data is that their **time-decay status does not change**.
+Once they are considered "old", they can not switch back to "new" or relevant again.
+
+This definition may sound trivial, but we have to be able to make operations over "old" data **more**
+expensive (for example, by archiving or moving them to less expensive storage) without having to worry about
+the repercussions of switching back to being relevant and having important application operations
+underperforming.
+
+Consider as a counter example to a time-decay data access pattern an application view that presents
+issues by when they were updated. We are also interested in the most recent data from an "update"
+perspective, but that definition is volatile and not actionable.
+
+### Retention
+
+Finally, a characteristic that further differentiates time-decay data in sub-categories with
+slightly different approaches available is **whether we want to keep the old data or not**
+(for example, retention policy) and/or
+**whether old data will be accessible by users through the application**.
+
+#### (optional) Extended definition of time-decay data
+
+As a side note, if we extend the aforementioned definitions to access patterns that restrict access
+to a well defined subset of the data based on a clustering attribute, we could use the time-decay
+scaling patterns for many other types of data.
+
+As an example, consider data that are only accessed while they are labeled as active, like To-Dos
+not marked as done, pipelines for unmerged merge requests (or a similar not time based constraint), etc.
+In this case, instead of using a time dimension to define the decay, we use a categorical dimension
+(that is, one that uses a finite set of values) to define the subset of interest. As long as that
+subset is small compared to the overall size of the dataset, we could use the same approach.
+
+Similarly, we may define data as old based both on a time dimension and additional status attributes,
+such as CI pipelines that failed more than 6 months ago.
+
+## Time-decay data strategies
+
+### Partition tables
+
+This is the acceptable best practice for addressing time-decay data from a pure database perspective.
+You can find more information on table partitioning for PostgreSQL in the
+[documentation page for table partitioning](https://www.postgresql.org/docs/12/ddl-partitioning.html).
+
+Partitioning by date intervals (for example, month, year) allows us to create much smaller tables
+(partitions) for each date interval and only access the most recent partition(s) for any
+application related operation.
+
+We have to set the partitioning key based on the date interval of interest, which may depend on two
+factors:
+
+1. **How far back in time do we need to access data for?**
+ Partitioning by week is of no use if we always access data for a year back, as we would have to
+ execute queries over 52 different partitions (tables) each time. As an example for that consider the
+ activity feed on the profile of any GitLab user.
+
+ In contrast, if we want to just access the last 7 days of created records, partitioning by year
+ would include too many unnecessary records in each partition, as is the case for `web_hook_logs`.
+1. **How large are the partitions created?**
+ The major purpose of partitioning is accessing tables that are as small as possible. If they get too
+ large by themselves, queries will start underperforming. We may have to re-partition (split) them
+ in even smaller partitions.
+
+The perfect partitioning scheme keeps **all queries over a dataset almost always over a single partition**,
+with some cases going over two partitions and seldom over multiple partitions being
+an acceptable balance. We should also target for **partitions that are as small as possible**, below
+5-10M records and/or 10GB each maximum.
+
+Partitioning can be combined with other strategies to either prune (drop) old partitions, move them
+to cheaper storage inside the database or move them outside of the database (archive or use of other
+types of storage engines).
+
+As long as we do not want to keep old records and partitioning is used, pruning old data has a
+constant, for all intents and purposes zero, cost compared to deleting the data from a huge table
+(as described in the following sub-section). We just need a background worker to drop old partitions
+whenever all the data inside that partition get out of the retention policy's period.
+
+As an example, if we only want to keep records no more than 6 months old and we partition by month,
+we can safely keep the 7 latest partitions at all times (current month and 6 months in the past).
+That means that we can have a worker dropping the 8th oldest partition at the start of each month.
+
+Moving partitions to cheaper storage inside the same database is relatively simple in PostgreSQL
+through the use of [tablespaces](https://www.postgresql.org/docs/12/manage-ag-tablespaces.html).
+It is possible to specify a tablespace and storage parameters for each partition separately, so the
+approach in this case would be to:
+
+1. Create a new tablespace on a cheaper, slow disk.
+1. Set the storage parameters higher on that new tablespace so that the PostgreSQL optimizer knows that the disks are slower.
+1. Move the old partitions to the slow tablespace automatically by using background workers.
+
+Finally, moving partitions outside of the database can be achieved through database archiving or
+manually exporting the partitions to a different storage engine (more details in the dedicated
+sub-section).
+
+### Prune old data
+
+If we don't want to keep old data around in any form, we can implement a pruning strategy and
+delete old data.
+
+It's a simple-to-implement strategy that uses a pruning worker to delete past data. As an example
+that we further analyze below, we are pruning old `web_hook_logs` older than 90 days.
+
+The disadvantage of such a solution over large, non-partitioned tables is that we have to manually
+access and delete all the records that are considered as not relevant any more. That is a very
+expensive operation, due to multi-version concurrency control in PostgreSQL. It also leads to the
+pruning worker not being able to catch up with new records being created, if that rate exceeds a
+threshold, as is the case of [web_hook_logs](https://gitlab.com/gitlab-org/gitlab/-/issues/256088)
+at the time of writing this document.
+
+For the aforementioned reasons, our proposal is that
+**we should base any implementation of a data retention strategy on partitioning**,
+unless there are strong reasons not to.
+
+### Move old data outside of the database
+
+In most cases, we consider old data as valuable, so we do not want to prune them. If at the same
+time, they are not required for any database related operations (for example, directly accessed or used in
+joins and other types of queries), we can move them outside of the database.
+
+That does not mean that they are not directly accessible by users through the application; we could
+move data outside the database and use other storage engines or access types for them, similarly to
+offloading metadata but only for the case of old data.
+
+In the simplest use case we can provide fast and direct access to recent data, while allowing users
+to download an archive with older data. This is an option evaluated in the `audit_events` use case.
+Depending on the country and industry, audit events may have a very long retention period, while
+only the past month(s) of data are actively accessed through GitLab interface.
+
+Additional use cases may include exporting data to a data warehouse or other types of data stores as
+they may be better suited for processing that type of data. An example can be JSON logs that we
+sometimes store in tables: loading such data into a BigQuery or a columnar store like Redshift may
+be better for analyzing/querying the data.
+
+We might consider a number of strategies for moving data outside of the database:
+
+1. Streaming this type of data into logs and then move them to secondary storage options
+ or load them to other types of data stores directly (as CSV/JSON data).
+1. Creating an ETL process that exports the data to CSV, uploads them to object storage,
+ drops this data from the database, and then loads the CSV into a different data store.
+1. Loading the data in the background by using the API provided by the data store.
+
+This may be a not viable solution for large datasets; as long as bulk uploading using files is an
+option, it should outperform API calls.
+
+## Use cases
+
+### Web hook logs
+
+Related epic: [Partitioning: `web_hook_logs` table](https://gitlab.com/groups/gitlab-org/-/epics/5558)
+
+The important characteristics of `web_hook_logs` are the following:
+
+1. Size of the dataset: it is a really large table. At the moment we decided to
+ partition it (`2021-03-01`), it had roughly 527M records and a total size of roughly 1TB
+
+ - Table: `web_hook_logs`
+ - Rows: approximately 527M
+ - Total size: 1.02 TiB (10.46%)
+ - Table size: 713.02 GiB (13.37%)
+ - Index(es) size: 42.26 GiB (1.10%)
+ - TOAST size: 279.01 GiB (38.56%)
+
+1. Access methods: we always request for the past 7 days of logs at max.
+1. Immutability: it can be partitioned by `created_at`, an attribute that does not change.
+1. Retention: there is a 90 days retention policy set for it.
+
+Additionally, we were at the time trying to prune the data by using a background worker
+(`PruneWebHookLogsWorker`), which could not [keep up with the rate of inserts](https://gitlab.com/gitlab-org/gitlab/-/issues/256088).
+
+As a result, on March 2021 there were still not deleted records since July 2020 and the table was
+increasing in size by more than 2 million records per day instead of staying at a more or less
+stable size.
+
+Finally, the rate of inserts has grown to more than 170GB of data per month by March 2021 and keeps
+on growing, so the only viable solution to pruning old data was through partitioning.
+
+Our approach was to partition the table per month as it aligned with the 90 days retention policy.
+
+The process required follows:
+
+1. Decide on a partitioning key
+
+ Using the `created_at` column is straightforward in this case: it is a natural
+ partitioning key when a retention policy exists and there were no conflicting access patterns.
+
+1. After we decide on the partitioning key, we can create the partitions and backfill
+ them (copy data from the existing table). We can't just partition an existing table;
+ we have to create a new partitioned table.
+
+ So, we have to create the partitioned table and all the related partitions, start copying everything
+ over, and also add sync triggers so that any new data or updates/deletes to existing data can be
+ mirrored to the new partitioned table.
+
+ [MR with all the necessary details on how to start partitioning a table](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/55938)
+
+ It required 15 days and 7.6 hours to complete that process.
+
+1. One milestone after the initial partitioning starts, clean up after the background migration
+ used to backfill and finish executing any remaining jobs, retry failed jobs, etc.
+
+ [MR with all the necessary details](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/57580)
+
+1. Add any remaining foreign keys and secondary indexes to the partitioned table. This brings
+ its schema on par with the original non partitioned table before we can swap them in the next milestone.
+
+ We are not adding them at the beginning as they are adding overhead to each insert and they
+ would slow down the initial backfilling of the table (in this case for more than half a billion
+ records, which can add up significantly). So we create a lightweight, *vanilla* version of the
+ table, copy all the data and then add any remaining indexes and foreign keys.
+
+1. Swap the base table with partitioned copy: this is when the partitioned table
+ starts actively being used by the application.
+
+ Dropping the original table is a destructive operation, and we want to make sure that we had no
+ issues during the process, so we keep the old non-partitioned table. We also switch the sync trigger
+ the other way around so that the non-partitioned table is still up to date with any operations
+ happening on the partitioned table. That allows us to swap back the tables if it is necessary.
+
+ [MR with all the necessary details](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/60184)
+
+1. Last step, one milestone after the swap: drop the non-partitioned table
+
+ [Issue with all the necessary details](https://gitlab.com/gitlab-org/gitlab/-/issues/323678)
+
+1. After the non-partitioned table is dropped, we can add a worker to implement the
+ pruning strategy by dropping past partitions.
+
+ In this case, the worker will make sure that only 4 partitions are always active (as the
+ retention policy is 90 days) and drop any partitions older than four months. We have to keep 4
+ months of partitions while the current month is still active, as going 90 days back takes you to
+ the fourth oldest partition.
+
+### Audit Events
+
+Related epic: [Partitioning: Design and implement partitioning strategy for Audit Events](https://gitlab.com/groups/gitlab-org/-/epics/3206)
+
+The `audit_events` table shares a lot of characteristics with the `web_hook_logs` table discussed
+in the previous sub-section, so we are going to focus on the points they differ.
+
+The consensus was that
+[partitioning could solve most of the performance issues](https://gitlab.com/groups/gitlab-org/-/epics/3206#note_338157248).
+
+In contrast to most other large tables, it has no major conflicting access patterns: we could switch
+the access patterns to align with partitioning by month. This is not the case for example for other
+tables, which even though could justify a partitioning approach (for example, by namespace), they have many
+conflicting access patterns.
+
+In addition, `audit_events` is a write-heavy table with very few reads (queries) over it and has a
+very simple schema, not connected with the rest of the database (no incoming or outgoing FK
+constraints) and with only two indexes defined over it.
+
+The later was important at the time as not having Foreign Key constraints meant that we could
+partition it while we were still in PostgreSQL 11. *This is not a concern any more now that we have
+moved to PostgreSQL 12 as a required default, as can be seen for the `web_hook_logs` use case above.*
+
+The migrations and steps required for partitioning the `audit_events` are similar to
+the ones described in the previous sub-section for `web_hook_logs`. There is no retention
+strategy defined for `audit_events` at the moment, so there is no pruning strategy
+implemented over it, but we may implement an archiving solution in the future.
+
+What's interesting on the case of `audit_events` is the discussion on the necessary steps that we
+had to follow to implement the UI/UX Changes needed to
+[encourage optimal querying of the partitioned](https://gitlab.com/gitlab-org/gitlab/-/issues/223260).
+It can be used as a starting point on the changes required on the application level
+to align all access patterns with a specific time-decay related access method.
+
+### CI tables
+
+NOTE:
+Requirements and analysis of the CI tables use case: still a work in progress. We intend
+to add more details after the analysis moves forward.
diff --git a/doc/architecture/blueprints/database_scaling/size-limits.md b/doc/architecture/blueprints/database_scaling/size-limits.md
new file mode 100644
index 00000000000..d63aa3bd4e8
--- /dev/null
+++ b/doc/architecture/blueprints/database_scaling/size-limits.md
@@ -0,0 +1,176 @@
+---
+comments: false
+description: 'Database Scalability / Limit table sizes'
+group: database
+---
+
+# Database Scalability: Limit on-disk table size to < 100 GB for GitLab.com
+
+This document is a proposal to work towards reducing and limiting table sizes on GitLab.com. We establish a **measurable target** by limiting table size to a certain threshold. This will be used as an indicator to drive database focus and decision making. With GitLab.com growing, we continuously re-evaluate which tables need to be worked on to prevent or otherwise fix violations.
+
+This is not meant to be a hard rule but rather a strong indication that work needs to be done to break a table apart or otherwise reduce its size.
+
+This is meant to be read in context with the [Database Sharding blueprint](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/64115),
+which paints the bigger picture. This proposal here is thought to be part of the "debloating step" below, as we aim to reduce storage requirements and improve data modeling. Partitioning is part of the standard tool-belt: where possible, we can already use partitioning as a solution to cut physical table sizes significantly. Both will help to prepare efforts like decomposition (database usage is already optimized) and sharding (database is already partitioned along an identified data access dimension).
+
+```mermaid
+graph LR
+ Fe(Pick feature) --> D
+ D[(Database)] --> De
+ De[Debloating] --> Dc
+ Dc[Decomposition] --> P
+ P[Partitioning] --> S
+ S[Sharding] --> R
+ P --> M
+ M[Microservices] --> R
+ R{Repeat?} --> Fe
+ style De fill:#fca326
+ style P fill:#fc6d26
+```
+
+## Motivation: GitLab.com stability and performance
+
+Large tables on GitLab.com are a major problem - for both operations and development. They cause a variety of problems:
+
+1. **Query timings** and hence overall application performance suffers
+1. **Table maintenance** becomes much more costly. Vacuum activity has become a significant concern on GitLab.com - with large tables only seeing infrequent (once per day) processing and vacuum runs taking many hours to complete. This has various negative consequences and a very large table has potential to impact seemingly unrelated parts of the database and hence overall application performance suffers.
+1. **Data migrations** on large tables are significantly more complex to implement and incur development overhead. They have potential to cause stability problems on GitLab.com and take a long time to execute on large datasets.
+1. **Indexes size** is significant. This directly impacts performance as smaller parts of the index are kept in memory and also makes the indexes harder to maintain (think repacking).
+1. **Index creation times** go up significantly - in 2021, we see btree creation take up to 6 hours for a single btree index. This impacts our ability to deploy frequently and leads to vacuum-related problems (delayed cleanup).
+1. We tend to add **many indexes** to mitigate, but this eventually causes significant overhead, can confuse the query planner and a large number of indexes is a smell of a design problem.
+
+## Examples
+
+Most prominently, the `ci_builds` table is 1.5 TB in size as of June 2021 and has 31 indexes associated with it which sum up to 1 TB in size. The overall on-disk size for this table is 2.5 TB. Currently, this grows at 300 GB per month. By the end of the year, this is thought to be close to 5 TB if we don't take measures against.
+
+The following examples show that very large tables often constitute the root cause of incidents on GitLab.com.
+
+1. Infrequent and long running vacuum activity has led to [repeated degradation of query performance for CI queuing](https://gitlab.com/gitlab-com/gl-infra/production/-/issues?label_name%5B%5D=Service%3A%3ACI+Runners&label_name%5B%5D=incident&scope=all&search=shared_runner_queues&state=all)
+1. On large tables like `ci_builds`, index creation time varies between 1.5 to 6 hours during busy times. This process blocks deployments as migrations are being run synchronously - reducing our ability to deploy frequently.
+1. Creating a large index can lead to a burst of activity on the database primary:
+ 1. on `merge_request_diff_commits` table: caused [high network saturation](https://gitlab.com/gitlab-com/gl-infra/production/-/issues/4823),
+ 1. regular reindexing activity on the weekend: causes [growing WAL queue](https://gitlab.com/gitlab-com/gl-infra/production/-/issues/4767) (impacts recovery objectives),
+ 1. `notes` table: Re-creating a GIN trigram index for maintenance reasons has become nearly unfeasible and had to be [aborted after 12 hours upon first try](https://gitlab.com/gitlab-com/gl-infra/production/-/issues/4633) as it was blocking other vacuum operation.
+
+## Problematic tables on GitLab.com
+
+This shows the TOP30 tables by their total size (includes index sizes) as of mid June 2021 on GitLab.com. `table_size, index_size` is the on-disk size of the actual data and associated indexes, respectively. `percentage_of_total_database_size` displays the ratio of total table size to database size.
+
+As we can see, there are currently very large tables greater than 1 TB in size, which also tend to have very large indexes.
+
+The other observation here is that there are also tables with a large number of indexes and total index size can be significantly larger than the data stored. For example, `deployments` is 30 GB in size plus additional 123 GB of index data spread across 24 indexes.
+
+<!--
+select tablename,
+ pg_size_pretty(pg_total_relation_size(t.schemaname || '.' || t.tablename)) as total_size,
+ pg_size_pretty(pg_relation_size(t.schemaname || '.' || t.tablename)) as table_size,
+ pg_size_pretty(pg_indexes_size(t.schemaname || '.' || t.tablename)) as index_size,
+ count(*) as index_count,
+ round(pg_total_relation_size(t.schemaname || '.' || t.tablename) / pg_database_size('gitlabhq_production')::numeric * 100, 1) as percentage_of_total_database_size
+from pg_indexes i
+join pg_tables t USING (tablename)
+group by 1,
+ 2,
+ 3,
+ t.schemaname,
+ t.tablename
+order by pg_total_relation_size(t.schemaname || '.' || t.tablename) desc
+limit 30;
+-->
+
+| Table | Total size | Table size | Index size | Index count | Percentage of total database size |
+|------------------------------|------------|------------|------------|-------------|-----------------------------------|
+| `ci_builds` | 2975 GB | 1551 GB | 941 GB | 30 | 22.7 |
+| `merge_request_diff_commits` | 1890 GB | 1454 GB | 414 GB | 2 | 14.4 |
+| `ci_build_trace_sections` | 1123 GB | 542 GB | 581 GB | 3 | 8.6 |
+| `notes` | 748 GB | 390 GB | 332 GB | 13 | 5.7 |
+| `merge_request_diff_files` | 575 GB | 481 GB | 88 GB | 1 | 4.4 |
+| `events` | 441 GB | 95 GB | 346 GB | 12 | 3.4 |
+| `ci_job_artifacts` | 397 GB | 187 GB | 210 GB | 10 | 3.0 |
+| `ci_pipelines` | 266 GB | 66 GB | 200 GB | 23 | 2.0 |
+| `taggings` | 238 GB | 60 GB | 179 GB | 5 | 1.8 |
+| `ci_builds_metadata` | 237 GB | 88 GB | 149 GB | 5 | 1.8 |
+| `issues` | 219 GB | 47 GB | 150 GB | 28 | 1.7 |
+| `web_hook_logs_202103` | 186 GB | 122 GB | 8416 MB | 3 | 1.4 |
+| `ci_stages` | 182 GB | 58 GB | 124 GB | 6 | 1.4 |
+| `web_hook_logs_202105` | 180 GB | 115 GB | 7868 MB | 3 | 1.4 |
+| `merge_requests` | 176 GB | 44 GB | 125 GB | 36 | 1.3 |
+| `web_hook_logs_202104` | 176 GB | 115 GB | 7472 MB | 3 | 1.3 |
+| `web_hook_logs_202101` | 169 GB | 112 GB | 7231 MB | 3 | 1.3 |
+| `web_hook_logs_202102` | 167 GB | 111 GB | 7106 MB | 3 | 1.3 |
+| `sent_notifications` | 166 GB | 88 GB | 79 GB | 3 | 1.3 |
+| `web_hook_logs_202011` | 163 GB | 113 GB | 7125 MB | 3 | 1.2 |
+| `push_event_payloads` | 162 GB | 114 GB | 48 GB | 1 | 1.2 |
+| `web_hook_logs_202012` | 159 GB | 106 GB | 6771 MB | 3 | 1.2 |
+| `web_hook_logs_202106` | 156 GB | 101 GB | 6752 MB | 3 | 1.2 |
+| `deployments` | 155 GB | 30 GB | 125 GB | 24 | 1.2 |
+| `web_hook_logs_202010` | 136 GB | 98 GB | 6116 MB | 3 | 1.0 |
+| `web_hook_logs_202009` | 114 GB | 82 GB | 5168 MB | 3 | 0.9 |
+| `security_findings` | 109 GB | 21 GB | 88 GB | 8 | 0.8 |
+| `web_hook_logs_202008` | 92 GB | 66 GB | 3983 MB | 3 | 0.7 |
+| `resource_label_events` | 66 GB | 47 GB | 19 GB | 6 | 0.5 |
+| `merge_request_diffs` | 63 GB | 39 GB | 22 GB | 5 | 0.5 |
+
+## Target: All physical tables on GitLab.com are < 100 GB including indexes
+
+NOTE:
+In PostgreSQL context, a **physical table** is either a regular table or a partition of a partitioned table.
+
+In order to maintain and improve operational stability and lessen development burden, we target a **table size less than 100 GB for a physical table on GitLab.com** (including its indexes). This has numerous benefits:
+
+1. Improved query performance and more stable query plans
+1. Significantly reduce vacuum run times and increase frequency of vacuum runs to maintain a healthy state - reducing overhead on the database primary
+1. Index creation times are significantly faster (significantly less data to read per index)
+1. Indexes are smaller, can be maintained more efficiently and fit better into memory
+1. Data migrations are easier to reason about, take less time to implement and execute
+
+This target is *pragmatic*: We understand table sizes depend on feature usage, code changes and other factors - which all change over time. We may not always find solutions where we can tightly limit the size of physical tables once and for all. That is acceptable though and we primarily aim to keep the situation on GitLab.com under control. We adapt our efforts to the situation present on GitLab.com and will re-evaluate frequently.
+
+While there are changes we can make that lead to a constant maximum physical table size over time, this doesn't need to be the case necessarily. Consider for example hash partitioniong, which breaks a table down into a static number of partitions. With data growth over time, individual partitions will also grow in size and may eventually reach the threshold size again. We strive to get constant table sizes, but it is acceptable to ship easier solutions that don't have this characteristic but improve the situation for a considerable amount of time.
+
+As such, the target size of a physical table after refactoring depends on the situation and there is no hard rule for it. We suggest to consider historic data growth and forecast when physical tables will reach the threshold of 100 GB again. This allows us to understand how long a particular solution is expected to last until the model has to be revisited.
+
+## Solutions
+
+There is no standard solution to reduce table sizes - there are many!
+
+1. **Retention**: Delete unnecessary data, for example expire old and unneeded records.
+1. **Remove STI**: We still use [single-table inheritance](../../../development/single_table_inheritance.md) in a few places, which is considered an anti-pattern. Redesigning this, we can split data into multiple tables.
+1. **Index optimization**: Drop unnecessary indexes and consolidate overlapping indexes if possible.
+1. **Optimise data types**: Review data type decisions and optimise data types where possible (example: use integer instead of text for an enum column)
+1. **Partitioning**: Apply a partitioning scheme if there is a common access dimension.
+1. **Normalization**: Review relational modeling and apply normalization techniques to remove duplicate data
+1. **Vertical table splits**: Review column usage and split table vertically.
+1. **Externalize**: Move large data types out of the database entirely. For example, JSON documents, especially when not used for filtering, may be better stored outside the database, for example, in object storage.
+
+NOTE:
+While we're targeting to limit physical table sizes, we consider retaining or improving performance a goal, too.
+
+For solutions like normalization, this is a trade-off: Denormalized models can speed up queries when used appropriately, at the expense of table size. When normalizing models, splitting tables or externalizing data, we aim to understand the impact on performance and strive to find a solution to reduce table sizes that doesn't impact performance significantly.
+
+### Example efforts
+
+A few examples can be found below, many more are organized under the epic [Database efficiency](https://gitlab.com/groups/gitlab-org/-/epics/5585).
+
+1. [Reduce number of indexes on `ci_builds`](https://gitlab.com/groups/gitlab-org/-/epics/6203)
+1. [Normalize and de-duplicate committer and author details in merge_request_diff_commits](https://gitlab.com/gitlab-org/gitlab/-/issues/331823)
+1. [Retention strategy for `ci_build_trace_sections`](https://gitlab.com/gitlab-org/gitlab/-/issues/32565#note_603138100)
+1. [Implement worker that hard-deletes old CI jobs metadata](https://gitlab.com/gitlab-org/gitlab/-/issues/215646)
+1. [merge_request_diff_files violates < 100 GB target](https://gitlab.com/groups/gitlab-org/-/epics/6215) (epic)
+
+## Goal
+
+The [epic for `~group::database`](https://gitlab.com/groups/gitlab-org/-/epics/6211) drives decision making to establish and communicate the target and to identify and propose necessary changes to reach it. Those changes should primarily be driven by the respective stage group owning the data (and the feature using it), with `~group::database` to support.
+
+## Who
+
+<!-- vale gitlab.Spelling = NO -->
+
+Identifying solutions for offending tables is driven by the [GitLab Database Team](https://about.gitlab.com/handbook/engineering/development/enablement/database/) and respective stage groups.
+
+| Role | Who
+|------------------------------|-------------------------|
+| Author | Andreas Brandl |
+| Engineering Leader | Craig Gomes |
+
+<!-- vale gitlab.Spelling = YES -->
diff --git a/doc/architecture/blueprints/database_testing/index.md b/doc/architecture/blueprints/database_testing/index.md
index fb52f6cc7d3..38629e7348d 100644
--- a/doc/architecture/blueprints/database_testing/index.md
+++ b/doc/architecture/blueprints/database_testing/index.md
@@ -64,7 +64,7 @@ We already use Database Lab from [postgres.ai](https://postgres.ai/), which is a
Internally, this is based on ZFS and implements a "thin-cloning technology". That is, ZFS snapshots are being used to clone the data and it exposes a full read/write PostgreSQL cluster based on the cloned data. This is called a *thin clone*. It is rather short lived and is going to be destroyed again shortly after we are finished using it.
-It is important to note that a thin clone is fully read/write. This allows us to execute migrations on top of it.
+A thin clone is fully read/write. This allows us to execute migrations on top of it.
Database Lab provides an API we can interact with to manage thin clones. In order to automate the migration and query testing, we add steps to the `gitlab/gitlab-org` CI pipeline. This triggers automation that performs the following steps for a given merge request:
diff --git a/doc/ci/README.md b/doc/ci/README.md
index 5ab8653dc35..0e6c2f63f9e 100644
--- a/doc/ci/README.md
+++ b/doc/ci/README.md
@@ -1,5 +1,6 @@
---
redirect_to: 'index.md'
+remove_date: '2021-09-28'
---
This document was moved to [another location](index.md).
diff --git a/doc/ci/caching/index.md b/doc/ci/caching/index.md
index 0ed1e978168..87c7af2030d 100644
--- a/doc/ci/caching/index.md
+++ b/doc/ci/caching/index.md
@@ -128,7 +128,7 @@ To disable it completely for a job, use an empty hash:
```yaml
job:
- cache: {}
+ cache: []
```
## Inherit global configuration, but override specific settings per job
diff --git a/doc/ci/chatops/index.md b/doc/ci/chatops/index.md
index 03a1005c9bc..a461147661c 100644
--- a/doc/ci/chatops/index.md
+++ b/doc/ci/chatops/index.md
@@ -49,7 +49,7 @@ If a job shouldn't be able to be triggered from chat, you can set the job to `ex
Since ChatOps is built upon GitLab CI/CD, the job has all the same features and
functions available. Consider these best practices when creating ChatOps jobs:
-- GitLab strongly recommends you set `only: [chat]` so the job does not run as part
+- GitLab strongly recommends you set [`rules`](../yaml/index.md#rules) so the job does not run as part
of the standard CI pipeline.
- If the job is set to `when: manual`, ChatOps creates the pipeline, but the job waits to be started.
- ChatOps provides limited support for access control. If the user triggering the
@@ -65,9 +65,13 @@ The output for jobs with a single command is sent to the channel as a reply. For
example, the chat reply of the following job is `Hello World` in the channel:
```yaml
+stages:
+- chatops
+
hello-world:
stage: chatops
- only: [chat]
+ rules:
+ - if: '$CI_PIPELINE_SOURCE == "chat"'
script:
- echo "Hello World"
```
@@ -81,9 +85,13 @@ the `chat_reply` section. For example, the following job lists the files in the
current directory:
```yaml
+stages:
+- chatops
+
ls:
stage: chatops
- only: [chat]
+ rules:
+ - if: '$CI_PIPELINE_SOURCE == "chat"'
script:
- echo "This command will not be shown."
- echo -e "section_start:$( date +%s ):chat_reply\r\033[0K\n$( ls -la )\nsection_end:$( date +%s ):chat_reply\r\033[0K"
diff --git a/doc/ci/ci_cd_for_external_repos/bitbucket_integration.md b/doc/ci/ci_cd_for_external_repos/bitbucket_integration.md
index 7eaafcf21bb..e69daf6651a 100644
--- a/doc/ci/ci_cd_for_external_repos/bitbucket_integration.md
+++ b/doc/ci/ci_cd_for_external_repos/bitbucket_integration.md
@@ -14,15 +14,16 @@ GitLab CI/CD can be used with Bitbucket Cloud by:
To use GitLab CI/CD with a Bitbucket Cloud repository:
-1. <!-- vale gitlab.Spelling = NO --> In GitLab create a **CI/CD for external repository**, select
- **Repo by URL** and create the project.
- <!-- vale gitlab.Spelling = YES -->
+1. In GitLab, create a project:
+ 1. On the top menu, select **Projects > Create new project**.
+ 1. Select **Run CI/CD for external repository**.
+ 1. Select **Repo by URL**.
![Create project](img/external_repository.png)
GitLab imports the repository and enables [Pull Mirroring](../../user/project/repository/repository_mirroring.md#pull-from-a-remote-repository).
-1. In GitLab create a
+1. In GitLab, create a
[Personal Access Token](../../user/profile/personal_access_tokens.md)
with `api` scope. This is used to authenticate requests from the web
hook that is created in Bitbucket to notify GitLab of new commits.
@@ -120,7 +121,7 @@ To use GitLab CI/CD with a Bitbucket Cloud repository:
\"$BITBUCKET_DESCRIPTION\",\"url\": \"$CI_PROJECT_URL/-/jobs/$CI_JOB_ID\" }"
```
-1. Still in Bitbucket, create a `.gitlab-ci.yml` file to use the script to push
+1. In Bitbucket, create a `.gitlab-ci.yml` file to use the script to push
pipeline success and failures to Bitbucket.
```yaml
diff --git a/doc/ci/ci_cd_for_external_repos/github_integration.md b/doc/ci/ci_cd_for_external_repos/github_integration.md
index 7a79794f322..60a939496d6 100644
--- a/doc/ci/ci_cd_for_external_repos/github_integration.md
+++ b/doc/ci/ci_cd_for_external_repos/github_integration.md
@@ -27,27 +27,26 @@ repositories to GitLab, and the GitHub user must have the [owner role](https://d
To perform a one-off authorization with GitHub to grant GitLab access your
repositories:
-1. Open <https://github.com/settings/tokens/new> to create a **Personal Access
- Token**. This token is used to access your repository and push commit
- statuses to GitHub.
-
- The `repo` and `admin:repo_hook` should be enable to allow GitLab access to
- your project, update commit statuses, and create a web hook to notify
- GitLab of new commits.
-
-1. In GitLab, go to the [new project page](../../user/project/working_with_projects.md#create-a-project), select the **CI/CD for external repository** tab, and then click
- **GitHub**.
-
-1. Paste the token into the **Personal access token** field and click **List
- Repositories**. Click **Connect** to select the repository.
-
+1. In GitHub, create a token:
+ 1. Open <https://github.com/settings/tokens/new>.
+ 1. Create a **Personal Access Token**.
+ 1. Enter a **Token description** and update the scope to allow
+ `repo` and `admin:repo_hook` so that GitLab can access your project,
+ update commit statuses, and create a web hook to notify GitLab of new commits.
+1. In GitLab, create a project:
+ 1. On the top menu, select **Projects > Create new project**.
+ 1. Select **Run CI/CD for external repository**.
+ 1. Select **GitHub**.
+ 1. For **Personal access token**, paste the token.
+ 1. Select **List Repositories**.
+ 1. Select **Connect** to select the repository.
1. In GitHub, add a `.gitlab-ci.yml` to [configure GitLab CI/CD](../quick_start/index.md).
GitLab:
1. Imports the project.
-1. Enables [Pull Mirroring](../../user/project/repository/repository_mirroring.md#pull-from-a-remote-repository)
-1. Enables [GitHub project integration](../../user/project/integrations/github.md)
+1. Enables [Pull Mirroring](../../user/project/repository/repository_mirroring.md#pull-from-a-remote-repository).
+1. Enables [GitHub project integration](../../user/project/integrations/github.md).
1. Creates a web hook on GitHub to notify GitLab of new commits.
## Connect manually
@@ -56,30 +55,25 @@ To use **GitHub Enterprise** with **GitLab.com**, use this method.
To manually enable GitLab CI/CD for your repository:
-1. In GitHub open <https://github.com/settings/tokens/new> create a **Personal
- Access Token.** GitLab uses this token to access your repository and
- push commit statuses.
-
- Enter a **Token description** and update the scope to allow:
-
- `repo` so that GitLab can access your project and update commit statuses
-
-1. In GitLab create a **CI/CD project** using the Git URL option and the HTTPS
- URL for your GitHub repository. If your project is private, use the personal
- access token you just created for authentication.
-
- GitLab automatically configures polling-based pull mirroring.
-
-1. Still in GitLab, enable the [GitHub project integration](../../user/project/integrations/github.md)
- from **Settings > Integrations.**
-
- Check the **Active** checkbox to enable the integration, paste your
- personal access token and HTTPS repository URL into the form, and **Save.**
-
-1. Still in GitLab create a **Personal Access Token** with `API` scope to
+1. In GitHub, create a token:
+ 1. Open <https://github.com/settings/tokens/new>.
+ 1. Create a **Personal Access Token**.
+ 1. Enter a **Token description** and update the scope to allow
+ `repo` so that GitLab can access your project and update commit statuses.
+1. In GitLab, create a project:
+ 1. On the top menu, select **Projects > Create new project**.
+ 1. Select **Run CI/CD for external repository** and **Repo by URL**.
+ 1. In the **Git repository URL** field, enter the HTTPS URL for your GitHub repository.
+ If your project is private, use the personal access token you just created for authentication.
+ 1. Fill in all the other fields and select **Create project**.
+ GitLab automatically configures polling-based pull mirroring.
+1. In GitLab, enable [GitHub project integration](../../user/project/integrations/github.md):
+ 1. On the left sidebar, select **Settings > Integrations**.
+ 1. Select the **Active** checkbox.
+ 1. Paste your personal access token and HTTPS repository URL into the form and select **Save**.
+1. In GitLab, create a **Personal Access Token** with `API` scope to
authenticate the GitHub web hook notifying GitLab of new commits.
-
-1. In GitHub from **Settings > Webhooks** create a web hook to notify GitLab of
+1. In GitHub, from **Settings > Webhooks**, create a web hook to notify GitLab of
new commits.
The web hook URL should be set to the GitLab API to
@@ -92,7 +86,7 @@ To manually enable GitLab CI/CD for your repository:
Select the **Let me select individual events** option, then check the **Pull requests** and **Pushes** checkboxes. These settings are needed for [pipelines for external pull requests](index.md#pipelines-for-external-pull-requests).
-1. In GitHub add a `.gitlab-ci.yml` to configure GitLab CI/CD.
+1. In GitHub, add a `.gitlab-ci.yml` to configure GitLab CI/CD.
<!-- ## Troubleshooting
diff --git a/doc/ci/ci_cd_for_external_repos/index.md b/doc/ci/ci_cd_for_external_repos/index.md
index 8c961ea6128..27c808791e5 100644
--- a/doc/ci/ci_cd_for_external_repos/index.md
+++ b/doc/ci/ci_cd_for_external_repos/index.md
@@ -27,10 +27,10 @@ To connect to an external repository:
<!-- vale gitlab.Spelling = NO -->
-1. From your GitLab dashboard, click **New project**.
-1. Switch to the **CI/CD for external repository** tab.
-1. Choose **GitHub** or **Repo by URL**.
-1. The next steps are similar to the [import flow](../../user/project/import/index.md).
+1. On the top menu, select **Projects > Create new project**.
+1. Select **Run CI/CD for external repository**.
+1. Select **GitHub** or **Repo by URL**.
+1. Complete the fields.
<!-- vale gitlab.Spelling = YES -->
diff --git a/doc/ci/cloud_deployment/index.md b/doc/ci/cloud_deployment/index.md
index c14d94fcd61..a4b4fd9fd16 100644
--- a/doc/ci/cloud_deployment/index.md
+++ b/doc/ci/cloud_deployment/index.md
@@ -5,7 +5,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
type: howto
---
-# Cloud deployment
+# Cloud deployment **(FREE)**
Interacting with a major cloud provider may have become a much needed task that's
part of your delivery process. With GitLab you can
diff --git a/doc/ci/docker/using_kaniko.md b/doc/ci/docker/using_kaniko.md
index 108d4e0dcad..6886899a54b 100644
--- a/doc/ci/docker/using_kaniko.md
+++ b/doc/ci/docker/using_kaniko.md
@@ -64,7 +64,7 @@ build:
entrypoint: [""]
script:
- mkdir -p /kaniko/.docker
- - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
+ - echo "{\"auths\":{\"$CI_REGISTRY\":{\"auth\":\"$(echo -n ${CI_REGISTRY_USER}:${CI_REGISTRY_PASSWORD} | base64)\"}}}" > /kaniko/.docker/config.json
- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG
rules:
- if: $CI_COMMIT_TAG
@@ -91,7 +91,7 @@ build:
- mkdir -p /kaniko/.docker
- |-
KANIKOPROXYBUILDARGS=""
- KANIKOCFG="{ \"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}"
+ KANIKOCFG="{\"auths\":{\"$CI_REGISTRY\":{\"auth\":\"$(echo -n ${CI_REGISTRY_USER}:${CI_REGISTRY_PASSWORD} | base64)\"}}}"
if [ "x${http_proxy}" != "x" -o "x${https_proxy}" != "x" ]; then
KANIKOCFG="${KANIKOCFG}, \"proxies\": { \"default\": { \"httpProxy\": \"${http_proxy}\", \"httpsProxy\": \"${https_proxy}\", \"noProxy\": \"${no_proxy}\"}}"
KANIKOPROXYBUILDARGS="--build-arg http_proxy=${http_proxy} --build-arg https_proxy=${https_proxy} --build-arg no_proxy=${no_proxy}"
@@ -120,7 +120,7 @@ store:
```yaml
before_script:
- mkdir -p /kaniko/.docker
- - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
+ - echo "{\"auths\":{\"$CI_REGISTRY\":{\"auth\":\"$(echo -n ${CI_REGISTRY_USER}:${CI_REGISTRY_PASSWORD} | base64)\"}}}" > /kaniko/.docker/config.json
- |
echo "-----BEGIN CERTIFICATE-----
...
diff --git a/doc/ci/enable_or_disable_ci.md b/doc/ci/enable_or_disable_ci.md
index 341727f0f5d..421bca9e324 100644
--- a/doc/ci/enable_or_disable_ci.md
+++ b/doc/ci/enable_or_disable_ci.md
@@ -19,7 +19,7 @@ If you are using an external CI/CD server like Jenkins or Drone CI, it is advise
to disable GitLab CI/CD in order to not have any conflicts with the commits status
API.
-GitLab CI/CD is exposed via the `/pipelines` and `/jobs` pages of a project.
+GitLab CI/CD is exposed by using the `/pipelines` and `/jobs` pages of a project.
Disabling GitLab CI/CD in a project does not delete any previous jobs.
In fact, the `/pipelines` and `/jobs` pages can still be accessed, although
it's hidden from the left sidebar menu.
@@ -36,62 +36,68 @@ pipelines that are run from an [external integration](../user/project/integratio
## Per-project user setting
-To enable or disable GitLab CI/CD Pipelines in your project:
+To enable or disable GitLab CI/CD pipelines in your project:
-1. Navigate to **Settings > General > Visibility, project features, permissions**.
-1. Expand the **Repository** section
-1. Enable or disable the **Pipelines** toggle as required.
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Settings > General**.
+1. Expand **Visibility, project features, permissions**.
+1. In the **Repository** section, turn on or off **CI/CD** as required.
**Project visibility** also affects pipeline visibility. If set to:
- **Private**: Only project members can access pipelines.
- **Internal** or **Public**: Pipelines can be set to either **Only Project Members**
- or **Everyone With Access** via the dropdown box.
+ or **Everyone With Access** by using the dropdown box.
Press **Save changes** for the settings to take effect.
-## Site-wide admin setting
+## Make GitLab CI/CD disabled by default in new projects
-You can disable GitLab CI/CD site-wide, by modifying the settings in `gitlab.yml`
-for source installations, and `gitlab.rb` for Omnibus installations.
+You can set GitLab CI/CD to be disabled by default in all new projects by modifying the settings in:
-Two things to note:
+- `gitlab.yml` for source installations.
+- `gitlab.rb` for Omnibus GitLab installations.
-- Disabling GitLab CI/CD affects only newly-created projects. Projects that
- had it enabled prior to this modification work as before.
-- Even if you disable GitLab CI/CD, users can still enable it in the
- project's settings.
+Existing projects that already had CI/CD enabled are unchanged. Also, this setting only changes
+the project default, so project owners can still enable CI/CD in the project settings.
-For installations from source, open `gitlab.yml` with your editor and set
-`builds` to `false`:
+For installations from source:
-```yaml
-## Default project features settings
-default_projects_features:
- issues: true
- merge_requests: true
- wiki: true
- snippets: false
- builds: false
-```
+1. Open `gitlab.yml` with your editor and set `builds` to `false`:
-Save the file and restart GitLab:
+ ```yaml
+ ## Default project features settings
+ default_projects_features:
+ issues: true
+ merge_requests: true
+ wiki: true
+ snippets: false
+ builds: false
+ ```
-```shell
-sudo service gitlab restart
-```
+1. Save the `gitlab.yml` file.
-For Omnibus installations, edit `/etc/gitlab/gitlab.rb` and add the line:
+1. Restart GitLab:
-```ruby
-gitlab_rails['gitlab_default_projects_features_builds'] = false
-```
+ ```shell
+ sudo service gitlab restart
+ ```
-Save the file and reconfigure GitLab:
+For Omnibus GitLab installations:
-```shell
-sudo gitlab-ctl reconfigure
-```
+1. Edit `/etc/gitlab/gitlab.rb` and add this line:
+
+ ```ruby
+ gitlab_rails['gitlab_default_projects_features_builds'] = false
+ ```
+
+1. Save the `/etc/gitlab/gitlab.rb` file.
+
+1. Reconfigure GitLab:
+
+ ```shell
+ sudo gitlab-ctl reconfigure
+ ```
<!-- ## Troubleshooting
diff --git a/doc/ci/environments/deployment_safety.md b/doc/ci/environments/deployment_safety.md
index 033e499d3d0..4e34cc7ce38 100644
--- a/doc/ci/environments/deployment_safety.md
+++ b/doc/ci/environments/deployment_safety.md
@@ -4,7 +4,7 @@ group: Release
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
-# Deployment safety
+# Deployment safety **(FREE)**
Deployment jobs can be more sensitive than other jobs in a pipeline,
and might need to be treated with extra care. GitLab has several features
diff --git a/doc/ci/environments/incremental_rollouts.md b/doc/ci/environments/incremental_rollouts.md
index 39e3dd1ca75..e473d52f957 100644
--- a/doc/ci/environments/incremental_rollouts.md
+++ b/doc/ci/environments/incremental_rollouts.md
@@ -5,7 +5,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
type: concepts, howto
---
-# Incremental Rollouts with GitLab CI/CD
+# Incremental rollouts with GitLab CI/CD **(FREE)**
When rolling out changes to your application, it is possible to release production changes
to only a portion of your Kubernetes pods as a risk mitigation strategy. By releasing
@@ -22,9 +22,9 @@ Manual and Timed rollouts are included automatically in projects controlled by
[Auto DevOps](../../topics/autodevops/index.md), but they are also configurable through
GitLab CI/CD in the `.gitlab-ci.yml` configuration file.
-Manually triggered rollouts can be implemented with your [Continuously Delivery](../introduction/index.md#continuous-delivery)
+Manually triggered rollouts can be implemented with your [Continuous Delivery](../introduction/index.md#continuous-delivery)
methodology, while timed rollouts do not require intervention and can be part of your
-[Continuously Deployment](../introduction/index.md#continuous-deployment) strategy.
+[Continuous Deployment](../introduction/index.md#continuous-deployment) strategy.
You can also combine both of them in a way that the app is deployed automatically
unless you eventually intervene manually if necessary.
@@ -37,8 +37,6 @@ use as examples to build your own:
## Manual Rollouts
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/5415) in GitLab 10.8.
-
It is possible to configure GitLab to do incremental rollouts manually through `.gitlab-ci.yml`. Manual configuration
allows more control over the this feature. The steps in an incremental rollout depend on the
number of pods that are defined for the deployment, which are configured when the Kubernetes
@@ -77,8 +75,6 @@ available, demonstrating manually triggered incremental rollouts.
## Timed Rollouts
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/7545) in GitLab 11.4.
-
Timed rollouts behave in the same way as manual rollouts, except that each job is defined with a
delay in minutes before it deploys. Clicking the job reveals the countdown.
diff --git a/doc/ci/environments/index.md b/doc/ci/environments/index.md
index e647a704a87..1b4d8890c6e 100644
--- a/doc/ci/environments/index.md
+++ b/doc/ci/environments/index.md
@@ -31,7 +31,8 @@ Prerequisites:
To view a list of environments and deployments:
-1. Go to the project's **Deployments > Environments** page.
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Deployments > Environments**.
The environments are displayed.
![Environments list](img/environments_list.png)
@@ -57,7 +58,8 @@ You can create an environment and deployment in the UI or in your `.gitlab-ci.ym
In the UI:
-1. Go to the project's **Deployments > Environments** page.
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Deployments > Environments**.
1. Select **New environment**.
1. Enter a name and external URL.
1. Select **Save**.
@@ -326,7 +328,8 @@ If there is a problem with a deployment, you can retry it or roll it back.
To retry or rollback a deployment:
-1. Go to the project's **Deployments > Environments**.
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Deployments > Environments**.
1. Select the environment.
1. To the right of the deployment name:
- To retry a deployment, select **Re-deploy to environment**.
@@ -353,12 +356,12 @@ For example:
![Environment URLs in merge request](../img/environments_link_url_mr.png)
-#### Going from source files to public pages
+#### Go from source files to public pages
With GitLab [Route Maps](../review_apps/index.md#route-maps), you can go directly
from source files to public pages in the environment set for Review Apps.
-### Stopping an environment
+### Stop an environment
When you stop an environment:
@@ -465,7 +468,8 @@ GitLab automatically triggers the `stop_review_app` job to stop the environment.
You can view a deployment's expiration date in the GitLab UI.
-1. Go to the project's **Deployments > Environments** page.
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Deployments > Environments**.
1. Select the name of the deployment.
In the top left, next to the environment name, the expiration date is displayed.
@@ -474,7 +478,8 @@ In the top left, next to the environment name, the expiration date is displayed.
You can manually override a deployment's expiration date.
-1. Go to the project's **Deployments > Environments** page.
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Deployments > Environments**.
1. Select the deployment name.
1. On the top right, select the thumbtack (**{thumbtack}**).
@@ -486,12 +491,13 @@ The `auto_stop_in` setting is overwritten and the environment remains active unt
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/20620) in GitLab 12.10.
-You can delete [stopped environments](#stopping-an-environment) in the GitLab UI or by using
+You can delete [stopped environments](#stop-an-environment) in the GitLab UI or by using
[the API](../../api/environments.md#delete-an-environment).
To delete a stopped environment in the GitLab UI:
-1. Go to the project's **Deployments > Environments** page.
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Deployments > Environments**.
1. Select the **Stopped** tab.
1. Next to the environment you want to delete, select **Delete environment**.
1. On the confirmation dialog box, select **Delete environment**.
@@ -519,7 +525,7 @@ build:
url: https://staging.example.com
```
-This gives you access to [environment-scoped variables](#scoping-environments-with-specs),
+This gives you access to [environment-scoped variables](#scope-environments-with-specs),
and can be used to [protect builds from unauthorized access](protected_environments.md).
### Group similar environments
@@ -596,11 +602,13 @@ Limitations of GitLab Auto Rollback:
GitLab Auto Rollback is turned off by default. To turn it on:
-1. Go to **Project > Settings > CI/CD > Automatic deployment rollbacks**.
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Settings > CI/CD**.
+1. Expand **Automatic deployment rollbacks**.
1. Select the checkbox for **Enable automatic rollbacks**.
1. Select **Save changes**.
-### Monitoring environments
+### Monitor environments
To monitor the behavior of your app as it runs in each environment,
enable [Prometheus for monitoring system and response metrics](../../user/project/integrations/prometheus.md).
@@ -619,7 +627,7 @@ It may take a minute or two for data to appear after initial deployment.
![Monitoring dashboard](../img/environments_monitoring.png)
-#### Embedding metrics in GitLab Flavored Markdown
+#### Embed metrics in GitLab Flavored Markdown
Metric charts can be embedded in GitLab Flavored Markdown. See [Embedding Metrics in GitLab Flavored Markdown](../../operations/metrics/embed.md) for more details.
@@ -672,7 +680,7 @@ fetch line:
fetch = +refs/environments/*:refs/remotes/origin/environments/*
```
-### Scoping environments with specs
+### Scope environments with specs
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/2112) in [GitLab Premium](https://about.gitlab.com/pricing/) 9.4.
> - [Environment scoping for CI/CD variables was moved to all tiers](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/30779) in GitLab 12.2.
diff --git a/doc/ci/environments/protected_environments.md b/doc/ci/environments/protected_environments.md
index 9bc3c97837c..3cd4ebdbdf1 100644
--- a/doc/ci/environments/protected_environments.md
+++ b/doc/ci/environments/protected_environments.md
@@ -30,18 +30,19 @@ To protect, update, or unprotect an environment, you need to have at least the
To protect an environment:
-1. Navigate to your project's **Settings > CI/CD**.
-1. Expand the **Protected environments** section.
-1. From the **Environment** dropdown menu, select the environment you want to protect.
-1. In the **Allowed to Deploy** dropdown menu, select the role, users, or groups you
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Settings > CI/CD**.
+1. Expand **Protected environments**.
+1. From the **Environment** list, select the environment you want to protect.
+1. In the **Allowed to deploy** list, select the role, users, or groups you
want to give deploy access to. Keep in mind that:
- There are two roles to choose from:
- - **Maintainers**: Allows access to all maintainers in the project.
- - **Developers**: Allows access to all maintainers and all developers in the project.
- - You can only select groups that are already associated with the project.
- - Only users that have at least the Developer role appear in
- the **Allowed to Deploy** dropdown menu.
-1. Click the **Protect** button.
+ - **Maintainers**: Allows access to all of the project's users with the Maintainer role.
+ - **Developers**: Allows access to all of the project's users with the Maintainer and Developer role.
+ - You can select groups that are already associated with the project only.
+ - Users must have at least the Developer role to appear in
+ the **Allowed to deploy** list.
+1. Select **Protect**.
The protected environment now appears in the list of protected environments.
@@ -121,7 +122,7 @@ access to a protected environment through any of these methods:
If the user also has push or merge access to the branch deployed on production,
they have the following privileges:
-- [Stopping an environment](index.md#stopping-an-environment).
+- [Stop an environment](index.md#stop-an-environment).
- [Delete a stopped environment](index.md#delete-a-stopped-environment).
- [Create an environment terminal](index.md#web-terminals).
@@ -134,10 +135,10 @@ appears in the dropdown menu for deployment-only access.
To add deployment-only access:
-1. Add a group with Reporter permissions.
-1. Add user(s) to the group.
+1. Add a group with the Reporter role.
+1. Add users to the group.
1. Invite the group to be a project member.
-1. Follow the steps outlined in [Protecting Environments](#protecting-environments).
+1. Follow the steps in [Protecting Environments](#protecting-environments).
Note that deployment-only access is the only possible access level for groups with [Reporter permissions](../../user/permissions.md).
@@ -163,7 +164,7 @@ For more information, see [Deployment safety](deployment_safety.md).
> - To use in GitLab self-managed instances, ask a GitLab administrator to [enable it](#enable-or-disable-group-level-protected-environments). **(FREE SELF)**
This in-development feature might not be available for your use. There can be
-[risks when enabling features still in development](../../user/feature_flags.md#risks-when-enabling-features-still-in-development).
+[risks when enabling features still in development](../../administration/feature_flags.md#risks-when-enabling-features-still-in-development).
Refer to this feature's version history for more details.
Typically, large enterprise organizations have an explicit permission boundary
@@ -214,7 +215,7 @@ configured:
- Operators should be assigned the [maintainer role](../../user/permissions.md)
(or above) to the top-level group. They can maintain CI/CD configurations for
the higher environments (such as production) in the group-level settings page,
- wnich includes group-level protected environments,
+ which includes group-level protected environments,
[group-level runners](../runners/runners_scope.md#group-runners),
[group-level clusters](../../user/group/clusters/index.md), etc. Those
configurations are inherited to the child projects as read-only entries.
@@ -231,9 +232,9 @@ configured:
cannot override it.
- [Project-level protected environments](#protecting-environments) can be
combined with the group-level setting. If both group-level and project-level
- environment configurations exist, the user must be allowed in **both**
- rulesets in order to run a deployment job.
- - Within a project or a sub-group of the top-level group, developers can be
+ environment configurations exist, to run a deployment job, the user must be allowed in **both**
+ rulesets.
+ - In a project or a subgroup of the top-level group, developers can be
safely assigned the Maintainer role to tune their lower environments (such
as `testing`).
diff --git a/doc/ci/examples/README.md b/doc/ci/examples/README.md
index 5ab8653dc35..0e6c2f63f9e 100644
--- a/doc/ci/examples/README.md
+++ b/doc/ci/examples/README.md
@@ -1,5 +1,6 @@
---
redirect_to: 'index.md'
+remove_date: '2021-09-28'
---
This document was moved to [another location](index.md).
diff --git a/doc/ci/examples/authenticating-with-hashicorp-vault/index.md b/doc/ci/examples/authenticating-with-hashicorp-vault/index.md
index 65fe9fb44d4..238c76b2c3c 100644
--- a/doc/ci/examples/authenticating-with-hashicorp-vault/index.md
+++ b/doc/ci/examples/authenticating-with-hashicorp-vault/index.md
@@ -5,7 +5,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
type: tutorial
---
-# Authenticating and Reading Secrets With HashiCorp Vault
+# Authenticating and reading secrets with HashiCorp Vault **(PREMIUM)**
This tutorial demonstrates how to authenticate, configure, and read secrets with HashiCorp's Vault from GitLab CI/CD.
@@ -193,7 +193,7 @@ Combined with [protected branches](../../../user/project/protected_branches.md),
For the full list of options, see Vault's [Create Role documentation](https://www.vaultproject.io/api/auth/jwt#create-role).
WARNING:
-Always restrict your roles to project or namespace by using one of the provided claims (e.g. `project_id` or `namespace_id`). Otherwise any JWT generated by this instance may be allowed to authenticate using this role.
+Always restrict your roles to project or namespace by using one of the provided claims (for example, `project_id` or `namespace_id`). Otherwise any JWT generated by this instance may be allowed to authenticate using this role.
Now, configure the JWT Authentication method:
diff --git a/doc/ci/examples/deployment/README.md b/doc/ci/examples/deployment/README.md
index 5ab8653dc35..0e6c2f63f9e 100644
--- a/doc/ci/examples/deployment/README.md
+++ b/doc/ci/examples/deployment/README.md
@@ -1,5 +1,6 @@
---
redirect_to: 'index.md'
+remove_date: '2021-09-28'
---
This document was moved to [another location](index.md).
diff --git a/doc/ci/examples/deployment/composer-npm-deploy.md b/doc/ci/examples/deployment/composer-npm-deploy.md
index 62607320410..6817c7cac8e 100644
--- a/doc/ci/examples/deployment/composer-npm-deploy.md
+++ b/doc/ci/examples/deployment/composer-npm-deploy.md
@@ -5,7 +5,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
type: tutorial
---
-# Running Composer and npm scripts with deployment via SCP in GitLab CI/CD
+# Running Composer and npm scripts with deployment via SCP in GitLab CI/CD **(FREE)**
This guide covers the building of dependencies of a PHP project while compiling assets via an npm script using [GitLab CI/CD](../../README.md).
@@ -123,7 +123,7 @@ Therefore, for a production environment we use additional steps to ensure that a
Since this was a WordPress project, I gave real life code snippets. Some further ideas you can pursue:
- Having a slightly different script for the default branch allows you to deploy to a production server from that branch and to a stage server from any other branches.
-- Instead of pushing it live, you can push it to WordPress official repository (with creating a SVN commit, etc.).
+- Instead of pushing it live, you can push it to WordPress official repository.
- You could generate i18n text domains on the fly.
---
diff --git a/doc/ci/examples/deployment/index.md b/doc/ci/examples/deployment/index.md
index 00c613865a3..14fb77dc49f 100644
--- a/doc/ci/examples/deployment/index.md
+++ b/doc/ci/examples/deployment/index.md
@@ -5,7 +5,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
type: tutorial
---
-# Using Dpl as deployment tool
+# Using Dpl as a deployment tool **(FREE)**
[Dpl](https://github.com/travis-ci/dpl) (pronounced like the letters D-P-L) is a deploy tool made for
continuous deployment that's developed and used by Travis CI, but can also be
@@ -105,27 +105,31 @@ production:
We created two deploy jobs that are executed on different events:
-1. `staging` is executed for all commits that were pushed to `master` branch,
-1. `production` is executed for all pushed tags.
+- `staging`: Executed for all commits pushed to the `master` branch
+- `production`: Executed for all pushed tags
We also use two secure variables:
-1. `HEROKU_STAGING_API_KEY` - Heroku API key used to deploy staging app,
-1. `HEROKU_PRODUCTION_API_KEY` - Heroku API key used to deploy production app.
+- `HEROKU_STAGING_API_KEY`: Heroku API key used to deploy staging app
+- `HEROKU_PRODUCTION_API_KEY`: Heroku API key used to deploy production app
## Storing API keys
-To add secure variables, navigate to your project's
-**Settings > CI/CD > Variables**. The variables that are defined
-in the project settings are sent along with the build script to the runner.
+To store API keys as secure variables:
+
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Settings > CI/CD**.
+1. Expand **Variables**.
+
+The variables defined in the project settings are sent along with the build script to the runner.
The secure variables are stored out of the repository. Never store secrets in
-your project's `.gitlab-ci.yml`. It is also important that the secret's value
+your project's `.gitlab-ci.yml` file. It is also important that the secret's value
is hidden in the job log.
You access added variable by prefixing it's name with `$` (on non-Windows runners)
or `%` (for Windows Batch runners):
-1. `$VARIABLE` - use it for non-Windows runners
-1. `%VARIABLE%` - use it for Windows Batch runners
+- `$VARIABLE`: Use for non-Windows runners
+- `%VARIABLE%`: Use for Windows Batch runners
-Read more about the [CI/CD variables](../../variables/index.md).
+Read more about [CI/CD variables](../../variables/index.md).
diff --git a/doc/ci/examples/index.md b/doc/ci/examples/index.md
index 9d6a4f53123..0569bb281b9 100644
--- a/doc/ci/examples/index.md
+++ b/doc/ci/examples/index.md
@@ -73,7 +73,7 @@ choose one of these templates:
- [Django (`Django.gitlab-ci.yml`)](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Django.gitlab-ci.yml)
- [Docker (`Docker.gitlab-ci.yml`)](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Docker.gitlab-ci.yml)
- [dotNET (`dotNET.gitlab-ci.yml`)](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/dotNET.gitlab-ci.yml)
-- [dotNET Core (`dotNET-Core.yml`)](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/dotNET-Core.yml)
+- [dotNET Core (`dotNET-Core.gitlab-ci.yml`)](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/dotNET-Core.gitlab-ci.yml)
- [Elixir (`Elixir.gitlab-ci.yml`)](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Elixir.gitlab-ci.yml)
- [Flutter (`Flutter.gitlab-ci.yml`)](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Flutter.gitlab-ci.yml)
- [goLang (`Go.gitlab-ci.yml`)](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Go.gitlab-ci.yml)
diff --git a/doc/ci/examples/semantic-release.md b/doc/ci/examples/semantic-release.md
index e7b9b9b51ad..eb758218f17 100644
--- a/doc/ci/examples/semantic-release.md
+++ b/doc/ci/examples/semantic-release.md
@@ -12,7 +12,7 @@ You can also view or fork the complete [example source](https://gitlab.com/gitla
## Initialize the module
-1. Open a terminal and navigate to the project's repository
+1. Open a terminal and navigate to the project's repository.
1. Run `npm init`. Name the module according to [the Package Registry's naming conventions](../../user/packages/npm_registry/index.md#package-naming-convention). For example, if the project's path is `gitlab-examples/semantic-release-npm`, name the module `@gitlab-examples/semantic-release-npm`.
1. Install the following npm packages:
@@ -88,12 +88,22 @@ The default `before_script` generates a temporary `.npmrc` that is used to authe
As part of publishing a package, semantic-release increases the version number in `package.json`. For semantic-release to commit this change and push it back to GitLab, the pipeline requires a custom CI/CD variable named `GITLAB_TOKEN`. To create this variable:
-1. Navigate to **Project > Settings > Access Tokens**.
-1. Give the token a name, and select the `api` scope.
-1. Click **Create project access token** and copy its value.
-1. Navigate to **Project > Settings > CI/CD > Variables**.
-1. Click **Add Variable**.
-1. In the **Key** field, enter `GITLAB_TOKEN`. In the **Value** field, paste the token created above. Check the **Mask variable** option and click **Add variable**.
+<!-- markdownlint-disable MD044 -->
+1. On the top bar, on the top right, select your avatar.
+1. On the left sidebar, select **Access Tokens**.
+1. In the **Token name** box, enter a token name.
+1. Under **select scopes**, select the **api** checkbox.
+1. Select **Create project access token**.
+1. Copy the value.
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Settings > CI/CD**.
+1. Expand **Variables**.
+1. Select **Add variable**.
+1. In the **Key** box, enter `GITLAB_TOKEN`.
+1. In the **Value** box, paste the token.
+1. Select the **Mask variable** checkbox.
+1. Select **Add variable**.
+<!-- markdownlint-enable MD044 -->
## Configure semantic-release
diff --git a/doc/ci/img/add_file_template_11_10.png b/doc/ci/img/add_file_template_11_10.png
deleted file mode 100644
index ca04d72615b..00000000000
--- a/doc/ci/img/add_file_template_11_10.png
+++ /dev/null
Binary files differ
diff --git a/doc/ci/index.md b/doc/ci/index.md
index 593f50d4ffd..9175c20f580 100644
--- a/doc/ci/index.md
+++ b/doc/ci/index.md
@@ -61,7 +61,7 @@ GitLab CI/CD uses a number of concepts to describe and run your build and deploy
| [Cache dependencies](caching/index.md) | Cache your dependencies for a faster execution. |
| [GitLab Runner](https://docs.gitlab.com/runner/) | Configure your own runners to execute your scripts. |
| [Pipeline efficiency](pipelines/pipeline_efficiency.md) | Configure your pipelines to run quickly and efficiently. |
-| [Test cases](test_cases/index.md) | Configure your pipelines to run quickly and efficiently. <!--- this seems to be a duplicate description ---> |
+| [Test cases](test_cases/index.md) | Create testing scenarios. |
## Configuration
@@ -79,7 +79,7 @@ GitLab CI/CD supports numerous configuration options:
| [Optimize GitLab and GitLab Runner for large repositories](large_repositories/index.md) | Recommended strategies for handling large repositories. |
| [`.gitlab-ci.yml` full reference](yaml/index.md) | All the attributes you can use with GitLab CI/CD. |
-Note that certain operations can only be performed according to the
+Certain operations can only be performed according to the
[user](../user/permissions.md#gitlab-cicd-permissions) and [job](../user/permissions.md#job-permissions) permissions.
## Feature set
diff --git a/doc/ci/interactive_web_terminal/index.md b/doc/ci/interactive_web_terminal/index.md
index 46abcf4a21d..7e72bd44503 100644
--- a/doc/ci/interactive_web_terminal/index.md
+++ b/doc/ci/interactive_web_terminal/index.md
@@ -33,8 +33,8 @@ Two things need to be configured for the interactive web terminal to work:
NOTE:
Interactive web terminals are not yet supported by
-[`gitlab-runner` Helm chart](https://docs.gitlab.com/charts/charts/gitlab/gitlab-runner/index.html),
-but support [is planned](https://gitlab.com/gitlab-org/charts/gitlab-runner/-/issues/79).
+[`gitlab-runner` Helm chart](https://docs.gitlab.com/charts/charts/gitlab/gitlab-runner/index.html).
+Support is tracked [in this issue](https://gitlab.com/gitlab-org/charts/gitlab-runner/-/issues/79).
## Debugging a running job
diff --git a/doc/ci/jobs/index.md b/doc/ci/jobs/index.md
index 3fe30c78d6a..aa12e1181cb 100644
--- a/doc/ci/jobs/index.md
+++ b/doc/ci/jobs/index.md
@@ -168,7 +168,7 @@ for a single run of the manual job.
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/21767) in GitLab 11.4.
-When you do not want to run a job immediately, you can use the [`when:delayed`](../yaml/index.md#whendelayed) keyword to
+When you do not want to run a job immediately, you can use the [`when:delayed`](../jobs/job_control.md#run-a-job-after-a-delay) keyword to
delay a job's execution for a certain period.
This is especially useful for timed incremental rollout where new code is rolled out gradually.
@@ -259,3 +259,27 @@ job1:
- echo 'this line should be hidden automatically after loading the job log'
- echo -e "\e[0Ksection_end:`date +%s`:my_first_section\r\e[0K"
```
+
+## Deployment jobs
+
+Deployment jobs are a specific kind of CI job in that they deploy code to
+[environments](../environments/index.md). A deployment job is any job that
+uses the `environment` keyword and the [`start` environment `action`](../yaml/index.md#environmentaction).
+Deployment jobs do not need to be in the `deploy` stage. The following `deploy me`
+job is an example of a deployment job. `action: start` is the default behavior and
+is defined for the sake of the example, but you can omit it:
+
+```yaml
+deploy me:
+ script:
+ - deploy-to-cats.sh
+ environment:
+ name: production
+ url: https://cats.example.com
+ action: start
+```
+
+The behavior of deployment jobs can be controlled with
+[deployment safety](../environments/deployment_safety.md) settings like
+[skipping outdated deployment jobs](../environments/deployment_safety.md#prevent-deployments-during-deploy-freeze-windows)
+and [ensuring only one deployment job runs at a time](../environments/deployment_safety.md#ensure-only-one-deployment-job-runs-at-a-time).
diff --git a/doc/ci/jobs/job_control.md b/doc/ci/jobs/job_control.md
index 634214aedc3..b8b05426297 100644
--- a/doc/ci/jobs/job_control.md
+++ b/doc/ci/jobs/job_control.md
@@ -497,6 +497,120 @@ test:
- "README.md"
```
+## Create a job that must be run manually
+
+You can require that a job doesn't run unless a user starts it. This is called a **manual job**.
+You might want to use a manual job for something like deploying to production.
+
+To specify a job as manual, add [`when: manual`](../yaml/index.md#when) to the job
+in the `.gitlab-ci.yml` file.
+
+By default, manual jobs display as skipped when the pipeline starts.
+
+You can use [protected branches](../../user/project/protected_branches.md) to more strictly
+[protect manual deployments](#protect-manual-jobs) from being run by unauthorized users.
+
+### Types of manual jobs
+
+Manual jobs can be either optional or blocking:
+
+- **Optional**: The default setting for manual jobs.
+ - They have [`allow_failure: true`](../yaml/index.md#allow_failure) by default.
+ - The status does not contribute to the overall pipeline status. A pipeline can
+ succeed even if all of its manual jobs fail.
+- **Blocking**: An optional setting for manual jobs.
+ - Add `allow_failure: false` to the job configuration.
+ - The pipeline stops at the stage where the job is defined. To let the pipeline
+ continue running, [run the manual job](#run-a-manual-job).
+ - Merge requests in projects with [merge when pipeline succeeds](../../user/project/merge_requests/merge_when_pipeline_succeeds.md)
+ enabled can't be merged with a blocked pipeline. Blocked pipelines show a status
+ of **blocked**.
+
+### Run a manual job
+
+To run a manual job, you must have permission to merge to the assigned branch.
+
+To run a manual job:
+
+1. Go to the pipeline, job, [environment](../environments/index.md#configure-manual-deployments),
+ or deployment view.
+1. Next to the manual job, select **Play** (**{play}**).
+
+### Protect manual jobs **(PREMIUM)**
+
+Use [protected environments](../environments/protected_environments.md)
+to define a list of users authorized to run a manual job. You can authorize only
+the users associated with a protected environment to trigger manual jobs, which can:
+
+- More precisely limit who can deploy to an environment.
+- Block a pipeline until an approved user "approves" it.
+
+To protect a manual job:
+
+1. Add an `environment` to the job. For example:
+
+ ```yaml
+ deploy_prod:
+ stage: deploy
+ script:
+ - echo "Deploy to production server"
+ environment:
+ name: production
+ url: https://example.com
+ when: manual
+ rules:
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
+ ```
+
+1. In the [protected environments settings](../environments/protected_environments.md#protecting-environments),
+ select the environment (`production` in this example) and add the users, roles or groups
+ that are authorized to trigger the manual job to the **Allowed to Deploy** list. Only those in
+ this list can trigger this manual job, as well as GitLab administrators
+ who are always able to use protected environments.
+
+You can use protected environments with blocking manual jobs to have a list of users
+allowed to approve later pipeline stages. Add `allow_failure: false` to the protected
+manual job and the pipeline's next stages only run after the manual job is triggered
+by authorized users.
+
+## Run a job after a delay
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/51352) in GitLab 11.4.
+
+Use [`when: delayed`](../yaml/index.md#when) to execute scripts after a waiting period, or if you want to avoid
+jobs immediately entering the `pending` state.
+
+You can set the period with `start_in` keyword. The value of `start_in` is an elapsed time in seconds, unless a unit is
+provided. `start_in` must be less than or equal to one week. Examples of valid values include:
+
+- `'5'` (a value with no unit must be surrounded by single quotes)
+- `5 seconds`
+- `30 minutes`
+- `1 day`
+- `1 week`
+
+When a stage includes a delayed job, the pipeline doesn't progress until the delayed job finishes.
+You can use this keyword to insert delays between different stages.
+
+The timer of a delayed job starts immediately after the previous stage completes.
+Similar to other types of jobs, a delayed job's timer doesn't start unless the previous stage passes.
+
+The following example creates a job named `timed rollout 10%` that is executed 30 minutes after the previous stage completes:
+
+```yaml
+timed rollout 10%:
+ stage: deploy
+ script: echo 'Rolling out 10% ...'
+ when: delayed
+ start_in: 30 minutes
+```
+
+To stop the active timer of a delayed job, click the **{time-out}** (**Unschedule**) button.
+This job can no longer be scheduled to run automatically. You can, however, execute the job manually.
+
+To start a delayed job immediately, select **Play** (**{play}**).
+Soon GitLab Runner starts the job.
+
## Use predefined CI/CD variables to run jobs only in specific pipeline types
You can use [predefined CI/CD variables](../variables/predefined_variables.md) to choose
diff --git a/doc/ci/lint.md b/doc/ci/lint.md
index 746638442a7..4e3ac8b9e93 100644
--- a/doc/ci/lint.md
+++ b/doc/ci/lint.md
@@ -39,8 +39,8 @@ more complicated issues.
To validate the configuration by running a pipeline simulation:
1. Paste the GitLab CI configuration to verify into the text box.
-1. Click the **Simulate pipeline creation for the default branch** checkbox.
-1. Click **Validate**.
+1. Select the **Simulate pipeline creation for the default branch** checkbox.
+1. Select **Validate**.
![Dry run](img/ci_lint_dry_run.png)
diff --git a/doc/ci/merge_request_pipelines/index.md b/doc/ci/merge_request_pipelines/index.md
index c852800d0a9..13f4ca428c6 100644
--- a/doc/ci/merge_request_pipelines/index.md
+++ b/doc/ci/merge_request_pipelines/index.md
@@ -1,5 +1,6 @@
---
redirect_to: '../pipelines/merge_request_pipelines.md'
+remove_date: '2021-09-29'
---
This document was moved to [another location](../pipelines/merge_request_pipelines.md).
diff --git a/doc/ci/merge_request_pipelines/pipelines_for_merged_results/index.md b/doc/ci/merge_request_pipelines/pipelines_for_merged_results/index.md
index 76a79ba1356..5b68c4ca931 100644
--- a/doc/ci/merge_request_pipelines/pipelines_for_merged_results/index.md
+++ b/doc/ci/merge_request_pipelines/pipelines_for_merged_results/index.md
@@ -1,5 +1,6 @@
---
redirect_to: '../../pipelines/pipelines_for_merged_results.md'
+remove_date: '2021-09-29'
---
This document was moved to [another location](../../pipelines/pipelines_for_merged_results.md).
diff --git a/doc/ci/merge_request_pipelines/pipelines_for_merged_results/merge_trains/index.md b/doc/ci/merge_request_pipelines/pipelines_for_merged_results/merge_trains/index.md
index 8b2316fd340..c8e8dffbdcd 100644
--- a/doc/ci/merge_request_pipelines/pipelines_for_merged_results/merge_trains/index.md
+++ b/doc/ci/merge_request_pipelines/pipelines_for_merged_results/merge_trains/index.md
@@ -1,5 +1,6 @@
---
redirect_to: '../../../pipelines/merge_trains.md'
+remove_date: '2021-09-29'
---
This document was moved to [another location](../../../pipelines/merge_trains.md).
diff --git a/doc/ci/metrics_reports.md b/doc/ci/metrics_reports.md
index 0b0226f428a..9a220121f54 100644
--- a/doc/ci/metrics_reports.md
+++ b/doc/ci/metrics_reports.md
@@ -9,7 +9,7 @@ type: reference
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/9788) in [GitLab Premium](https://about.gitlab.com/pricing/) 11.10. Requires GitLab Runner 11.10 and above.
-GitLab provides a lot of great reporting tools for [merge requests](../user/project/merge_requests/index.md) - [Unit test reports](unit_test_reports.md), [code quality](../user/project/merge_requests/code_quality.md), performance tests, etc. While JUnit is a great open framework for tests that "pass" or "fail", it is also important to see other types of metrics from a given change.
+GitLab provides a lot of great reporting tools for things like [merge requests](../user/project/merge_requests/index.md) - [Unit test reports](unit_test_reports.md), [code quality](../user/project/merge_requests/code_quality.md), and performance tests. While JUnit is a great open framework for tests that "pass" or "fail", it is also important to see other types of metrics from a given change.
You can configure your job to use custom Metrics Reports, and GitLab displays a report on the merge request so that it's easier and faster to identify changes without having to check the entire log.
diff --git a/doc/ci/migration/circleci.md b/doc/ci/migration/circleci.md
index 968adf2e161..106f5b3d819 100644
--- a/doc/ci/migration/circleci.md
+++ b/doc/ci/migration/circleci.md
@@ -188,7 +188,7 @@ release-branch-workflow:
- testing
```
-Example of the same workflow using [`when: manual`](../yaml/index.md#whenmanual) in GitLab CI/CD:
+Example of the same workflow using [`when: manual`](../jobs/job_control.md#create-a-job-that-must-be-run-manually) in GitLab CI/CD:
```yaml
deploy_prod:
diff --git a/doc/ci/migration/jenkins.md b/doc/ci/migration/jenkins.md
index 9f2115fa4a0..1a987a0ce47 100644
--- a/doc/ci/migration/jenkins.md
+++ b/doc/ci/migration/jenkins.md
@@ -16,7 +16,7 @@ The following list of recommended steps was created after observing organization
that were able to quickly complete this migration:
1. Start by reading the GitLab CI/CD [Quick Start Guide](../quick_start/index.md) and [important product differences](#important-product-differences).
-1. Learn the importance of [managing the organizational transition](#managing-the-organizational-transition).
+1. Learn the importance of [managing the organizational transition](#manage-organizational-transition).
1. [Add runners](../runners/index.md) to your GitLab instance.
1. Educate and enable your developers to independently perform the following steps in their projects:
1. Review the [Quick Start Guide](../quick_start/index.md) and [Pipeline Configuration Reference](../yaml/index.md).
@@ -39,7 +39,7 @@ to GitLab!
If you have questions that are not answered here, the [GitLab community forum](https://forum.gitlab.com/)
can be a great resource.
-## Managing the organizational transition
+## Manage organizational transition
An important part of transitioning from Jenkins to GitLab is the cultural and organizational
changes that comes with the move, and successfully managing them. There are a few
@@ -89,13 +89,13 @@ There are some high level differences between the products worth mentioning:
permissions), and then any project can use them. This central project could also
contain scripts or other reusable code.
- You can also use the [`extends` keyword](../yaml/index.md#extends) to reuse configuration
- within a single pipeline configuration.
-- All jobs within a single stage always run in parallel, and all stages run in sequence. We are planning
+ in a single pipeline configuration.
+- All jobs in a single stage always run in parallel, and all stages run in sequence. We are planning
to allow certain jobs to break this sequencing as needed with our [directed acyclic graph](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/47063)
feature.
- The [`parallel`](../yaml/index.md#parallel) keyword can automatically parallelize tasks,
like tests that support parallelization.
-- Normally all jobs within a single stage run in parallel, and all stages run in sequence.
+- Normally all jobs in a single stage run in parallel, and all stages run in sequence.
There are different [pipeline architectures](../pipelines/pipeline_architectures.md)
that allow you to change this behavior.
- The new [`rules` syntax](../yaml/index.md#rules) is the recommended method of
@@ -104,12 +104,12 @@ There are some high level differences between the products worth mentioning:
fresh environment in each job. Passing artifacts between jobs is controlled using the
[`artifacts`](../yaml/index.md#artifacts) and [`dependencies`](../yaml/index.md#dependencies)
keywords. When finished, use the planned [Workspaces](https://gitlab.com/gitlab-org/gitlab/-/issues/29265)
- feature to more easily persist a common workspace between serial jobs.
+ feature to persist a common workspace between serial jobs.
- The `.gitlab-ci.yml` file is checked in to the root of your repository, much like a Jenkinsfile, but
is in the YAML format (see [complete reference](../yaml/index.md)) instead of a Groovy DSL. It's most
analogous to the declarative Jenkinsfile format.
-- Manual approvals or gates can be set up as [`when:manual` jobs](../yaml/index.md#whenmanual). These can
- also leverage [`protected environments`](../yaml/index.md#protecting-manual-jobs)
+- Manual approvals or gates can be set up as [`when:manual` jobs](../jobs/job_control.md#create-a-job-that-must-be-run-manually). These can
+ also leverage [`protected environments`](../jobs/job_control.md#run-a-job-after-a-delay)
to control who is able to approve them.
- GitLab comes with a [container registry](../../user/packages/container_registry/index.md), and we recommend using
container images to set up your build environment. For example, set up one pipeline that builds your build environment
@@ -122,7 +122,7 @@ There are some high level differences between the products worth mentioning:
## Agents vs. runners
Both Jenkins agents and GitLab runners are the hosts that run jobs. To convert the
-Jenkins agent, simply uninstall it and then [install and register the runner](../runners/index.md).
+Jenkins agent, uninstall it and then [install and register the runner](../runners/index.md).
Runners do not require much overhead, so you can size them similarly to the Jenkins
agents you were using.
@@ -215,7 +215,7 @@ be used by all projects in the group. An instance administrator can set a group
the source for [instance project templates](../../user/group/custom_project_templates.md),
which can be used by projects in that instance.
-## Converting a declarative Jenkinsfile
+## Convert a declarative Jenkinsfile
A declarative Jenkinsfile contains "Sections" and "Directives" which are used to control the behavior of your
pipelines. There are equivalents for all of these in GitLab, which we've documented below.
diff --git a/doc/ci/multi_project_pipelines.md b/doc/ci/multi_project_pipelines.md
index 06cbf63e512..93e04bf8a0e 100644
--- a/doc/ci/multi_project_pipelines.md
+++ b/doc/ci/multi_project_pipelines.md
@@ -1,5 +1,6 @@
---
redirect_to: 'pipelines/multi_project_pipelines.md'
+remove_date: '2021-09-29'
---
This document was moved to [another location](pipelines/multi_project_pipelines.md).
diff --git a/doc/ci/parent_child_pipelines.md b/doc/ci/parent_child_pipelines.md
index 0b8df2e9f4c..f2edc263397 100644
--- a/doc/ci/parent_child_pipelines.md
+++ b/doc/ci/parent_child_pipelines.md
@@ -1,5 +1,6 @@
---
redirect_to: 'pipelines/parent_child_pipelines.md'
+remove_date: '2021-09-29'
---
This document was moved to [another location](pipelines/parent_child_pipelines.md).
diff --git a/doc/ci/pipelines/img/coverage_check_approval_rule_14_1.png b/doc/ci/pipelines/img/coverage_check_approval_rule_14_1.png
index 00eb5c84ca9..8c1d005e074 100644
--- a/doc/ci/pipelines/img/coverage_check_approval_rule_14_1.png
+++ b/doc/ci/pipelines/img/coverage_check_approval_rule_14_1.png
Binary files differ
diff --git a/doc/ci/pipelines/img/pipelines_graph_dependency_view_hover_v13_12.png b/doc/ci/pipelines/img/pipelines_graph_dependency_view_hover_v13_12.png
index ff6b3af0a28..8c4b9d73cdc 100644
--- a/doc/ci/pipelines/img/pipelines_graph_dependency_view_hover_v13_12.png
+++ b/doc/ci/pipelines/img/pipelines_graph_dependency_view_hover_v13_12.png
Binary files differ
diff --git a/doc/ci/pipelines/img/pipelines_graph_dependency_view_links_v13_12.png b/doc/ci/pipelines/img/pipelines_graph_dependency_view_links_v13_12.png
index b0923ab96d9..4ad68849e2a 100644
--- a/doc/ci/pipelines/img/pipelines_graph_dependency_view_links_v13_12.png
+++ b/doc/ci/pipelines/img/pipelines_graph_dependency_view_links_v13_12.png
Binary files differ
diff --git a/doc/ci/pipelines/img/pipelines_graph_dependency_view_v13_12.png b/doc/ci/pipelines/img/pipelines_graph_dependency_view_v13_12.png
index ae7cdc5b43e..2bb399f61f9 100644
--- a/doc/ci/pipelines/img/pipelines_graph_dependency_view_v13_12.png
+++ b/doc/ci/pipelines/img/pipelines_graph_dependency_view_v13_12.png
Binary files differ
diff --git a/doc/ci/pipelines/img/pipelines_graph_stage_view_v13_12.png b/doc/ci/pipelines/img/pipelines_graph_stage_view_v13_12.png
index b3b98313350..f2f38979e18 100644
--- a/doc/ci/pipelines/img/pipelines_graph_stage_view_v13_12.png
+++ b/doc/ci/pipelines/img/pipelines_graph_stage_view_v13_12.png
Binary files differ
diff --git a/doc/ci/pipelines/index.md b/doc/ci/pipelines/index.md
index 4f818d658b7..22f18235f99 100644
--- a/doc/ci/pipelines/index.md
+++ b/doc/ci/pipelines/index.md
@@ -53,7 +53,7 @@ Pipelines can be configured in many different ways:
- [Multi-project pipelines](multi_project_pipelines.md) combine pipelines for different projects together.
- [Parent-Child pipelines](parent_child_pipelines.md) break down complex pipelines
into one parent pipeline that can trigger multiple child sub-pipelines, which all
- run in the same project and with the same SHA.
+ run in the same project and with the same SHA. This pipeline architecture is commonly used for mono-repos.
- [Pipelines for Merge Requests](../pipelines/merge_request_pipelines.md) run for merge
requests only (rather than for every commit).
- [Pipelines for Merged Results](../pipelines/pipelines_for_merged_results.md)
@@ -94,7 +94,7 @@ This table lists the refspecs injected for each pipeline type:
The refs `refs/heads/<name>` and `refs/tags/<name>` exist in your
project repository. GitLab generates the special ref `refs/pipelines/<id>` during a
running pipeline job. This ref can be created even after the associated branch or tag has been
-deleted. It's therefore useful in some features such as [automatically stopping an environment](../environments/index.md#stopping-an-environment),
+deleted. It's therefore useful in some features such as [automatically stopping an environment](../environments/index.md#stop-an-environment),
and [merge trains](../pipelines/merge_trains.md)
that might run pipelines after branch deletion.
@@ -123,6 +123,9 @@ you can filter the pipeline list by:
- Status ([GitLab 13.1 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/217617))
- Tag ([GitLab 13.1 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/217617))
+[Starting in GitLab 14.2](https://gitlab.com/gitlab-org/gitlab/-/issues/26621), you can change the
+pipeline column to display the pipeline ID or the pipeline IID.
+
### Run a pipeline manually
Pipelines can be manually executed, with predefined or manually-specified [variables](../variables/index.md).
@@ -132,13 +135,13 @@ operation of the pipeline.
To execute a pipeline manually:
-1. Navigate to your project's **CI/CD > Pipelines**.
-1. Select the **Run pipeline** button.
-1. On the **Run pipeline** page:
- 1. Select the branch or tag to run the pipeline for in the **Run for branch name or tag** field.
- 1. Enter any [environment variables](../variables/index.md) required for the pipeline run.
- You can set specific variables to have their [values prefilled in the form](#prefill-variables-in-manual-pipelines).
- 1. Click the **Run pipeline** button.
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **CI/CD > Pipelines**.
+1. Select **Run pipeline**.
+1. In the **Run for branch name or tag** field, select the branch or tag to run the pipeline for.
+1. Enter any [environment variables](../variables/index.md) required for the pipeline to run.
+ You can set specific variables to have their [values prefilled in the form](#prefill-variables-in-manual-pipelines).
+1. Select **Run pipeline**.
The pipeline now executes the jobs as configured.
@@ -167,6 +170,9 @@ variables:
You cannot set job-level variables to be pre-filled when you run a pipeline manually.
+Pre-filled variables do not show up when the CI/CD configuration is [external to the project](settings.md#specify-a-custom-cicd-configuration-file).
+See the [related issue](https://gitlab.com/gitlab-org/gitlab/-/issues/336184) for more details.
+
### Run a pipeline by using a URL query string
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/24146) in GitLab 12.5.
@@ -200,7 +206,7 @@ For each `var` or `file_var`, a key and value are required.
### Add manual interaction to your pipeline
-Manual actions, configured using the [`when:manual`](../yaml/index.md#whenmanual) keyword,
+[Manual jobs](../jobs/job_control.md#create-a-job-that-must-be-run-manually),
allow you to require manual interaction before moving forward in the pipeline.
You can do this straight from the pipeline graph. Just click the play button
@@ -357,12 +363,10 @@ you visualize the entire pipeline, including all cross-project inter-dependencie
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/298973) in GitLab 13.12.
> - [Deployed behind a feature flag](../../user/feature_flags.md), disabled by default.
> - [Enabled by default](https://gitlab.com/gitlab-org/gitlab/-/issues/328538) in GitLab 13.12.
-> - Enabled on GitLab.com.
-> - Recommended for production use.
-> - To disable in GitLab self-managed instances, ask a GitLab administrator to [disable it](#enable-or-disable-job-dependency-view). **(FREE SELF)**
+> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/328538) in GitLab 14.2.
This in-development feature might not be available for your use. There can be
-[risks when enabling features still in development](../../user/feature_flags.md#risks-when-enabling-features-still-in-development).
+[risks when enabling features still in development](../../administration/feature_flags.md#risks-when-enabling-features-still-in-development).
Refer to this feature's version history for more details.
You can arrange jobs in the pipeline graph based on their [`needs`](../yaml/index.md#needs)
@@ -385,29 +389,11 @@ To see the full `needs` dependency tree for a job, hover over it:
![single job dependency tree highlighted](img/pipelines_graph_dependency_view_hover_v13_12.png)
-#### Enable or disable job dependency view **(FREE SELF)**
-
-The job dependency view is deployed behind a feature flag that is **enabled by default**.
-[GitLab administrators with access to the GitLab Rails console](../../administration/feature_flags.md)
-can disable it.
-
-To enable it:
-
-```ruby
-Feature.enable(:pipeline_graph_layers_view)
-```
-
-To disable it:
-
-```ruby
-Feature.disable(:pipeline_graph_layers_view)
-```
-
### Pipeline mini graphs
Pipeline mini graphs take less space and can tell you at a
quick glance if all jobs passed or something failed. The pipeline mini graph can
-be found when you navigate to:
+be found when you go to:
- The pipelines index page.
- A single commit page.
diff --git a/doc/ci/pipelines/job_artifacts.md b/doc/ci/pipelines/job_artifacts.md
index b9a42c76293..c6b6f61ef11 100644
--- a/doc/ci/pipelines/job_artifacts.md
+++ b/doc/ci/pipelines/job_artifacts.md
@@ -100,8 +100,8 @@ artifacts and log. You must be:
To delete a job:
1. Go to a job's detail page.
-1. At the top right of the job's log, select the trash icon.
-1. Confirm the deletion.
+1. On the top right of the job's log, select **Erase job log** (**{remove}**).
+1. On the confirmation dialog, select **OK**.
## Retrieve job artifacts for other projects
@@ -186,7 +186,9 @@ Keeping the latest artifacts can use a large amount of storage space in projects
with a lot of jobs or large artifacts. If the latest artifacts are not needed in
a project, you can disable this behavior to save space:
-1. Go to the project's **Settings > CI/CD > Artifacts**.
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Settings > CI/CD**.
+1. Expand **Artifacts**.
1. Clear the **Keep artifacts from most recent successful jobs** checkbox.
You can disable this behavior for all projects on a self-managed instance in the
diff --git a/doc/ci/pipelines/merge_request_pipelines.md b/doc/ci/pipelines/merge_request_pipelines.md
index 29c12551f12..b3dfe8753c7 100644
--- a/doc/ci/pipelines/merge_request_pipelines.md
+++ b/doc/ci/pipelines/merge_request_pipelines.md
@@ -16,8 +16,8 @@ changes are pushed to a branch.
If you want the pipeline to run jobs **only** on commits associated with a merge request,
you can use *pipelines for merge requests*.
-In the UI, these pipelines are labeled as `detached`. Otherwise, these pipelines are the same
-as other pipelines.
+These pipelines are labeled as `detached` in the UI, and they do not have access to [protected variables](../variables/index.md#protect-a-cicd-variable).
+Otherwise, these pipelines are the same as other pipelines.
Pipelines for merge requests can run when you:
diff --git a/doc/ci/pipelines/merge_trains.md b/doc/ci/pipelines/merge_trains.md
index 3e6ad071d7e..06c1a6fef44 100644
--- a/doc/ci/pipelines/merge_trains.md
+++ b/doc/ci/pipelines/merge_trains.md
@@ -6,12 +6,12 @@ type: reference
last_update: 2019-07-03
---
-# Merge Trains **(PREMIUM)**
+# Merge trains **(PREMIUM)**
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/9186) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.0.
> - [Squash and merge](../../user/project/merge_requests/squash_and_merge.md) support [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/13001) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.6.
-For more information about why you might want to use Merge Trains, read [How merge trains keep your master green](https://about.gitlab.com/blog/2020/01/30/all-aboard-merge-trains/).
+For more information about why you might want to use merge trains, read [How merge trains keep your master green](https://about.gitlab.com/blog/2020/01/30/all-aboard-merge-trains/).
When [pipelines for merged results](pipelines_for_merged_results.md) are
enabled, the pipeline jobs run as if the changes from your source branch have already
@@ -63,7 +63,7 @@ Read more about [how merge trains keep your master green](https://about.gitlab.c
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i>
Watch this video for a demonstration on [how parallel execution
-of Merge Trains can prevent commits from breaking the default
+of merge trains can prevent commits from breaking the default
branch](https://www.youtube.com/watch?v=D4qCqXgZkHQ).
## Prerequisites
@@ -83,11 +83,13 @@ To enable merge trains for your project:
1. If you are on a self-managed GitLab instance, ensure the [feature flag](#merge-trains-feature-flag) is set correctly.
1. [Configure your CI/CD configuration file](merge_request_pipelines.md#configure-pipelines-for-merge-requests)
so that the pipeline or individual jobs run for merge requests.
-1. Visit your project's **Settings > General** and expand **Merge requests**.
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Settings > General**.
+1. Expand **Merge requests**.
1. In the **Merge method** section, verify that **Merge commit** is selected.
You cannot use **Merge commit with semi-linear history** or **Fast-forward merge** with merge trains.
-1. In the **Merge options** section, select **Enable merged results pipelines.** (if not already selected) and **Enable merge trains.**
-1. Click **Save changes**
+1. In the **Merge options** section, select **Enable merged results pipelines** (if not already selected) and **Enable merge trains**.
+1. Select **Save changes**.
In GitLab 13.5 and earlier, there is only one checkbox, named
**Enable merge trains and pipelines for merged results**.
@@ -102,7 +104,7 @@ unresolved state or your pipelines may be dropped.
To start a merge train:
1. Visit a merge request.
-1. Click the **Start merge train** button.
+1. Select **Start merge train**.
![Start merge train](img/merge_train_start_v12_0.png)
@@ -113,7 +115,7 @@ Other merge requests can now be added to the train.
To add a merge request to a merge train:
1. Visit a merge request.
-1. Click the **Add to merge train** button.
+1. Select **Add to merge train**.
If pipelines are already running for the merge request, you cannot add the merge request
to the train. Instead, you can schedule to add the merge request to a merge train **when the latest
@@ -124,7 +126,7 @@ pipeline succeeds**.
## Remove a merge request from a merge train
1. Visit a merge request.
-1. Click the **Remove from merge train** button.
+1. Select **Remove from merge train**.
![Cancel merge train](img/merge_train_cancel_v12_0.png)
@@ -153,31 +155,32 @@ is recreated and all pipelines restart.
### Merge request dropped from the merge train immediately
-If a merge request is not mergeable (for example, it's a draft merge request, there is a merge
-conflict, etc.), your merge request is dropped from the merge train automatically.
+If a merge request is not mergeable (for example, it's a draft merge request or it has a merge
+conflict), the merge train drops your merge request automatically.
In these cases, the reason for dropping the merge request is in the **system notes**.
To check the reason:
1. Open the merge request that was dropped from the merge train.
-1. Open the **Discussion** tab.
+1. Select the **Discussion** tab.
1. Find a system note that includes either:
- - The text **... removed this merge request from the merge train because ...**
+ - **... removed this merge request from the merge train because ...**
- **... aborted this merge request from the merge train because ...**
- The reason is given in the text after the **because ...** phrase.
-![Merge Train Failure](img/merge_train_failure.png)
+The reason is given in the text after the **because ...** phrase.
+
+![Merge train failure](img/merge_train_failure.png)
### Merge When Pipeline Succeeds cannot be chosen
[Merge When Pipeline Succeeds](../../user/project/merge_requests/merge_when_pipeline_succeeds.md)
-is currently unavailable when Merge Trains are enabled.
+is currently unavailable when merge trains are enabled.
See [the related issue](https://gitlab.com/gitlab-org/gitlab/-/issues/12267)
for more information.
-### Merge Train Pipeline cannot be retried
+### Merge train pipeline cannot be retried
When a pipeline for merge trains fails the merge request is dropped from the train and the pipeline can't be retried.
Pipelines for merge trains run on the merged result of the changes in the merge request and
@@ -189,7 +192,7 @@ again, which triggers a new pipeline.
### Unable to add to merge train with message "The pipeline for this merge request failed."
-Sometimes the **Start/Add to Merge Train** button is not available and the merge request says,
+Sometimes the **Start/Add to merge train** button is not available and the merge request says,
"The pipeline for this merge request failed. Please retry the job or push a new commit to fix the failure."
This issue occurs when [**Pipelines must succeed**](../../user/project/merge_requests/merge_when_pipeline_succeeds.md#only-allow-merge-requests-to-be-merged-if-the-pipeline-succeeds)
@@ -197,19 +200,19 @@ is enabled in **Settings > General > Merge requests**. This option requires that
run a new successful pipeline before you can re-add a merge request to a merge train.
Merge trains ensure that each pipeline has succeeded before a merge happens, so
-you can clear the **Pipelines must succeed** check box and keep
-**Enable merge trains and pipelines for merged results** (merge trains) enabled.
+you can clear the **Pipelines must succeed** checkbox and keep
+**Enable merge trains and pipelines for merged results** (merge trains) selected.
-If you want to keep the **Pipelines must succeed** option enabled along with Merge
-Trains, create a new pipeline for merged results when this error occurs:
+If you want to keep the **Pipelines must succeed** option selected along with merge
+trains, create a new pipeline for merged results when this error occurs:
-1. Go to the **Pipelines** tab and click **Run pipeline**.
-1. Click **Start/Add to merge train when pipeline succeeds**.
+1. On the **Pipelines** tab, select **Run pipeline**.
+1. Select **Start/Add to merge train when pipeline succeeds**.
See [the related issue](https://gitlab.com/gitlab-org/gitlab/-/issues/35135)
for more information.
-### Merge Trains feature flag **(PREMIUM SELF)**
+### Merge trains feature flag **(PREMIUM SELF)**
In [GitLab 13.6 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/244831),
you can [enable or disable merge trains in the project settings](#enable-merge-trains).
@@ -227,7 +230,7 @@ Feature.enable(:disable_merge_trains)
```
After you enable this feature flag, all existing merge trains are cancelled and
-the **Start/Add to Merge Train** button no longer appears in merge requests.
+the **Start/Add to merge train** button no longer appears in merge requests.
To disable the feature flag, and enable merge trains again:
diff --git a/doc/ci/pipelines/multi_project_pipelines.md b/doc/ci/pipelines/multi_project_pipelines.md
index e3fe0fd20f5..3007d91d1b4 100644
--- a/doc/ci/pipelines/multi_project_pipelines.md
+++ b/doc/ci/pipelines/multi_project_pipelines.md
@@ -304,8 +304,8 @@ Prerequisites:
To trigger the pipeline when the upstream project is rebuilt:
1. On the top bar, select **Menu > Projects** and find your project.
-1. On the left sidebar, select **Settings > CI/CD** page.
-1. Expand the **Pipeline subscriptions** section.
+1. On the left sidebar, select **Settings > CI/CD**.
+1. Expand **Pipeline subscriptions**.
1. Enter the project you want to subscribe to, in the format `<namespace>/<project>`.
For example, if the project is `https://gitlab.com/gitlab-org/gitlab`, use `gitlab-org/gitlab`.
1. Select **Subscribe**.
diff --git a/doc/ci/pipelines/parent_child_pipelines.md b/doc/ci/pipelines/parent_child_pipelines.md
index 2e29f4fe812..b266a721d11 100644
--- a/doc/ci/pipelines/parent_child_pipelines.md
+++ b/doc/ci/pipelines/parent_child_pipelines.md
@@ -157,9 +157,13 @@ build a matrix of targets and architectures.
For an overview, see [Create child pipelines using dynamically generated configurations](https://youtu.be/nMdfus2JWHM).
<!-- vale gitlab.Spelling = NO -->
+
We also have an example project using
[Dynamic Child Pipelines with Jsonnet](https://gitlab.com/gitlab-org/project-templates/jsonnet)
-which shows how to use a data templating language to generate your `.gitlab-ci.yml` at runtime. You could use a similar process for other templating languages like [Dhall](https://dhall-lang.org/) or [`ytt`](https://get-ytt.io/).
+which shows how to use a data templating language to generate your `.gitlab-ci.yml` at runtime.
+You could use a similar process for other templating languages like
+[Dhall](https://dhall-lang.org/) or [`ytt`](https://get-ytt.io/).
+
<!-- vale gitlab.Spelling = NO -->
The artifact path is parsed by GitLab, not the runner, so the path must match the
diff --git a/doc/ci/pipelines/pipelines_for_merged_results.md b/doc/ci/pipelines/pipelines_for_merged_results.md
index efa6a373ef3..08d7d119787 100644
--- a/doc/ci/pipelines/pipelines_for_merged_results.md
+++ b/doc/ci/pipelines/pipelines_for_merged_results.md
@@ -64,7 +64,7 @@ To enable pipelines for merged results for your project:
1. Click **Save changes**.
WARNING:
-If you select the check box but don't configure your CI/CD to use
+If you select the checkbox but don't configure your CI/CD to use
pipelines for merge requests, your merge requests may become stuck in an
unresolved state or your pipelines may be dropped.
diff --git a/doc/ci/pipelines/settings.md b/doc/ci/pipelines/settings.md
index db6fa7f4d23..b48c62dccc5 100644
--- a/doc/ci/pipelines/settings.md
+++ b/doc/ci/pipelines/settings.md
@@ -122,8 +122,13 @@ If the CI/CD configuration file is on an external site, the URL must end with `.
- `http://example.com/generate/ci/config.yml`
-If the CI/CD configuration file is in a different project, the path must be relative
-to the root directory in the other project. Include the group and project name at the end:
+If the CI/CD configuration file is in a different project:
+
+- The file must exist on its default branch.
+- The path must be relative to the root directory in the other project.
+- The path must include the group and project name at the end.
+
+For example:
- `.gitlab-ci.yml@mygroup/another-project`
- `my/path/.my-custom-file.yml@mygroup/another-project`
@@ -228,6 +233,7 @@ Use this regex for commonly used test tools.
- `go test -cover` (Go). Example: `coverage: \d+.\d+% of statements`.
- .NET (OpenCover). Example: `(Visited Points).*\((.*)\)`.
- .NET (`dotnet test` line coverage). Example: `Total\s*\|\s*(\d+(?:\.\d+)?)`.
+- tarpaulin (Rust). Example: `^\d+.\d+% coverage`.
<!-- vale gitlab.Spelling = YES -->
@@ -260,6 +266,7 @@ when merging a merge request would cause the project's test coverage to decline.
Follow these steps to enable the `Coverage-Check` MR approval rule:
+1. Set up a [`coverage:`](../yaml/index.md#coverage) regular expression for all jobs you want to include in the overall coverage value.
1. Go to your project and select **Settings > General**.
1. Expand **Merge request approvals**.
1. Select **Enable** next to the `Coverage-Check` approval rule.
diff --git a/doc/ci/quick_start/index.md b/doc/ci/quick_start/index.md
index 8d800d49be3..257e170b0a5 100644
--- a/doc/ci/quick_start/index.md
+++ b/doc/ci/quick_start/index.md
@@ -165,8 +165,3 @@ To view your pipeline:
![Job details](img/job_details_v13_6.png)
If the job status is `stuck`, check to ensure a runner is properly configured for the project.
-
-> To learn more about GitLab CI/CD, check out these video walkthroughs:
->
-> - <i class="fa fa-youtube-play youtube" aria-hidden="true"></i>&nbsp;Watch [First time GitLab & CI/CD](https://www.youtube.com/watch?v=kTNfi5z6Uvk&t=150s).
-> - <i class="fa fa-youtube-play youtube" aria-hidden="true"></i>&nbsp;Watch [Intro to GitLab CI](https://www.youtube.com/watch?v=l5705U8s_nQ&t=358s).
diff --git a/doc/ci/review_apps/img/review_button.png b/doc/ci/review_apps/img/review_button.png
deleted file mode 100644
index 4f1cf4d7cfd..00000000000
--- a/doc/ci/review_apps/img/review_button.png
+++ /dev/null
Binary files differ
diff --git a/doc/ci/review_apps/index.md b/doc/ci/review_apps/index.md
index 1ed736de1e8..8af04388f92 100644
--- a/doc/ci/review_apps/index.md
+++ b/doc/ci/review_apps/index.md
@@ -5,19 +5,14 @@ info: To determine the technical writer assigned to the Stage/Group associated w
type: reference
---
-# Review Apps
+# Review Apps **(FREE)**
-> - [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/21971) in GitLab 8.12. Further additions were made in GitLab 8.13 and 8.14.
-> - Inspired by [Heroku's Review Apps](https://devcenter.heroku.com/articles/github-integration-review-apps), which itself was inspired by [Fourchette](https://github.com/rainforestapp/fourchette).
-
-Review Apps is a collaboration tool that takes the hard work out of providing an environment to showcase product changes.
+Review Apps is a collaboration tool that assists with providing an environment to showcase product changes.
NOTE:
If you have a Kubernetes cluster, you can automate this feature in your applications
by using [Auto DevOps](../../topics/autodevops/index.md).
-## Introduction
-
Review Apps:
- Provide an automatic live preview of changes made in a feature branch by spinning up a dynamic environment for your merge requests.
@@ -27,7 +22,7 @@ Review Apps:
![Review Apps Workflow](img/continuous-delivery-review-apps.svg)
-In the above example:
+In the previous example:
- A Review App is built every time a commit is pushed to `topic branch`.
- The reviewer fails two reviews before passing the third review.
@@ -46,13 +41,13 @@ The following is an example of a merge request with an environment set dynamical
In this example, a branch was:
- Successfully built.
-- Deployed under a dynamic environment that can be reached by clicking on the **View app** button.
+- Deployed under a dynamic environment that can be reached by selecting **View app**.
After adding Review Apps to your workflow, you follow the branched Git flow. That is:
1. Push a branch and let the runner deploy the Review App based on the `script` definition of the dynamic environment job.
1. Wait for the runner to build and deploy your web application.
-1. Click on the link provided in the merge request related to the branch to see the changes live.
+1. To view the changes live, select the link in the merge request related to the branch.
## Configuring Review Apps
@@ -65,27 +60,32 @@ The process of configuring Review Apps is as follows:
1. Set up a job in `.gitlab-ci.yml` that uses the [predefined CI/CD variable](../variables/index.md) `${CI_COMMIT_REF_NAME}`
to create dynamic environments and restrict it to run only on branches.
Alternatively, you can get a YML template for this job by [enabling review apps](#enable-review-apps-button) for your project.
-1. Optionally, set a job that [manually stops](../environments/index.md#stopping-an-environment) the Review Apps.
+1. Optionally, set a job that [manually stops](../environments/index.md#stop-an-environment) the Review Apps.
### Enable Review Apps button
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/118844) in GitLab 12.8.
-When configuring Review Apps for a project, you need to add a new job to `.gitlab-ci.yml`,
-as mentioned above. To facilitate this and if you are using Kubernetes, you can click
-the **Enable Review Apps** button and GitLab prompts you with a template code block that
-you can copy and paste into `.gitlab-ci.yml` as a starting point. To do so:
+When configuring Review Apps for a project, you add a new job to the `.gitlab-ci.yml` file,
+as mentioned above. To facilitate this, and if you are using Kubernetes, you can select
+**Enable Review Apps** and GitLab prompts you with a template code block that
+you can copy and paste into `.gitlab-ci.yml` as a starting point.
+
+Prerequisite:
+
+- You need at least the Developer [role](../../user/permissions.md) for the project.
-1. Go to the project your want to create a Review App job for.
-1. From the left nav, go to **Deployments > Environments**.
-1. Click on the **Enable Review Apps** button. It is available to you
- if you have Developer or higher [permissions](../../user/permissions.md) to that project.
+To use the Review Apps template:
+
+1. On the top bar, select **Menu > Projects** and find the project you want to create a Review App job for.
+1. On the left sidebar, select **Deployments > Environments**.
+1. Select **Enable Review Apps**.
1. Copy the provided code snippet and paste it into your
`.gitlab-ci.yml` file:
![Enable Review Apps modal](img/enable_review_app_v12_8.png)
-1. Feel free to tune this template to your own needs.
+You can edit this template as needed.
## Review Apps auto-stop
@@ -107,8 +107,6 @@ Other examples of Review Apps:
## Route Maps
-> Introduced in GitLab 8.17. In GitLab 11.5, the file links are available in the merge request widget.
-
Route Maps allows you to go directly from source files
to public pages on the [environment](../environments/index.md) defined for
Review Apps.
@@ -175,9 +173,9 @@ and results in a public path of `index.html`, instead of
After you have the route mapping set up, it takes effect in the following locations:
-- In the merge request widget. The:
- - **View app** button takes you to the environment URL set in `.gitlab-ci.yml`.
- - Dropdown lists the first 5 matched items from the route map, but you can filter them if more
+- In the merge request widget:
+ - The **View app** button takes you to the environment URL set in the `.gitlab-ci.yml` file.
+ - The list shows the first 5 matched items from the route map, but you can filter them if more
than 5 are available.
![View app file list in merge request widget](img/view_on_mr_widget.png)
@@ -209,14 +207,14 @@ Review App, the Visual Reviews feedback form is overlaid on the right side of ev
To use the feedback form to make a comment in the merge request:
-1. Click the **Review** tab on the right side of a page.
+1. On the right side of a page, select the **Review** tab.
1. Make a comment on the visual review. You can make use of all the
[Markdown annotations](../../user/markdown.md) that are also available in
merge request comments.
1. Enter your personal information:
- If [`data-require-auth`](#authentication-for-visual-reviews) is `true`, you must enter your [personal access token](../../user/profile/personal_access_tokens.md).
- Otherwise, enter your name, and optionally your email.
-1. Click **Send feedback**.
+1. Select **Send feedback**.
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i>
To see Visual reviews in action, see the [Visual Reviews Walk through](https://youtu.be/1_tvWTlPfM4).
@@ -224,14 +222,7 @@ To see Visual reviews in action, see the [Visual Reviews Walk through](https://y
### Configure Review Apps for Visual Reviews
The feedback form is served through a script you add to pages in your Review App.
-If you have the [Developer role](../../user/permissions.md) in the project,
-you can access it by clicking the **Review** button in the **Pipeline** section
-of the merge request. The form modal also shows a dropdown for changed pages
-if [route maps](#route-maps) are configured in the project.
-
-![review button](img/review_button.png)
-
-The provided script should be added to the `<head>` of your application and
+It should be added to the `<head>` of your application and
consists of some project and merge request specific values. Here's how it
looks for a project with code hosted in a project on GitLab.com:
diff --git a/doc/ci/runners/README.md b/doc/ci/runners/README.md
index 5ab8653dc35..0e6c2f63f9e 100644
--- a/doc/ci/runners/README.md
+++ b/doc/ci/runners/README.md
@@ -1,5 +1,6 @@
---
redirect_to: 'index.md'
+remove_date: '2021-09-28'
---
This document was moved to [another location](index.md).
diff --git a/doc/ci/runners/build_cloud/linux_build_cloud.md b/doc/ci/runners/build_cloud/linux_build_cloud.md
index 710054921ef..1125d8dbcb4 100644
--- a/doc/ci/runners/build_cloud/linux_build_cloud.md
+++ b/doc/ci/runners/build_cloud/linux_build_cloud.md
@@ -4,11 +4,11 @@ group: Runner
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
-# Linux shared runners
+# Build Cloud runners for Linux
-Linux shared runners on GitLab.com run in autoscale mode and are powered by Google Cloud Platform.
+GitLab Build Cloud runners for Linux run in autoscale mode and are powered by Google Cloud Platform.
-Autoscaling means reduced queue times to spin up CI/CD jobs, and isolated VMs for each job, thus maximizing security. These shared runners are available for users and customers on GitLab.com.
+Autoscaling means reduced queue times to spin up CI/CD jobs, and isolated VMs for each job, thus maximizing security. These shared runners are available on GitLab.com.
GitLab offers Ultimate tier capabilities and included CI/CD minutes per group per month for our [Open Source](https://about.gitlab.com/solutions/open-source/join/), [Education](https://about.gitlab.com/solutions/education/), and [Startups](https://about.gitlab.com/solutions/startups/) programs. For private projects, GitLab offers various [plans](https://about.gitlab.com/pricing/), starting with a Free tier.
@@ -23,7 +23,7 @@ Jobs handled by the shared runners on GitLab.com (`shared-runners-manager-X.gitl
**time out after 3 hours**, regardless of the timeout configured in a
project. Check the issues [4010](https://gitlab.com/gitlab-com/infrastructure/-/issues/4010) and [4070](https://gitlab.com/gitlab-com/infrastructure/-/issues/4070) for the reference.
-Below are the shared runners settings.
+Below are the runners' settings.
| Setting | GitLab.com | Default |
| ----------- | ----------------- | ---------- |
@@ -33,7 +33,7 @@ Below are the shared runners settings.
## Pre-clone script
-Linux shared runners on GitLab.com provide a way to run commands in a CI
+Build Cloud runners for Linux provide a way to run commands in a CI
job before the runner attempts to run `git init` and `git fetch` to
download a GitLab repository. The
[`pre_clone_script`](https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-runners-section)
diff --git a/doc/ci/runners/build_cloud/macos/environment.md b/doc/ci/runners/build_cloud/macos/environment.md
new file mode 100644
index 00000000000..e84b7d0a207
--- /dev/null
+++ b/doc/ci/runners/build_cloud/macos/environment.md
@@ -0,0 +1,43 @@
+---
+stage: Verify
+group: Runner
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# VM instances and images for Build Cloud for macOS
+
+When you use the Build Cloud for macOS:
+
+- Each of your jobs runs in a newly provisioned VM, which is dedicated to the specific job.
+- The VM is active only for the duration of the job and immediately deleted.
+
+## VM types
+
+The virtual machine where your job runs has `sudo` access with no password.
+For the Beta, there is only one available machine type, `gbc-macos-large`.
+
+| Instance type | vCPUS | Memory (GB) |
+| --------- | --- | ------- |
+| `gbc-macos-large` | 4 | 10 |
+
+## VM images
+
+You can execute your build on one of the following images.
+You specify this image in your `.gitlab-ci.yml` file.
+
+Each image is running a specific version of macOS and Xcode.
+
+| VM image | Included software |
+|---------------------------|--------------------|
+| macos-10.13-xcode-7 | <https://gitlab.com/gitlab-org/ci-cd/shared-runners/images/macstadium/orka/-/blob/main/toolchain/high-sierra.yml> |
+| macos-10.13-xcode-8 | <https://gitlab.com/gitlab-org/ci-cd/shared-runners/images/macstadium/orka/-/blob/main/toolchain/high-sierra.yml> |
+| macos-10.13-xcode-9 | <https://gitlab.com/gitlab-org/ci-cd/shared-runners/images/macstadium/orka/-/blob/main/toolchain/high-sierra.yml> |
+| macos-10.14-xcode-10 | <https://gitlab.com/gitlab-org/ci-cd/shared-runners/images/macstadium/orka/-/blob/main/toolchain/mojave.yml> |
+| macos-10.15-xcode-11 | <https://gitlab.com/gitlab-org/ci-cd/shared-runners/images/macstadium/orka/-/blob/main/toolchain/catalina.yml> |
+| macos-11-xcode-12 | <https://gitlab.com/gitlab-org/ci-cd/shared-runners/images/macstadium/orka/-/blob/main/toolchain/big-sur.yml> |
+
+### Image update policy
+
+- Support for new macOS versions is planned.
+- Additional details on the support policy and image update release process are documented
+ [in this project](https://gitlab.com/gitlab-org/ci-cd/shared-runners/images/macstadium/orka/-/blob/55bf59c8fa88712960afff2bf6ecc5daa879a8f5/docs/overview.md#os-images).
diff --git a/doc/ci/runners/build_cloud/macos_build_cloud.md b/doc/ci/runners/build_cloud/macos_build_cloud.md
new file mode 100644
index 00000000000..1400c7e08db
--- /dev/null
+++ b/doc/ci/runners/build_cloud/macos_build_cloud.md
@@ -0,0 +1,62 @@
+---
+stage: Verify
+group: Runner
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# Build Cloud runners for macOS (Beta)
+
+The GitLab Build Cloud for macOS Beta provides on-demand runners integrated with GitLab SaaS [CI/CD](../../../ci/index.md).
+Use these runners to build, test, and deploy apps for the Apple ecosystem (macOS, iOS, tvOS). You can take advantage
+of all the capabilities of the GitLab single DevOps platform and not have to manage or operate a
+build environment.
+
+Build Cloud runners for macOS are in [Beta](https://about.gitlab.com/handbook/product/gitlab-the-product/#beta)
+and shouldn't be relied upon for mission-critical production jobs.
+
+## Quickstart
+
+To start using Build Cloud for macOS Beta, you must submit an access request issue. After your
+access has been granted and your build environment configured, you must configure your
+`.gitlab-ci.yml` pipeline file:
+
+1. Add a `.gitlab-ci.yml` file to your project repository.
+1. Specify the [image](macos/environment.md#vm-images) you want to use.
+1. Commit a change to your repository.
+
+The runners automatically run your build.
+
+## Example `.gitlab-ci.yml` file
+
+The following sample `.gitlab-ci.yml` file shows how to start using the runners for macOS:
+
+```yaml
+.macos_buildcloud_runners:
+ tags:
+ - shared-macos-amd64
+ image: macos-11-xcode-12
+
+stages:
+ - build
+ - test
+
+before_script:
+ - echo "started by ${GITLAB_USER_NAME}"
+
+build:
+ extends:
+ - .macos_buildcloud_runners
+ stage: build
+ script:
+ - echo "running scripts in the build job"
+
+test:
+ extends:
+ - .macos_buildcloud_runners
+ stage: test
+ script:
+ - echo "running scripts in the test job"
+```
+
+NOTE:
+During the Beta period, the architecture of this solution will change. Rather than the jobs running on a specific VM instance, they will run on an ephemeral VM instance that is created by an autoscaling instance, known as the Runner Manager. We will notify all Beta participants of any downtime required to do this work.
diff --git a/doc/ci/runners/build_cloud/windows_build_cloud.md b/doc/ci/runners/build_cloud/windows_build_cloud.md
index 5a85f28e4b9..0004041a3e8 100644
--- a/doc/ci/runners/build_cloud/windows_build_cloud.md
+++ b/doc/ci/runners/build_cloud/windows_build_cloud.md
@@ -4,24 +4,24 @@ group: Runner
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
-# Windows shared runners (beta)
+# Build Cloud runners for Windows (beta)
-The Windows shared runners are in [beta](https://about.gitlab.com/handbook/product/gitlab-the-product/#beta)
+GitLab Build Cloud runners for Windows are in [beta](https://about.gitlab.com/handbook/product/gitlab-the-product/#beta)
and shouldn't be used for production workloads.
During this beta period, the [shared runner pipeline quota](../../../user/admin_area/settings/continuous_integration.md#shared-runners-pipeline-minutes-quota)
applies for groups and projects in the same manner as Linux runners. This may
change when the beta period ends, as discussed in this [related issue](https://gitlab.com/gitlab-org/gitlab/-/issues/30834).
-Windows shared runners on GitLab.com autoscale by launching virtual machines on
+Windows runners on GitLab.com autoscale by launching virtual machines on
the Google Cloud Platform. This solution uses an
[autoscaling driver](https://gitlab.com/gitlab-org/ci-cd/custom-executor-drivers/autoscaler/tree/master/docs/readme.md)
developed by GitLab for the [custom executor](https://docs.gitlab.com/runner/executors/custom.html).
-Windows shared runners execute your CI/CD jobs on `n1-standard-2` instances with
+Windows runners execute your CI/CD jobs on `n1-standard-2` instances with
2 vCPUs and 7.5 GB RAM. You can find a full list of available Windows packages in
the [package documentation](https://gitlab.com/gitlab-org/ci-cd/shared-runners/images/gcp/windows-containers/blob/master/cookbooks/preinstalled-software/README.md).
-We want to keep iterating to get Windows shared runners in a stable state and
+We want to keep iterating to get Windows runners in a stable state and
[generally available](https://about.gitlab.com/handbook/product/gitlab-the-product/#generally-available-ga).
You can follow our work towards this goal in the
[related epic](https://gitlab.com/groups/gitlab-org/-/epics/2162).
@@ -89,10 +89,9 @@ VMTag = "windows"
Directory = "C:\\GitLab-Runner\\autoscaler\\machines"
```
-## Example
+## Example `.gitlab-ci.yml` file
-Below is a simple `.gitlab-ci.yml` file to show how to start using the
-Windows shared runners:
+Below is a sample `.gitlab-ci.yml` file that shows how to start using the runners for Windows:
```yaml
.shared_windows_runners:
@@ -131,14 +130,14 @@ test:
definition](https://about.gitlab.com/handbook/product/#beta).
- The average provisioning time for a new Windows VM is 5 minutes.
This means that you may notice slower build start times
- on the Windows shared runner fleet during the beta. In a future
+ on the Windows runner fleet during the beta. In a future
release we intend to update the autoscaler to enable
the pre-provisioning of virtual machines. This is intended to significantly reduce
the time it takes to provision a VM on the Windows fleet. You can
follow along in the [related issue](https://gitlab.com/gitlab-org/ci-cd/custom-executor-drivers/autoscaler/-/issues/32).
-- The Windows shared runner fleet may be unavailable occasionally
+- The Windows runner fleet may be unavailable occasionally
for maintenance or updates.
-- The Windows shared runner virtual machine instances do not use the
+- The Windows runner virtual machine instances do not use the
GitLab Docker executor. This means that you can't specify
[`image`](../../../ci/yaml/index.md#image) or [`services`](../../../ci/yaml/index.md#services) in
your pipeline configuration.
@@ -150,7 +149,7 @@ test:
installation of additional software packages needs to be repeated for
each job in your pipeline.
- The job may stay in a pending state for longer than the
- Linux shared runners.
+ Linux runners.
- There is the possibility that we introduce breaking changes which will
- require updates to pipelines that are using the Windows shared runner
+ require updates to pipelines that are using the Windows runner
fleet.
diff --git a/doc/ci/runners/index.md b/doc/ci/runners/index.md
index da7289a0ebd..6642913a9d8 100644
--- a/doc/ci/runners/index.md
+++ b/doc/ci/runners/index.md
@@ -5,14 +5,18 @@ info: To determine the technical writer assigned to the Stage/Group associated w
type: reference
---
-# GitLab SaaS runners
+# GitLab Build Cloud runners
If you are using self-managed GitLab or you want to use your own runners on GitLab.com, you can
[install and configure your own runners](https://docs.gitlab.com/runner/install/).
-If you are using GitLab SaaS (GitLab.com), your CI jobs automatically run on shared runners. No configuration is required.
-Your jobs can run on [Linux](build_cloud/linux_build_cloud.md) or [Windows](build_cloud/windows_build_cloud.md).
+If you are using GitLab SaaS (GitLab.com), your CI jobs automatically run on runners in the GitLab Build Cloud.
+No configuration is required. Your jobs can run on:
-The number of minutes you can use on these shared runners depends on your
+- [Linux runners](build_cloud/linux_build_cloud.md).
+- [Windows runners](build_cloud/windows_build_cloud.md) (beta).
+- [macOS runners](build_cloud/macos_build_cloud.md) (beta).
+
+The number of minutes you can use on these runners depends on your
[quota](../../user/admin_area/settings/continuous_integration.md#shared-runners-pipeline-minutes-quota),
which depends on your [subscription plan](../../subscriptions/gitlab_com/index.md#ci-pipeline-minutes).
diff --git a/doc/ci/runners/runners_scope.md b/doc/ci/runners/runners_scope.md
index fa56be3a151..2af373384d2 100644
--- a/doc/ci/runners/runners_scope.md
+++ b/doc/ci/runners/runners_scope.md
@@ -33,13 +33,13 @@ If you are using a self-managed instance of GitLab:
If you are using GitLab.com:
-- You can select from a list of [shared runners that GitLab maintains](../../user/gitlab_com/index.md#shared-runners).
+- You can select from a list of [shared runners that GitLab maintains](index.md).
- The shared runners consume the [pipelines minutes](../../subscriptions/gitlab_com/index.md#ci-pipeline-minutes)
included with your account.
### Enable shared runners
-On GitLab.com, [shared runners](#shared-runners) are enabled in all projects by
+On GitLab.com, [shared runners](index.md) are enabled in all projects by
default.
On self-managed instances of GitLab, an administrator must [install](https://docs.gitlab.com/runner/install/index.html)
diff --git a/doc/ci/secrets/index.md b/doc/ci/secrets/index.md
index 7fbc3448d4e..d3c34a6922e 100644
--- a/doc/ci/secrets/index.md
+++ b/doc/ci/secrets/index.md
@@ -5,7 +5,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
type: concepts, howto
---
-# Using external secrets in CI
+# Using external secrets in CI **(FREE)**
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/218746) in GitLab 13.4 and GitLab Runner 13.4.
> - `file` setting [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/250695) in GitLab 14.1 and GitLab Runner 14.1.
@@ -91,8 +91,7 @@ To configure your Vault server:
- `VAULT_AUTH_PATH` - (Optional) The path where the authentication method is mounted, default is `jwt`.
NOTE:
- Support for [providing these values in the user interface](https://gitlab.com/gitlab-org/gitlab/-/issues/218677)
- is planned but not yet implemented.
+ Support for providing these values in the user interface [is tracked in this issue](https://gitlab.com/gitlab-org/gitlab/-/issues/218677).
## Use Vault secrets in a CI job **(PREMIUM)**
@@ -181,3 +180,32 @@ You can also specify some attributes for the resulting Vault tokens, such as tim
IP address range, and number of uses. The full list of options is available in
[Vault's documentation on creating roles](https://www.vaultproject.io/api/auth/jwt#create-role)
for the JSON web token method.
+
+## Using a self-signed Vault server
+
+When the Vault server is using a self-signed certificate, you will see the following error in the job logs:
+
+```plaintext
+ERROR: Job failed (system failure): resolving secrets: initializing Vault service: preparing authenticated client: checking Vault server health: Get https://vault.example.com:8000/v1/sys/health?drsecondarycode=299&performancestandbycode=299&sealedcode=299&standbycode=299&uninitcode=299: x509: certificate signed by unknown authority
+```
+
+You have two options to solve this error:
+
+- Add the self-signed certificate to the GitLab Runner server's CA store.
+ If you deployed GitLab Runner using the [Helm chart](https://docs.gitlab.com/runner/install/kubernetes.html), you will have to create your own GitLab Runner image.
+- Use the `VAULT_CACERT` environment variable to configure GitLab Runner to trust the certificate:
+ - If you are using systemd to manage GitLab Runner, see [how to add an environment variable for GitLab Runner](https://docs.gitlab.com/runner/configuration/init.html#setting-custom-environment-variables).
+ - If you deployed GitLab Runner using the [Helm chart](https://docs.gitlab.com/runner/install/kubernetes.html):
+ 1. [Provide a custom certificate for accessing GitLab](https://docs.gitlab.com/runner/install/kubernetes.html#providing-a-custom-certificate-for-accessing-gitlab), and make sure to add the certificate for the Vault server instead of the certificate for GitLab. If your GitLab instance is also using a self-signed certificate, you should be able to add both in the same `Secret`.
+ 1. Add the following lines in your `values.yaml` file:
+
+ ```yaml
+ ## Replace both the <SECRET_NAME> and the <VAULT_CERTIFICATE>
+ ## with the actual values you used to create the secret
+
+ certsSecretName: <SECRET_NAME>
+
+ envVars:
+ - name: VAULT_CACERT
+ value: "/home/gitlab-runner/.gitlab-runner/certs/<VAULT_CERTIFICATE>"
+ ```
diff --git a/doc/ci/ssh_keys/index.md b/doc/ci/ssh_keys/index.md
index 6136f3be3f6..1e761643a10 100644
--- a/doc/ci/ssh_keys/index.md
+++ b/doc/ci/ssh_keys/index.md
@@ -13,7 +13,7 @@ environment (where the GitLab Runner runs).
The SSH keys can be useful when:
1. You want to checkout internal submodules
-1. You want to download private packages using your package manager (e.g., Bundler)
+1. You want to download private packages using your package manager (for example, Bundler)
1. You want to deploy your application to your own server, or, for example, Heroku
1. You want to execute SSH commands from the build environment to a remote server
1. You want to rsync files from the build environment to a remote server
@@ -21,9 +21,9 @@ The SSH keys can be useful when:
If anything of the above rings a bell, then you most likely need an SSH key.
The most widely supported method is to inject an SSH key into your build
-environment by extending your `.gitlab-ci.yml`, and it's a solution which works
+environment by extending your `.gitlab-ci.yml`, and it's a solution that works
with any type of [executor](https://docs.gitlab.com/runner/executors/)
-(Docker, shell, etc.).
+(like Docker or shell, for example).
## How it works
diff --git a/doc/ci/triggers/README.md b/doc/ci/triggers/README.md
index 5ab8653dc35..0e6c2f63f9e 100644
--- a/doc/ci/triggers/README.md
+++ b/doc/ci/triggers/README.md
@@ -1,5 +1,6 @@
---
redirect_to: 'index.md'
+remove_date: '2021-09-28'
---
This document was moved to [another location](index.md).
diff --git a/doc/ci/triggers/index.md b/doc/ci/triggers/index.md
index 383887bd389..880473d402d 100644
--- a/doc/ci/triggers/index.md
+++ b/doc/ci/triggers/index.md
@@ -205,7 +205,7 @@ file. The parameter is of the form:
variables[key]=value
```
-This information is also exposed in the UI. Please note that _values_ are only viewable by Owners and Maintainers.
+This information is also exposed in the UI. _Values_ are only viewable by users with the Owner and Maintainer role.
![Job variables in UI](img/trigger_variables.png)
diff --git a/doc/ci/unit_test_reports.md b/doc/ci/unit_test_reports.md
index f845c79ef45..7677908e93a 100644
--- a/doc/ci/unit_test_reports.md
+++ b/doc/ci/unit_test_reports.md
@@ -114,16 +114,15 @@ ruby:
### Go example
-Use the following job in `.gitlab-ci.yml`, and ensure you use `-set-exit-code`,
-otherwise the pipeline is marked successful, even if the tests fail:
+Use the following job in `.gitlab-ci.yml`:
```yaml
-## Use https://github.com/jstemmer/go-junit-report to generate a JUnit report format XML file with go
+## Use https://github.com/gotestyourself/gotestsum to generate a JUnit report format XML file with go
golang:
stage: test
script:
- - go get -u github.com/jstemmer/go-junit-report
- - go test -v 2>&1 | go-junit-report -set-exit-code > report.xml
+ - go get gotest.tools/gotestsum
+ - gotestsum --junitfile report.xml --format testname
artifacts:
when: always
reports:
diff --git a/doc/ci/variables/README.md b/doc/ci/variables/README.md
index 5ab8653dc35..0e6c2f63f9e 100644
--- a/doc/ci/variables/README.md
+++ b/doc/ci/variables/README.md
@@ -1,5 +1,6 @@
---
redirect_to: 'index.md'
+remove_date: '2021-09-28'
---
This document was moved to [another location](index.md).
diff --git a/doc/ci/variables/index.md b/doc/ci/variables/index.md
index e6768968d83..a00b8b678ec 100644
--- a/doc/ci/variables/index.md
+++ b/doc/ci/variables/index.md
@@ -112,20 +112,33 @@ job1:
- echo This job does not need any variables
```
-You can use variables to help define other variables. Use `$$` to ignore a variable
-name inside another variable:
+Use the [`value` and `description`](../yaml/index.md#prefill-variables-in-manual-pipelines)
+keywords to define [variables that are prefilled](../pipelines/index.md#prefill-variables-in-manual-pipelines)
+for [manually-triggered pipelines](../pipelines/index.md#run-a-pipeline-manually).
+
+### Use variables or `$` in other variables
+
+You can use variables inside other variables:
```yaml
-variables:
- FLAGS: '-al'
- LS_CMD: 'ls "$FLAGS" $$TMP_DIR'
-script:
- - 'eval "$LS_CMD"' # Executes 'ls -al $TMP_DIR'
+job:
+ variables:
+ FLAGS: '-al'
+ LS_CMD: 'ls "$FLAGS"'
+ script:
+ - 'eval "$LS_CMD"' # Executes 'ls -al'
```
-Use the [`value` and `description`](../yaml/index.md#prefill-variables-in-manual-pipelines)
-keywords to define [variables that are prefilled](../pipelines/index.md#prefill-variables-in-manual-pipelines)
-for [manually-triggered pipelines](../pipelines/index.md#run-a-pipeline-manually).
+If you do not want the `$` interpreted as the start of a variable, use `$$` instead:
+
+```yaml
+job:
+ variables:
+ FLAGS: '-al'
+ LS_CMD: 'ls "$FLAGS" $$TMP_DIR'
+ script:
+ - 'eval "$LS_CMD"' # Executes 'ls -al $TMP_DIR'
+```
### Add a CI/CD variable to a project
@@ -294,7 +307,7 @@ To mask a variable:
1. In the project, group, or Admin Area, go to **Settings > CI/CD**.
1. Expand the **Variables** section.
1. Next to the variable you want to protect, select **Edit**.
-1. Select the **Mask variable** check box.
+1. Select the **Mask variable** checkbox.
1. Select **Update variable**.
The value of the variable must:
@@ -311,18 +324,27 @@ NOTE:
Masking a CI/CD variable is not a guaranteed way to prevent malicious users from accessing
variable values. To make variables more secure, you can [use external secrets](../secrets/index.md).
+WARNING:
+Due to a technical limitation, masked variables that are more than 4 KiB in length are not recommended. Printing such
+a large value to the trace log has the potential to be [revealed](https://gitlab.com/gitlab-org/gitlab-runner/-/issues/28128).
+When using GitLab Runner 14.2, only the tail of the variable, characters beyond 4KiB in length, have the potential to
+be revealed.
+
### Protect a CI/CD variable
You can protect a project, group or instance CI/CD variable so it is only passed
to pipelines running on [protected branches](../../user/project/protected_branches.md)
or [protected tags](../../user/project/protected_tags.md).
+[Pipelines for merge requests](../pipelines/merge_request_pipelines.md) do not have access to protected variables.
+An [issue exists](https://gitlab.com/gitlab-org/gitlab/-/issues/28002) regarding this limitation.
+
To protect a variable:
1. Go to **Settings > CI/CD** in the project, group or instance admin area.
1. Expand the **Variables** section.
1. Next to the variable you want to protect, select **Edit**.
-1. Select the **Protect variable** check box.
+1. Select the **Protect variable** checkbox.
1. Select **Update variable**.
The variable is available for all subsequent pipelines.
@@ -398,7 +420,7 @@ job_name:
```
In [some cases](https://gitlab.com/gitlab-org/gitlab-runner/-/issues/4115#note_157692820)
-environment variables might need to be surrounded by quotes to expand properly:
+environment variables must be surrounded by quotes to expand properly:
```yaml
job_name:
@@ -626,7 +648,7 @@ the environment scope of a variable. GitLab does this by
[defining which environments and corresponding jobs](../environments/index.md)
the variable can be available for.
-To learn more about scoping environments, see [Scoping environments with specs](../environments/index.md#scoping-environments-with-specs).
+To learn more about scoping environments, see [Scoping environments with specs](../environments/index.md#scope-environments-with-specs).
To learn more about ensuring CI/CD variables are only exposed in pipelines running from protected
branches or tags, see [Protect a CI/CD Variable](#protect-a-cicd-variable).
@@ -770,6 +792,8 @@ if [[ -d "/builds/gitlab-examples/ci-debug-trace/.git" ]]; then
++ CI_PROJECT_VISIBILITY=public
++ export CI_PROJECT_REPOSITORY_LANGUAGES=
++ CI_PROJECT_REPOSITORY_LANGUAGES=
+++ export CI_PROJECT_CLASSIFICATION_LABEL=
+++ CI_PROJECT_CLASSIFICATION_LABEL=
++ export CI_DEFAULT_BRANCH=main
++ CI_DEFAULT_BRANCH=main
++ export CI_REGISTRY=registry.gitlab.com
diff --git a/doc/ci/variables/predefined_variables.md b/doc/ci/variables/predefined_variables.md
index b6dd9446644..b5999a555c9 100644
--- a/doc/ci/variables/predefined_variables.md
+++ b/doc/ci/variables/predefined_variables.md
@@ -38,7 +38,7 @@ There are also [Kubernetes-specific deployment variables](../../user/project/clu
| `CI_COMMIT_TITLE` | 10.8 | all | The title of the commit. The full first line of the message. |
| `CI_CONCURRENT_ID` | all | 11.10 | The unique ID of build execution in a single executor. |
| `CI_CONCURRENT_PROJECT_ID` | all | 11.10 | The unique ID of build execution in a single executor and project. |
-| `CI_CONFIG_PATH` | 9.4 | 0.5 | The path to the CI/CD configuration file. Defaults to `.gitlab-ci.yml`. |
+| `CI_CONFIG_PATH` | 9.4 | 0.5 | The path to the CI/CD configuration file. Defaults to `.gitlab-ci.yml`. Read-only inside a running pipeline. |
| `CI_DEBUG_TRACE` | all | 1.7 | `true` if [debug logging (tracing)](index.md#debug-logging) is enabled. |
| `CI_DEFAULT_BRANCH` | 12.4 | all | The name of the project's default branch. |
| `CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX` | 13.7 | all | The image prefix for pulling images through the Dependency Proxy. |
@@ -89,8 +89,9 @@ There are also [Kubernetes-specific deployment variables](../../user/project/clu
| `CI_PROJECT_TITLE` | 12.4 | all | The human-readable project name as displayed in the GitLab web interface. |
| `CI_PROJECT_URL` | 8.10 | 0.5 | The HTTP(S) address of the project. |
| `CI_PROJECT_VISIBILITY` | 10.3 | all | The project visibility. Can be `internal`, `private`, or `public`. |
+| `CI_PROJECT_CLASSIFICATION_LABEL` | 14.2 | all | The project [external authorization classification label](../../user/admin_area/settings/external_authorization.md). |
| `CI_REGISTRY_IMAGE` | 8.10 | 0.5 | The address of the project's Container Registry. Only available if the Container Registry is enabled for the project. |
-| `CI_REGISTRY_PASSWORD` | 9.0 | all | The password to push containers to the project's GitLab Container Registry. Only available if the Container Registry is enabled for the project. |
+| `CI_REGISTRY_PASSWORD` | 9.0 | all | The password to push containers to the project's GitLab Container Registry. Only available if the Container Registry is enabled for the project. This password value is the same as the `CI_JOB_TOKEN` and is valid only as long as the job is running. Use the `CI_DEPLOY_PASSWORD` for long-lived access to the registry |
| `CI_REGISTRY_USER` | 9.0 | all | The username to push containers to the project's GitLab Container Registry. Only available if the Container Registry is enabled for the project. |
| `CI_REGISTRY` | 8.10 | 0.5 | The address of the GitLab Container Registry. Only available if the Container Registry is enabled for the project. This variable includes a `:port` value if one is specified in the registry configuration. |
| `CI_REPOSITORY_URL` | 9.0 | all | The URL to clone the Git repository. |
diff --git a/doc/ci/variables/where_variables_can_be_used.md b/doc/ci/variables/where_variables_can_be_used.md
index beb19c8beea..8009687dbca 100644
--- a/doc/ci/variables/where_variables_can_be_used.md
+++ b/doc/ci/variables/where_variables_can_be_used.md
@@ -113,7 +113,7 @@ Feature.disable(:variable_inside_variable, Project.find(<project id>))
- Supported: project/group variables, `.gitlab-ci.yml` variables, `config.toml` variables, and
variables from triggers, pipeline schedules, and manual pipelines.
-- Not supported: variables defined inside of scripts (e.g., `export MY_VARIABLE="test"`).
+- Not supported: variables defined inside of scripts (for example, `export MY_VARIABLE="test"`).
The runner uses Go's `os.Expand()` method for variable expansion. It means that it handles
only variables defined as `$variable` and `${variable}`. What's also important, is that
@@ -132,7 +132,7 @@ use a different variables syntax.
Supported:
-- The `script` may use all available variables that are default for the shell (e.g., `$PATH` which
+- The `script` may use all available variables that are default for the shell (for example, `$PATH` which
should be present in all bash/sh shells) and all variables defined by GitLab CI/CD (project/group variables,
`.gitlab-ci.yml` variables, `config.toml` variables, and variables from triggers and pipeline schedules).
- The `script` may also use all variables defined in the lines before. So, for example, if you define
@@ -174,7 +174,7 @@ They are:
- Script execution shell.
- Not supported:
- For definitions where the ["Expansion place"](#gitlab-ciyml-file) is GitLab.
- - In the `only` and `except` [variables expressions](../jobs/job_control.md#cicd-variable-expressions).
+ - In the `only`, `except`, and `rules` [variables expressions](../jobs/job_control.md#cicd-variable-expressions).
Some of the persisted variables contain tokens and cannot be used by some definitions
due to security reasons.
diff --git a/doc/ci/yaml/README.md b/doc/ci/yaml/README.md
index 5ab8653dc35..0e6c2f63f9e 100644
--- a/doc/ci/yaml/README.md
+++ b/doc/ci/yaml/README.md
@@ -1,5 +1,6 @@
---
redirect_to: 'index.md'
+remove_date: '2021-09-28'
---
This document was moved to [another location](index.md).
diff --git a/doc/ci/yaml/gitlab_ci_yaml.md b/doc/ci/yaml/gitlab_ci_yaml.md
index 2723cb19c1f..6cd900123e0 100644
--- a/doc/ci/yaml/gitlab_ci_yaml.md
+++ b/doc/ci/yaml/gitlab_ci_yaml.md
@@ -4,11 +4,8 @@ group: Pipeline Execution
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
type: reference
---
-<!-- markdownlint-disable MD044 -->
-<!-- vale gitlab.Spelling = NO -->
-# The .gitlab-ci.yml file **(FREE)**
-<!-- vale gitlab.Spelling = YES -->
-<!-- markdownlint-enable MD044 -->
+
+# The `.gitlab-ci.yml` file **(FREE)**
To use GitLab CI/CD, you need:
diff --git a/doc/ci/yaml/index.md b/doc/ci/yaml/index.md
index c2b8ef50e6a..63f626e524e 100644
--- a/doc/ci/yaml/index.md
+++ b/doc/ci/yaml/index.md
@@ -126,6 +126,15 @@ Use `stages` to define stages that contain groups of jobs. `stages` is defined g
for the pipeline. Use [`stage`](#stage) in a job to define which stage the job is
part of.
+If `stages` is not defined in the `.gitlab-ci.yml` file, then the default
+pipeline stages are:
+
+- [`.pre`](#stage-pre)
+- `build`
+- `test`
+- `deploy`
+- [`.post`](#stage-post)
+
The order of the `stages` items defines the execution order for jobs:
- Jobs in the same stage run in parallel.
@@ -148,9 +157,6 @@ stages:
If any job fails, the pipeline is marked as `failed` and jobs in later stages do not
start. Jobs in the current stage are not stopped and continue to run.
-If no `stages` are defined in the `.gitlab-ci.yml` file, then `build`, `test` and `deploy`
-are the default pipeline stages.
-
If a job does not specify a [`stage`](#stage), the job is assigned the `test` stage.
If a stage is defined, but no jobs use it, the stage is not visible in the pipeline. This is
@@ -415,13 +421,20 @@ NOTE:
Use merging to customize and override included CI/CD configurations with local
configurations. Local configurations in the `.gitlab-ci.yml` file override included configurations.
-#### Variables with `include` **(FREE SELF)**
+#### Variables with `include`
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/284883) in GitLab 13.8.
> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/294294) in GitLab 13.9.
+> - [Support for project, group, and instance variables added](https://gitlab.com/gitlab-org/gitlab/-/issues/219065) in GitLab 14.2.
+
+In `include` sections in your `.gitlab-ci.yml` file, you can use:
-You can [use some predefined variables in `include` sections](../variables/where_variables_can_be_used.md#gitlab-ciyml-file)
-in your `.gitlab-ci.yml` file:
+- `$CI_COMMIT_REF_NAME` [predefined variable](../variables/predefined_variables.md) in GitLab 14.2
+ and later.
+- [Project variables](../variables/index.md#add-a-cicd-variable-to-a-project)
+- [Group variables](../variables/index.md#add-a-cicd-variable-to-a-group)
+- [Instance variables](../variables/index.md#add-a-cicd-variable-to-an-instance)
+- Project [predefined variables](../variables/predefined_variables.md).
```yaml
include:
@@ -432,6 +445,32 @@ include:
For an example of how you can include these predefined variables, and the variables' impact on CI/CD jobs,
see this [CI/CD variable demo](https://youtu.be/4XR8gw3Pkos).
+There is a [related issue](https://gitlab.com/gitlab-org/gitlab/-/issues/337633)
+that proposes expanding this feature to support more variables.
+
+#### `rules` with `include`
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/276515) in GitLab 14.2.
+
+NOTE:
+On self-managed GitLab, by default this feature is not available. To make it available,
+ask an administrator to [enable the `ci_include_rules` flag](../../administration/feature_flags.md).
+On GitLab.com, this feature is not available. The feature is not ready for production use.
+
+You can use [`rules`](#rules) with `include` to conditionally include other configuration files.
+You can only use `rules:if` in `include` with [certain variables](#variables-with-include).
+
+```yaml
+include:
+ - local: builds.yml
+ rules:
+ - if: '$INCLUDE_BUILDS == "true"'
+
+test:
+ stage: test
+ script: exit 0
+```
+
#### `include:local`
Use `include:local` to include a file that is in the same repository as the `.gitlab-ci.yml` file.
@@ -463,15 +502,7 @@ Use local includes instead of symbolic links.
##### `include:local` with wildcard file paths
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/25921) in GitLab 13.11.
-> - [Deployed behind a feature flag](../../user/feature_flags.md), disabled by default.
-> - [Enabled by default](https://gitlab.com/gitlab-org/gitlab/-/issues/327315) in GitLab 13.12.
-> - Enabled on GitLab.com.
-> - Recommended for production use.
-> - For GitLab self-managed instances, GitLab administrators can opt to disable it. **(CORE ONLY)**
-
-There can be
-[risks when disabling released features](../../user/feature_flags.md#risks-when-disabling-released-features).
-Refer to this feature's version history for more details.
+> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/327315) in GitLab 14.2.
You can use wildcard paths (`*` and `**`) with `include:local`.
@@ -495,23 +526,6 @@ When the pipeline runs, GitLab:
include: 'configs/**/*.yml'
```
-The wildcard file paths feature is under development but ready for production use.
-It is deployed behind a feature flag that is **enabled by default**.
-[GitLab administrators with access to the GitLab Rails console](../../administration/feature_flags.md)
-can opt to disable it.
-
-To enable it:
-
-```ruby
-Feature.enable(:ci_wildcard_file_paths)
-```
-
-To disable it:
-
-```ruby
-Feature.disable(:ci_wildcard_file_paths)
-```
-
#### `include:file`
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/53903) in GitLab 11.7.
@@ -680,160 +694,148 @@ For more information, see [Available settings for `services`](../services/index.
### `script`
-Use `script` to specify a shell script for the runner to execute.
+Use `script` to specify commands for the runner to execute.
All jobs except [trigger jobs](#trigger) require a `script` keyword.
-For example:
+**Keyword type**: Job keyword. You can use it only as part of a job.
-```yaml
-job:
- script: "bundle exec rspec"
-```
+**Possible inputs**: An array including:
-You can use [YAML anchors with `script`](#yaml-anchors-for-scripts).
+- Single line commands.
+- Long commands [split over multiple lines](script.md#split-long-commands).
+- [YAML anchors](#yaml-anchors-for-scripts).
-The `script` keyword can also contain several commands in an array:
+**Example of `script`:**
```yaml
-job:
+job1:
+ script: "bundle exec rspec"
+
+job2:
script:
- uname -a
- bundle exec rspec
```
-Sometimes, `script` commands must be wrapped in single or double quotes.
-For example, commands that contain a colon (`:`) must be wrapped in single quotes (`'`).
-The YAML parser needs to interpret the text as a string rather than
-a "key: value" pair.
+**Additional details**:
-For example, this script uses a colon:
+You might need to use single quotes (`'`) or double quotes (`"`) when using
+[special characters in `script`](script.md#use-special-characters-with-script).
-```yaml
-job:
- script:
- - curl --request POST --header 'Content-Type: application/json' "https://gitlab/api/v4/projects"
-```
+**Related topics**:
+
+- You can [ignore non-zero exit codes](script.md#ignore-non-zero-exit-codes).
+- [Use color codes with `script`](script.md#add-color-codes-to-script-output)
+ to make job logs easier to review.
+- [Create custom collapsible sections](../jobs/index.md#custom-collapsible-sections)
+ to simplify job log output.
-To be considered valid YAML, you must wrap the entire command in single quotes. If
-the command already uses single quotes, you should change them to double quotes (`"`)
-if possible:
+#### `before_script`
-```yaml
-job:
- script:
- - 'curl --request POST --header "Content-Type: application/json" "https://gitlab/api/v4/projects"'
-```
+Use `before_script` to define an array of commands that should run before each job's
+`script` commands, but after [artifacts](#artifacts) are restored.
-You can verify the syntax is valid with the [CI Lint](../lint.md) tool.
+**Keyword type**: Job keyword. You can use it only as part of a job or in the
+[`default:` section](#custom-default-keyword-values).
-Be careful when using these characters as well:
+**Possible inputs**: An array including:
-- `{`, `}`, `[`, `]`, `,`, `&`, `*`, `#`, `?`, `|`, `-`, `<`, `>`, `=`, `!`, `%`, `@`, `` ` ``.
+- Single line commands.
+- Long commands [split over multiple lines](script.md#split-long-commands).
+- [YAML anchors](#yaml-anchors-for-scripts).
-If any of the script commands return an exit code other than zero, the job
-fails and further commands are not executed. Store the exit code in a variable to
-avoid this behavior:
+**Example of `before_script`:**
```yaml
job:
+ before_script:
+ - echo "Execute this command before any `script:` commands."
script:
- - false || exit_code=$?
- - if [ $exit_code -ne 0 ]; then echo "Previous command failed"; fi;
+ - echo "This command executes after the job's `before_script` commands."
```
-#### `before_script`
-
-Use `before_script` to define an array of commands that should run before each job,
-but after [artifacts](#artifacts) are restored.
+**Additional details**:
Scripts you specify in `before_script` are concatenated with any scripts you specify
-in the main [`script`](#script). The combine scripts execute together in a single shell.
+in the main [`script`](#script). The combined scripts execute together in a single shell.
-You can overwrite a globally-defined `before_script` if you define it in a job:
+**Related topics**:
-```yaml
-default:
- before_script:
- - echo "Execute this script in all jobs that don't already have a before_script section."
+- [Use `before_script` with `default`](script.md#set-a-default-before_script-or-after_script-for-all-jobs)
+ to define a default array of commands that should run before the `script` commands in all jobs.
+- You can [ignore non-zero exit codes](script.md#ignore-non-zero-exit-codes).
+- [Use color codes with `before_script`](script.md#add-color-codes-to-script-output)
+ to make job logs easier to review.
+- [Create custom collapsible sections](../jobs/index.md#custom-collapsible-sections)
+ to simplify job log output.
-job1:
- script:
- - echo "This script executes after the global before_script."
+#### `after_script`
-job:
- before_script:
- - echo "Execute this script instead of the global before_script."
- script:
- - echo "This script executes after the job's `before_script`"
-```
+Use `after_script` to define an array of commands that run after each job, including failed jobs.
-You can use [YAML anchors with `before_script`](#yaml-anchors-for-scripts).
+**Keyword type**: Job keyword. You can use it only as part of a job or in the
+[`default:` section](#custom-default-keyword-values).
-#### `after_script`
+**Possible inputs**: An array including:
-Use `after_script` to define an array of commands that run after each job,
-including failed jobs.
+- Single line commands.
+- Long commands [split over multiple lines](script.md#split-long-commands).
+- [YAML anchors](#yaml-anchors-for-scripts).
-If a job times out or is cancelled, the `after_script` commands do not execute.
-An [issue](https://gitlab.com/gitlab-org/gitlab/-/issues/15603) exists to support
-executing `after_script` commands for timed-out or cancelled jobs.
+**Example of `after_script`:**
+
+```yaml
+job:
+ script:
+ - echo "An example script section."
+ after_script:
+ - echo "Execute this command after the `script` section completes."
+```
+
+**Additional details**:
Scripts you specify in `after_script` execute in a new shell, separate from any
-`before_script` or `script` scripts. As a result, they:
+`before_script` or `script` commands. As a result, they:
- Have a current working directory set back to the default.
-- Have no access to changes done by scripts defined in `before_script` or `script`, including:
+- Don't have access to changes done by commands defined in the `before_script` or `script`,
+ including:
- Command aliases and variables exported in `script` scripts.
- Changes outside of the working tree (depending on the runner executor), like
software installed by a `before_script` or `script` script.
-- Have a separate timeout, which is hard coded to 5 minutes. See the
- [related issue](https://gitlab.com/gitlab-org/gitlab-runner/-/issues/2716) for details.
+- Have a separate timeout, which is [hard-coded to 5 minutes](https://gitlab.com/gitlab-org/gitlab-runner/-/issues/2716).
- Don't affect the job's exit code. If the `script` section succeeds and the
`after_script` times out or fails, the job exits with code `0` (`Job Succeeded`).
-```yaml
-default:
- after_script:
- - echo "Execute this script in all jobs that don't already have an after_script section."
-
-job1:
- script:
- - echo "This script executes first. When it completes, the global after_script executes."
-
-job:
- script:
- - echo "This script executes first. When it completes, the job's `after_script` executes."
- after_script:
- - echo "Execute this script instead of the global after_script."
-```
-
-You can use [YAML anchors with `after_script`](#yaml-anchors-for-scripts).
-
-#### Script syntax
+If a job times out or is cancelled, the `after_script` commands do not execute.
+[An issue exists](https://gitlab.com/gitlab-org/gitlab/-/issues/15603) to add support for executing `after_script` commands for timed-out or cancelled jobs.
-You can use syntax in [`script`](#script) sections to:
+**Related topics**:
-- [Split long commands](script.md#split-long-commands) into multiline commands.
-- [Use color codes](script.md#add-color-codes-to-script-output) to make job logs easier to review.
+- [Use `after_script` with `default`](script.md#set-a-default-before_script-or-after_script-for-all-jobs)
+ to define a default array of commands that should run after all jobs.
+- You can [ignore non-zero exit codes](script.md#ignore-non-zero-exit-codes).
+- [Use color codes with `after_script`](script.md#add-color-codes-to-script-output)
+ to make job logs easier to review.
- [Create custom collapsible sections](../jobs/index.md#custom-collapsible-sections)
to simplify job log output.
### `stage`
-Use `stage` to define which stage a job runs in. Jobs in the same
-`stage` can execute in parallel (subject to [certain conditions](#use-your-own-runners)).
+Use `stage` to define which [stage](#stages) a job runs in. Jobs in the same
+`stage` can execute in parallel (see **Additional details**).
-Jobs without a `stage` entry use the `test` stage by default. If you do not define
-[`stages`](#stages) in the pipeline, you can use the 5 default stages, which execute in
-this order:
+If `stage` is not defined, the job uses the `test` stage by default.
-- [`.pre`](#pre-and-post)
-- `build`
-- `test`
-- `deploy`
-- [`.post`](#pre-and-post)
-For example:
+**Keyword type**: Job keyword. You can use it only as part of a job.
+
+**Possible inputs**: An array including any number of stage names. Stage names can be:
+
+- The [default stages](#stages).
+- User-defined stages.
+
+**Example of `stage`**:
```yaml
stages:
@@ -841,76 +843,101 @@ stages:
- test
- deploy
-job 0:
- stage: .pre
- script: make something useful before build stage
-
-job 1:
- stage: build
- script: make build dependencies
-
-job 2:
+job1:
stage: build
- script: make build artifacts
+ script:
+ - echo "This job compiles code."
-job 3:
+job2:
stage: test
- script: make test
+ script:
+ - echo "This job tests the compiled code. It runs when the build stage completes."
-job 4:
- stage: deploy
- script: make deploy
+job3:
+ script:
+ - echo "This job also runs in the test stage".
-job 5:
- stage: .post
- script: make something useful at the end of pipeline
+job4:
+ stage: deploy
+ script:
+ - echo "This job deploys the code. It runs when the test stage completes."
```
-#### Use your own runners
-
-When you use your own runners, each runner runs only one job at a time by default.
-Jobs can run in parallel if they run on different runners.
+**Additional details**:
-If you have only one runner, jobs can run in parallel if the runner's
-[`concurrent` setting](https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-global-section)
-is greater than `1`.
+- Jobs can run in parallel if they run on different runners.
+- If you have only one runner, jobs can run in parallel if the runner's
+ [`concurrent` setting](https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-global-section)
+ is greater than `1`.
-#### `.pre` and `.post`
+#### `stage: .pre`
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/31441) in GitLab 12.4.
-Use `pre` and `post` for jobs that need to run first or last in a pipeline.
-
-- `.pre` is guaranteed to always be the first stage in a pipeline.
-- `.post` is guaranteed to always be the last stage in a pipeline.
-
-User-defined stages are executed after `.pre` and before `.post`.
+Use the `.pre` stage to make a job run at the start of a pipeline. `.pre` is
+always the first stage in a pipeline. User-defined stages execute after `.pre`.
+You do not need to define `.pre` in [`stages`](#stages).
You must have a job in at least one stage other than `.pre` or `.post`.
-You can't change the order of `.pre` and `.post`, even if you define them out of order in the `.gitlab-ci.yml` file.
-For example, the following configurations are equivalent:
+**Keyword type**: You can only use it with a job's `stage` keyword.
-```yaml
-stages:
- - .pre
- - a
- - b
- - .post
-```
+**Example of `stage: .pre`**:
```yaml
stages:
- - a
- - .pre
- - b
- - .post
+ - build
+ - test
+
+job1:
+ stage: build
+ script:
+ - echo "This job runs in the build stage."
+
+first-job:
+ stage: .pre
+ script:
+ - echo "This job runs in the .pre stage, before all other stages."
+
+job2:
+ stage: test
+ script:
+ - echo "This job runs in the test stage."
```
+#### `stage: .post`
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/31441) in GitLab 12.4.
+
+Use the `.post` stage to make a job run at the end of a pipeline. `.post`
+is always the last stage in a pipeline. User-defined stages execute before `.post`.
+You do not need to define `.post` in [`stages`](#stages).
+
+You must have a job in at least one stage other than `.pre` or `.post`.
+
+**Keyword type**: You can only use it with a job's `stage` keyword.
+
+**Example of `stage: .post`**:
+
```yaml
stages:
- - a
- - b
+ - build
+ - test
+
+job1:
+ stage: build
+ script:
+ - echo "This job runs in the build stage."
+
+last-job:
+ stage: .post
+ script:
+ - echo "This job runs in the .post stage, after all other stages."
+
+job2:
+ stage: test
+ script:
+ - echo "This job runs in the test stage."
```
### `extends`
@@ -1504,6 +1531,7 @@ in the project.
> - [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/47063) in GitLab 12.2.
> - In GitLab 12.3, maximum number of jobs in `needs` array raised from five to 50.
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/30631) in GitLab 12.8, `needs: []` lets jobs start immediately.
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/30632) in GitLab 14.2, you can refer to jobs in the same stage as the job you are configuring.
Use `needs:` to execute jobs out-of-order. Relationships between jobs
that use `needs` can be visualized as a [directed acyclic graph](../directed_acyclic_graph/index.md).
@@ -1563,13 +1591,11 @@ production:
#### Requirements and limitations
-- In [GitLab 14.1 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/30632)
- you can refer to jobs in the same stage as the job you are configuring. This feature
- is [Deployed behind a feature flag](../../user/feature_flags.md), disabled by default.
-- Disabled on GitLab.com.
-- Not recommended for production use.
-- For GitLab self-managed instances, GitLab adminsitrators
- can choose to [disable it](#enable-or-disable-needs-for-jobs-in-the-same-stage)
+- In [GitLab 14.1 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/30632) you
+ can refer to jobs in the same stage as the job you are configuring. This feature is
+ enabled on GitLab.com and ready for production use. On self-managed [GitLab 14.2 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/30632)
+ this feature is available by default. To hide the feature, ask an administrator to
+ [disable the `ci_same_stage_job_needs` flag](../../administration/feature_flags.md).
- In GitLab 14.0 and older, you can only refer to jobs in earlier stages.
- In GitLab 13.9 and older, if `needs:` refers to a job that might not be added to
a pipeline because of `only`, `except`, or `rules`, the pipeline might fail to create.
@@ -1583,26 +1609,10 @@ production:
name, they overwrite each other and only the last one downloaded is saved.
- `needs:` is similar to `dependencies:` in that it must use jobs from prior stages,
meaning it's impossible to create circular dependencies. Depending on jobs in the
- current stage is not possible either, but support [is planned](https://gitlab.com/gitlab-org/gitlab/-/issues/30632).
+ current stage is not possible either, but [an issue exists](https://gitlab.com/gitlab-org/gitlab/-/issues/30632).
- Stages must be explicitly defined for all jobs
that have the keyword `needs:` or are referred to by one.
-##### Enable or disable `needs` for jobs in the same stage **(FREE SELF)**
-
-`needs` for jobs in the same stage is under development but ready for production use.
-It is deployed behind a feature flag that is **enabled by default**.
-[GitLab administrators with access to the GitLab Rails
-console](../../administration/feature_flags.md)
-can opt to disable it.
-
-To enable it:
-
-`Feature.enable(:ci_same_stage_job_needs)`
-
-To disable it:
-
-`Feature.disable(:ci_same_stage_job_needs)`
-
##### Changing the `needs:` job limit **(FREE SELF)**
The maximum number of jobs that can be defined in `needs:` defaults to 50.
@@ -1860,11 +1870,26 @@ osx job:
- echo "Hello, $USER!"
```
+In [GitLab 14.1 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/35742), you can
+use [CI/CD variables](../variables/index.md) with `tags` for dynamic runner selection:
+
+```yaml
+variables:
+ KUBERNETES_RUNNER: kubernetes
+
+ job:
+ tags:
+ - docker
+ - $KUBERNETES_RUNNER
+ script:
+ - echo "Hello runner selector feature"
+```
+
### `allow_failure`
Use `allow_failure` when you want to let a job fail without impacting the rest of the CI
-suite. The default value is `false`, except for [manual](#whenmanual) jobs that use
-the `when: manual` syntax.
+suite. The default value is `false`, except for [manual](../jobs/job_control.md#create-a-job-that-must-be-run-manually) jobs that use
+the [`when: manual`](#when) syntax.
In jobs that use [`rules:`](#rules), all jobs default to `allow_failure: false`,
*including* `when: manual` jobs.
@@ -1928,28 +1953,23 @@ test_job_2:
### `when`
-Use `when` to implement jobs that run in case of failure or despite the
-failure.
+Use `when` to configure the conditions for when jobs run. If not defined in a job,
+the default value is `when: on_success`.
-The valid values of `when` are:
+**Keyword type**: Job keyword. You can use it only as part of a job.
-1. `on_success` (default) - Execute job only when all jobs in earlier stages succeed,
- or are considered successful because they have `allow_failure: true`.
-1. `on_failure` - Execute job only when at least one job in an earlier stage fails.
-1. `always` - Execute job regardless of the status of jobs in earlier stages.
-1. `manual` - Execute job [manually](#whenmanual).
-1. `delayed` - [Delay the execution of a job](#whendelayed) for a specified duration.
- Added in GitLab 11.14.
-1. `never`:
- - With job [`rules`](#rules), don't execute job.
- - With [`workflow:rules`](#workflow), don't run pipeline.
+**Possible inputs**:
-In the following example, the script:
+- `on_success` (default): Run the job only when all jobs in earlier stages succeed
+ or have `allow_failure: true`.
+- `manual`: Run the job only when [triggered manually](../jobs/job_control.md#create-a-job-that-must-be-run-manually).
+- `always`: Run the job regardless of the status of jobs in earlier stages.
+- `on_failure`: Run the job only when at least one job in an earlier stage fails.
+- `delayed`: [Delay the execution of a job](../jobs/job_control.md#run-a-job-after-a-delay)
+ for a specified duration.
+- `never`: Don't run the job.
-1. Executes `cleanup_build_job` only when `build_job` fails.
-1. Always executes `cleanup_job` as the last step in pipeline regardless of
- success or failure.
-1. Executes `deploy_job` when you run it manually in the GitLab UI.
+**Example of `when`**:
```yaml
stages:
@@ -1988,116 +2008,26 @@ cleanup_job:
when: always
```
-#### `when:manual`
-
-A manual job is a type of job that is not executed automatically and must be explicitly
-started by a user. You might want to use manual jobs for things like deploying to production.
-
-To make a job manual, add `when: manual` to its configuration.
-
-When the pipeline starts, manual jobs display as skipped and do not run automatically.
-They can be started from the pipeline, job, [environment](../environments/index.md#configure-manual-deployments),
-and deployment views.
-
-Manual jobs can be either optional or blocking:
-
-- **Optional**: Manual jobs have [`allow_failure: true](#allow_failure) set by default
- and are considered optional. The status of an optional manual job does not contribute
- to the overall pipeline status. A pipeline can succeed even if all its manual jobs fail.
-
-- **Blocking**: To make a blocking manual job, add `allow_failure: false` to its configuration.
- Blocking manual jobs stop further execution of the pipeline at the stage where the
- job is defined. To let the pipeline continue running, click **{play}** (play) on
- the blocking manual job.
-
- Merge requests in projects with [merge when pipeline succeeds](../../user/project/merge_requests/merge_when_pipeline_succeeds.md)
- enabled can't be merged with a blocked pipeline. Blocked pipelines show a status
- of **blocked**.
-
-When you use [`rules:`](#rules), `allow_failure` defaults to `false`, including for manual jobs.
-
-To trigger a manual job, a user must have permission to merge to the assigned branch.
-You can use [protected branches](../../user/project/protected_branches.md) to more strictly
-[protect manual deployments](#protecting-manual-jobs) from being run by unauthorized users.
-
-In [GitLab 13.5](https://gitlab.com/gitlab-org/gitlab/-/issues/201938) and later, you
-can use `when:manual` in the same job as [`trigger`](#trigger). In GitLab 13.4 and
-earlier, using them together causes the error `jobs:#{job-name} when should be on_success, on_failure or always`.
-
-##### Protecting manual jobs **(PREMIUM)**
-
-Use [protected environments](../environments/protected_environments.md)
-to define a list of users authorized to run a manual job. You can authorize only
-the users associated with a protected environment to trigger manual jobs, which can:
-
-- More precisely limit who can deploy to an environment.
-- Block a pipeline until an approved user "approves" it.
-
-To protect a manual job:
-
-1. Add an `environment` to the job. For example:
-
- ```yaml
- deploy_prod:
- stage: deploy
- script:
- - echo "Deploy to production server"
- environment:
- name: production
- url: https://example.com
- when: manual
- rules:
- - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
- ```
+In this example, the script:
-1. In the [protected environments settings](../environments/protected_environments.md#protecting-environments),
- select the environment (`production` in this example) and add the users, roles or groups
- that are authorized to trigger the manual job to the **Allowed to Deploy** list. Only those in
- this list can trigger this manual job, as well as GitLab administrators
- who are always able to use protected environments.
-
-You can use protected environments with blocking manual jobs to have a list of users
-allowed to approve later pipeline stages. Add `allow_failure: false` to the protected
-manual job and the pipeline's next stages only run after the manual job is triggered
-by authorized users.
-
-#### `when:delayed`
-
-> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/51352) in GitLab 11.4.
-
-Use `when: delayed` to execute scripts after a waiting period, or if you want to avoid
-jobs immediately entering the `pending` state.
-
-You can set the period with `start_in` keyword. The value of `start_in` is an elapsed time in seconds, unless a unit is
-provided. `start_in` must be less than or equal to one week. Examples of valid values include:
-
-- `'5'`
-- `5 seconds`
-- `30 minutes`
-- `1 day`
-- `1 week`
-
-When a stage includes a delayed job, the pipeline doesn't progress until the delayed job finishes.
-You can use this keyword to insert delays between different stages.
-
-The timer of a delayed job starts immediately after the previous stage completes.
-Similar to other types of jobs, a delayed job's timer doesn't start unless the previous stage passes.
+1. Executes `cleanup_build_job` only when `build_job` fails.
+1. Always executes `cleanup_job` as the last step in pipeline regardless of
+ success or failure.
+1. Executes `deploy_job` when you run it manually in the GitLab UI.
-The following example creates a job named `timed rollout 10%` that is executed 30 minutes after the previous stage completes:
+**Additional details**:
-```yaml
-timed rollout 10%:
- stage: deploy
- script: echo 'Rolling out 10% ...'
- when: delayed
- start_in: 30 minutes
-```
+- In [GitLab 13.5](https://gitlab.com/gitlab-org/gitlab/-/issues/201938) and later, you
+ can use `when:manual` in the same job as [`trigger`](#trigger). In GitLab 13.4 and
+ earlier, using them together causes the error `jobs:#{job-name} when should be on_success, on_failure or always`.
+- The default behavior of `allow_failure` changes to `true` with `when: manual`.
+ However, if you use `when: manual` with [`rules`](#rules), `allow_failure` defaults
+ to `false`.
-To stop the active timer of a delayed job, click the **{time-out}** (**Unschedule**) button.
-This job can no longer be scheduled to run automatically. You can, however, execute the job manually.
+**Related topics**:
-To start a delayed job immediately, click the **Play** button.
-Soon GitLab Runner picks up and starts the job.
+- `when` can be used with [`rules`](#rules) for more dynamic job control.
+- `when` can be used with [`workflow`](#workflow) to control when a pipeline can start.
### `environment`
@@ -2225,11 +2155,11 @@ In the above example, the `review_app` job deploys to the `review`
environment. A new `stop_review_app` job is listed under `on_stop`.
After the `review_app` job is finished, it triggers the
`stop_review_app` job based on what is defined under `when`. In this case,
-it is set to `manual`, so it needs a [manual action](#whenmanual) from
+it is set to `manual`, so it needs a [manual action](../jobs/job_control.md#create-a-job-that-must-be-run-manually) from
the GitLab UI to run.
Also in the example, `GIT_STRATEGY` is set to `none`. If the
-`stop_review_app` job is [automatically triggered](../environments/index.md#stopping-an-environment),
+`stop_review_app` job is [automatically triggered](../environments/index.md#stop-an-environment),
the runner won't try to check out the code after the branch is deleted.
The example also overwrites global variables. If your `stop` `environment` job depends
@@ -3262,7 +3192,7 @@ dashboards.
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/207528) in GitLab 13.0.
> - Requires [GitLab Runner](https://docs.gitlab.com/runner/) 11.5 and above.
-The `terraform` report obtains a Terraform `tfplan.json` file. [JQ processing required to remove credentials](../../user/infrastructure/mr_integration.md#setup). The collected Terraform
+The `terraform` report obtains a Terraform `tfplan.json` file. [JQ processing required to remove credentials](../../user/infrastructure/mr_integration.md#configure-terraform-report-artifacts). The collected Terraform
plan report uploads to GitLab as an artifact and displays
in merge requests. For more information, see
[Output `terraform plan` information into a merge request](../../user/infrastructure/mr_integration.md).
@@ -3346,6 +3276,50 @@ Coverage output from [child pipelines](../pipelines/parent_child_pipelines.md) i
or displayed. Check [the related issue](https://gitlab.com/gitlab-org/gitlab/-/issues/280818)
for more details.
+### `dast_configuration` **(ULTIMATE)**
+
+> [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/5981) in GitLab 14.1.
+
+Use the `dast_configuration` keyword to specify a site profile and scanner profile to be used in a
+CI/CD configuration. Both profiles must first have been created in the project. The job's stage must
+be `dast`.
+
+**Keyword type**: Job keyword. You can use only as part of a job.
+
+**Possible inputs**: One each of `site_profile` and `scanner_profile`.
+
+- Use `site_profile` to specify the site profile to be used in the job.
+- Use `scanner_profile` to specify the scanner profile to be used in the job.
+
+**Example of `dast_configuration`**:
+
+```yaml
+stages:
+ - build
+ - dast
+
+include:
+ - template: DAST.gitlab-ci.yml
+
+dast:
+ dast_configuration:
+ site_profile: "Example Co"
+ scanner_profile: "Quick Passive Test"
+```
+
+In this example, the `dast` job extends the `dast` configuration added with the `include:` keyword
+to select a specific site profile and scanner profile.
+
+**Additional details**:
+
+- Settings contained in either a site profile or scanner profile take precedence over those
+ contained in the DAST template.
+
+**Related topics**:
+
+- [Site profile](../../user/application_security/dast/index.md#site-profile).
+- [Scanner profile](../../user/application_security/dast/index.md#scanner-profile).
+
### `retry`
> [Introduced](https://gitlab.com/gitlab-org/gitlab-runner/-/issues/3515) in GitLab 11.5, you can control which failures to retry on.
@@ -3500,7 +3474,7 @@ but with different variable values for each instance of the job.
There can be from 2 to 50 jobs.
Jobs can only run in parallel if there are multiple runners, or a single runner is
-[configured to run multiple jobs concurrently](#use-your-own-runners).
+configured to run multiple jobs concurrently.
Every job gets the same `CI_NODE_TOTAL` [CI/CD variable](../variables/index.md#predefined-cicd-variables) value, and a unique `CI_NODE_INDEX` value.
@@ -3590,6 +3564,23 @@ deploystacks: [gcp, data]
deploystacks: [vultr, data]
```
+In [GitLab 14.1 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/239737), you can
+use the variables defined in `parallel: matrix` with the [`tags`](#tags) keyword for
+dynamic runner selection.
+
+```yaml
+deploystacks:
+ stage: deploy
+ parallel:
+ matrix:
+ - PROVIDER: aws
+ STACK: [monitoring, app1]
+ - PROVIDER: gcp
+ STACK: [data]
+ tags:
+ - ${PROVIDER}-${STACK}
+```
+
### `trigger`
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/8997) in [GitLab Premium](https://about.gitlab.com/pricing/) 11.8.
@@ -3612,7 +3603,7 @@ view which job triggered a downstream pipeline. In the [pipeline graph](../pipel
hover over the downstream pipeline job.
In [GitLab 13.5](https://gitlab.com/gitlab-org/gitlab/-/issues/201938) and later, you
-can use [`when:manual`](#whenmanual) in the same job as `trigger`. In GitLab 13.4 and
+can use [`when:manual`](#when) in the same job as `trigger`. In GitLab 13.4 and
earlier, using them together causes the error `jobs:#{job-name} when should be on_success, on_failure or always`.
You [cannot start `manual` trigger jobs with the API](https://gitlab.com/gitlab-org/gitlab/-/issues/284086).
@@ -3931,19 +3922,28 @@ image: registry.gitlab.com/gitlab-org/release-cli:latest
#### `release-cli` for shell executors
-> [Introduced](https://gitlab.com/gitlab-org/release-cli/-/issues/21) in GitLab 13.8.
+> - [Introduced](https://gitlab.com/gitlab-org/release-cli/-/issues/21) in GitLab 13.8.
+> - [Changed](https://gitlab.com/gitlab-org/release-cli/-/merge_requests/108): the `release-cli` binaries are also
+[available in the Package Registry](https://gitlab.com/jaime/release-cli/-/packages)
+starting from GitLab 14.2.
For GitLab Runner shell executors, you can download and install the `release-cli` manually for your [supported OS and architecture](https://release-cli-downloads.s3.amazonaws.com/latest/index.html).
Once installed, the `release` keyword should be available to you.
**Install on Unix/Linux**
-1. Download the binary for your system, in the following example for amd64 systems:
+1. Download the binary for your system from S3, in the following example for amd64 systems:
```shell
curl --location --output /usr/local/bin/release-cli "https://release-cli-downloads.s3.amazonaws.com/latest/release-cli-linux-amd64"
```
+Or from the GitLab package registry:
+
+ ```shell
+ curl --location --output /usr/local/bin/release-cli "https://gitlab.com/api/v4/projects/gitlab-org%2Frelease-cli/packages/generic/release-cli/latest/release-cli-darwin-amd64"
+ ```
+
1. Give it permissions to execute:
```shell
@@ -4527,50 +4527,6 @@ You can use [CI/CD variables](../variables/index.md) to configure how the runner
You can also use variables to configure how many times a runner
[attempts certain stages of job execution](../runners/configure_runners.md#job-stages-attempts).
-## `dast_configuration` **(ULTIMATE)**
-
-> [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/5981) in GitLab 14.1.
-
-Use the `dast_configuration` keyword to specify a site profile and scanner profile to be used in a
-CI/CD configuration. Both profiles must first have been created in the project. The job's stage must
-be `dast`.
-
-**Keyword type**: Job keyword. You can use only as part of a job.
-
-**Possible inputs**: One each of `site_profile` and `scanner_profile`.
-
-- Use `site_profile` to specify the site profile to be used in the job.
-- Use `scanner_profile` to specify the scanner profile to be used in the job.
-
-**Example of `dast_configuration`**:
-
-```yaml
-stages:
- - build
- - dast
-
-include:
- - template: DAST.gitlab-ci.yml
-
-dast:
- dast_configuration:
- site_profile: "Example Co"
- scanner_profile: "Quick Passive Test"
-```
-
-In this example, the `dast` job extends the `dast` configuration added with the `include:` keyword
-to select a specific site profile and scanner profile.
-
-**Additional details**:
-
-- Settings contained in either a site profile or scanner profile take precedence over those
- contained in the DAST template.
-
-**Related topics**:
-
-- [Site profile](../../user/application_security/dast/index.md#site-profile).
-- [Scanner profile](../../user/application_security/dast/index.md#scanner-profile).
-
## YAML-specific features
In your `.gitlab-ci.yml` file, you can use YAML-specific features like anchors (`&`), aliases (`*`),
diff --git a/doc/ci/yaml/script.md b/doc/ci/yaml/script.md
index 9e118895d7c..93c1a6afe69 100644
--- a/doc/ci/yaml/script.md
+++ b/doc/ci/yaml/script.md
@@ -14,6 +14,85 @@ You can use special syntax in [`script`](index.md#script) sections to:
- [Create custom collapsible sections](../jobs/index.md#custom-collapsible-sections)
to simplify job log output.
+## Use special characters with `script:`
+
+Sometimes, `script` commands must be wrapped in single or double quotes.
+For example, commands that contain a colon (`:`) must be wrapped in single quotes (`'`).
+The YAML parser needs to interpret the text as a string rather than
+a "key: value" pair.
+
+For example, this script uses a colon:
+
+```yaml
+job:
+ script:
+ - curl --request POST --header 'Content-Type: application/json' "https://gitlab/api/v4/projects"
+```
+
+To be considered valid YAML, you must wrap the entire command in single quotes. If
+the command already uses single quotes, you should change them to double quotes (`"`)
+if possible:
+
+```yaml
+job:
+ script:
+ - 'curl --request POST --header "Content-Type: application/json" "https://gitlab/api/v4/projects"'
+```
+
+You can verify the syntax is valid with the [CI Lint](../lint.md) tool.
+
+Be careful when using these characters as well:
+
+- `{`, `}`, `[`, `]`, `,`, `&`, `*`, `#`, `?`, `|`, `-`, `<`, `>`, `=`, `!`, `%`, `@`, `` ` ``.
+
+## Ignore non-zero exit codes
+
+When script commands return an exit code other than zero, the job fails and further
+commands do not execute.
+
+Store the exit code in a variable to avoid this behavior:
+
+```yaml
+job:
+ script:
+ - false || exit_code=$?
+ - if [ $exit_code -ne 0 ]; then echo "Previous command failed"; fi;
+```
+
+## Set a default `before_script` or `after_script` for all jobs
+
+You can use [`before_script`](index.md#before_script) and [`after_script`](index.md#after_script)
+with [`default`](index.md#custom-default-keyword-values):
+
+- Use `before_script` with `default` to define a default array of commands that
+ should run before the `script` commands in all jobs.
+- Use `after_script` with default to define a default array of commands
+ that should run after the job completes.
+
+You can overwrite a default by defining a different one in a job. To ignore the default
+use `before_script: []` or `after_script: []`:
+
+```yaml
+default:
+ before_script:
+ - echo "Execute this `before_script` in all jobs by default."
+ after_script:
+ - echo "Execute this `after_script` in all jobs by default."
+
+job1:
+ script:
+ - echo "These script commands execute after the default `before_script`,"
+ - echo "and before the default `after_script`."
+
+job2:
+ before_script:
+ - echo "Execute this script instead of the default `before_script`."
+ script:
+ - echo "This script executes after the job's `before_script`,"
+ - echo "but the job does not use the default `after_script`."
+ after_script: []
+```
+
## Split long commands
You can split long commands into multiline commands to improve readability with
diff --git a/doc/development/README.md b/doc/development/README.md
index 5ab8653dc35..0e6c2f63f9e 100644
--- a/doc/development/README.md
+++ b/doc/development/README.md
@@ -1,5 +1,6 @@
---
redirect_to: 'index.md'
+remove_date: '2021-09-28'
---
This document was moved to [another location](index.md).
diff --git a/doc/development/adding_database_indexes.md b/doc/development/adding_database_indexes.md
index 01904d37883..16dd581113c 100644
--- a/doc/development/adding_database_indexes.md
+++ b/doc/development/adding_database_indexes.md
@@ -79,7 +79,7 @@ especially the case for small tables.
If a table is expected to grow in size and you expect your query has to filter
out a lot of rows you may want to consider adding an index. If the table size is
-very small (e.g. less than `1,000` records) or any existing indexes filter out
+very small (for example, fewer than `1,000` records) or any existing indexes filter out
enough rows you may _not_ want to add a new index.
## Maintenance Overhead
@@ -226,3 +226,88 @@ def down
remove_concurrent_index_by_name :projects, INDEX_NAME
end
```
+
+## Create indexes asynchronously
+
+For very large tables, index creation can be a challenge to manage.
+While `add_concurrent_index` creates indexes in a way that does not block
+normal traffic, it can still be problematic when index creation runs for
+many hours. Necessary database operations like `autovacuum` cannot run, and
+on GitLab.com, the deployment process is blocked waiting for index
+creation to finish.
+
+To limit impact on GitLab.com, a process exists to create indexes
+asynchronously during weekend hours. Due to generally lower levels of
+traffic and lack of regular deployments, this process allows the
+creation of indexes to proceed with a lower level of risk. The below
+sections describe the steps required to use these features:
+
+1. [Schedule the index to be created](#schedule-the-index-to-be-created).
+1. [Verify the MR was deployed and the index exists in production](#verify-the-mr-was-deployed-and-the-index-exists-in-production).
+1. [Add a migration to create the index synchronously](#add-a-migration-to-create-the-index-synchronously).
+
+### Schedule the index to be created
+
+Create an MR with a post-deployment migration which prepares the index
+for asynchronous creation. An example of creating an index using
+the asynchronous index helpers can be seen in the block below. This migration
+enters the index name and definition into the `postgres_async_indexes`
+table. The process that runs on weekends pulls indexes from this
+table and attempt to create them.
+
+```ruby
+# in db/post_migrate/
+
+INDEX_NAME = 'index_ci_builds_on_some_column'
+
+def up
+ prepare_async_index :ci_builds, :some_column, name: INDEX_NAME
+end
+
+def down
+ unprepare_async_index :ci_builds, :some_column, name: INDEX_NAME
+end
+```
+
+### Verify the MR was deployed and the index exists in production
+
+You can verify if the MR was deployed to GitLab.com by executing
+`/chatops run auto_deploy status <merge_sha>`. To verify existence of
+the index, you can:
+
+- Use a meta-command in #database-lab, such as: `\di <index_name>`
+- Ask someone in #database to check if the index exists
+- With proper access, you can also verify directly on production or in a
+production clone
+
+### Add a migration to create the index synchronously
+
+After the index is verified to exist on the production database, create a second
+merge request that adds the index synchronously. The synchronous
+migration results in a no-op on GitLab.com, but you should still add the
+migration as expected for other installations. The below block
+demonstrates how to create the second migration for the previous
+asynchronous example.
+
+WARNING:
+The responsibility lies on the individual writing the migrations to verify
+the index exists in production before merging a second migration that
+adds the index using `add_concurrent_index`. If the second migration is
+deployed and the index has not yet been created, the index is created
+synchronously when the second migration executes.
+
+```ruby
+# in db/post_migrate/
+
+INDEX_NAME = 'index_ci_builds_on_some_column'
+
+disable_ddl_transaction!
+
+def up
+ add_concurrent_index :ci_builds, :some_column, name: INDEX_NAME
+end
+
+def down
+ remove_concurrent_index_by_name :ci_builds, INDEX_NAME
+end
+```
diff --git a/doc/development/adding_service_component.md b/doc/development/adding_service_component.md
index f3e23906ac6..503d1b7e55b 100644
--- a/doc/development/adding_service_component.md
+++ b/doc/development/adding_service_component.md
@@ -90,4 +90,4 @@ In addition, any system dependencies used in Omnibus packages or the Cloud Nativ
If the service component needs to be updated or released with the monthly GitLab release, then the component should be added to the [release tools automation](https://gitlab.com/gitlab-org/release-tools). This project is maintained by the [Delivery team](https://about.gitlab.com/handbook/engineering/infrastructure/team/delivery/). A list of the projects managed this way can be found in the [release tools project directory](https://about.gitlab.com/handbook/engineering/infrastructure/team/delivery/).
-For example, during the monthly GitLab release, the desired version of Gitaly, GitLab Workhorse, GitLab Shell, etc., need to synchronized through the various release pipelines.
+For example, during the monthly GitLab release, the desired version of Gitaly, GitLab Workhorse and GitLab Shell need to be synchronized through the various release pipelines.
diff --git a/doc/development/api_graphql_styleguide.md b/doc/development/api_graphql_styleguide.md
index c12b66a94a7..40cc8f5ec45 100644
--- a/doc/development/api_graphql_styleguide.md
+++ b/doc/development/api_graphql_styleguide.md
@@ -11,9 +11,12 @@ This document outlines the style guide for the GitLab [GraphQL API](../api/graph
## How GitLab implements GraphQL
<!-- vale gitlab.Spelling = NO -->
+
We use the [GraphQL Ruby gem](https://graphql-ruby.org/) written by [Robert Mosolgo](https://github.com/rmosolgo/).
+In addition, we have a subscription to [GraphQL Pro](https://graphql.pro/). For
+details see [GraphQL Pro subscription](graphql_guide/graphql_pro.md).
+
<!-- vale gitlab.Spelling = YES -->
-In addition, we have a subscription to [GraphQL Pro](https://graphql.pro/). For details see [GraphQL Pro subscription](graphql_guide/graphql_pro.md).
All GraphQL queries are directed to a single endpoint
([`app/controllers/graphql_controller.rb#execute`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app%2Fcontrollers%2Fgraphql_controller.rb)),
@@ -133,20 +136,24 @@ For example, `app/graphql/types/issue_type.rb`:
```ruby
graphql_name 'Issue'
-field :iid, GraphQL::ID_TYPE, null: true
-field :title, GraphQL::STRING_TYPE, null: true
+field :iid, GraphQL::Types::ID, null: true
+field :title, GraphQL::Types::String, null: true
# we also have a method here that we've defined, that extends `field`
markdown_field :title_html, null: true
-field :description, GraphQL::STRING_TYPE, null: true
+field :description, GraphQL::Types::String, null: true
markdown_field :description_html, null: true
```
We give each type a name (in this case `Issue`).
The `iid`, `title` and `description` are _scalar_ GraphQL types.
-`iid` is a `GraphQL::ID_TYPE`, a special string type that signifies a unique ID.
-`title` and `description` are regular `GraphQL::STRING_TYPE` types.
+`iid` is a `GraphQL::Types::ID`, a special string type that signifies a unique ID.
+`title` and `description` are regular `GraphQL::Types::String` types.
+
+Note that the old scalar types `GraphQL:ID`, `GraphQL::INT_TYPE`, `GraphQL::STRING_TYPE`,
+and `GraphQL:BOOLEAN_TYPE` are no longer allowed. Please use `GraphQL::Types::ID`,
+`GraphQL::Types::Int`, `GraphQL::Types::String`, and `GraphQL::Types::Boolean`.
When exposing a model through the GraphQL API, we do so by creating a
new type in `app/graphql/types`. You can also declare custom GraphQL data types
@@ -225,7 +232,7 @@ Using an example from
[`Types::Notes::DiscussionType`](https://gitlab.com/gitlab-org/gitlab/-/blob/3c95bd9/app/graphql/types/notes/discussion_type.rb#L24-26):
```ruby
-field :reply_id, GraphQL::ID_TYPE
+field :reply_id, GraphQL::Types::ID
def reply_id
::Gitlab::GlobalId.build(object, id: object.reply_id)
@@ -402,7 +409,7 @@ class BranchResolver < BaseResolver
type ::Types::BranchType, null: true
calls_gitaly!
- argument name: ::GraphQL::STRING_TYPE, required: true
+ argument name: ::GraphQL::Types::String, required: true
def resolve(name:)
object.branch(name)
@@ -499,7 +506,7 @@ everyone.
Example:
```ruby
-field :test_field, type: GraphQL::STRING_TYPE,
+field :test_field, type: GraphQL::Types::String,
null: true,
description: 'Some test field.',
feature_flag: :my_feature_flag
@@ -523,7 +530,7 @@ When applying a feature flag to toggle the value of a field, the
Example:
```ruby
-field :foo, GraphQL::STRING_TYPE,
+field :foo, GraphQL::Types::String,
null: true,
description: 'Some test field. Will always return `null`' \
'if `my_feature_flag` feature flag is disabled.'
@@ -553,7 +560,7 @@ The value of the property is a `Hash` of:
Example:
```ruby
-field :token, GraphQL::STRING_TYPE, null: true,
+field :token, GraphQL::Types::String, null: true,
deprecated: { reason: 'Login via token has been removed', milestone: '10.0' },
description: 'Token for login.'
```
@@ -795,15 +802,15 @@ We can use GraphQL types like this:
```ruby
module Types
class ChartType < BaseObject
- field :title, GraphQL::STRING_TYPE, null: true, description: 'Title of the chart.'
+ field :title, GraphQL::Types::String, null: true, description: 'Title of the chart.'
field :data, [Types::ChartDatumType], null: true, description: 'Data of the chart.'
end
end
module Types
class ChartDatumType < BaseObject
- field :x, GraphQL::INT_TYPE, null: true, description: 'X-axis value of the chart datum.'
- field :y, GraphQL::INT_TYPE, null: true, description: 'Y-axis value of the chart datum.'
+ field :x, GraphQL::Types::Int, null: true, description: 'X-axis value of the chart datum.'
+ field :y, GraphQL::Types::Int, null: true, description: 'Y-axis value of the chart datum.'
end
end
```
@@ -817,7 +824,7 @@ A description of a field or argument is given using the `description:`
keyword. For example:
```ruby
-field :id, GraphQL::ID_TYPE, description: 'ID of the resource.'
+field :id, GraphQL::Types::ID, description: 'ID of the resource.'
```
Descriptions of fields and arguments are viewable to users through:
@@ -833,8 +840,8 @@ descriptions:
- Mention the name of the resource in the description. Example:
`'Labels of the issue'` (issue being the resource).
- Use `"{x} of the {y}"` where possible. Example: `'Title of the issue'`.
- Do not start descriptions with `The`.
-- Descriptions of `GraphQL::BOOLEAN_TYPE` fields should answer the question: "What does
+ Do not start descriptions with `The` or `A`, for consistency and conciseness.
+- Descriptions of `GraphQL::Types::Boolean` fields should answer the question: "What does
this field do?". Example: `'Indicates project has a Git repository'`.
- Always include the word `"timestamp"` when describing an argument or
field of type `Types::TimeType`. This lets the reader know that the
@@ -844,8 +851,8 @@ descriptions:
Example:
```ruby
-field :id, GraphQL::ID_TYPE, description: 'ID of the issue.'
-field :confidential, GraphQL::BOOLEAN_TYPE, description: 'Indicates the issue is confidential.'
+field :id, GraphQL::Types::ID, description: 'ID of the issue.'
+field :confidential, GraphQL::Types::Boolean, description: 'Indicates the issue is confidential.'
field :closed_at, Types::TimeType, description: 'Timestamp of when the issue was closed.'
```
@@ -861,7 +868,7 @@ passing it the type, and field name to copy the description of.
Example:
```ruby
-argument :title, GraphQL::STRING_TYPE,
+argument :title, GraphQL::Types::String,
required: false,
description: copy_field_description(Types::MergeRequestType, :title)
```
@@ -874,7 +881,7 @@ provide a `see` property on fields. For example:
```ruby
field :genus,
- type: GraphQL::STRING_TYPE,
+ type: GraphQL::Types::String,
null: true,
description: 'A taxonomic genus.'
see: { 'Wikipedia page on genera' => 'https://wikipedia.org/wiki/Genus' }
@@ -923,7 +930,7 @@ class PostResolver < BaseResolver
authorize :read_blog
description 'Blog posts, optionally filtered by name'
- argument :name, [::GraphQL::STRING_TYPE], required: false, as: :slug
+ argument :name, [::GraphQL::Types::String], required: false, as: :slug
alias_method :blog, :object
@@ -1015,10 +1022,10 @@ class JobsResolver < BaseResolver
type JobType.connection_type, null: true
authorize :read_pipeline
- argument :name, [::GraphQL::STRING_TYPE], required: false
+ argument :name, [::GraphQL::Types::String], required: false
when_single do
- argument :name, ::GraphQL::STRING_TYPE, required: true
+ argument :name, ::GraphQL::Types::String, required: true
end
def resolve(**args)
@@ -1039,13 +1046,13 @@ class JobsResolver < BaseResolver
type JobType.connection_type, null: true
authorize :read_pipeline
- argument :name, [::GraphQL::STRING_TYPE], required: false
+ argument :name, [::GraphQL::Types::String], required: false
argument :id, [::Types::GlobalIDType[::Job]],
required: false,
prepare: ->(ids, ctx) { ids.map(&:model_id) }
when_single do
- argument :name, ::GraphQL::STRING_TYPE, required: false
+ argument :name, ::GraphQL::Types::String, required: false
argument :id, ::Types::GlobalIDType[::Job],
required: false
prepare: ->(id, ctx) { id.model_id }
@@ -1357,11 +1364,36 @@ Arguments for a mutation are defined using `argument`.
Example:
```ruby
-argument :my_arg, GraphQL::STRING_TYPE,
+argument :my_arg, GraphQL::Types::String,
required: true,
description: "A description of the argument."
```
+#### Nullability
+
+Arguments can be marked as `required: true` which means the value must be present and not `null`.
+If a required argument's value can be `null`, use the `required: :nullable` declaration.
+
+Example:
+
+```ruby
+argument :due_date,
+ Types::TimeType,
+ required: :nullable,
+ description: 'The desired due date for the issue. Due date is removed if null.'
+```
+
+In the above example, the `due_date` argument must be given, but unlike the GraphQL spec, the value can be `null`.
+This allows 'unsetting' the due date in a single mutation rather than creating a new mutation for removing the due date.
+
+```ruby
+{ due_date: null } # => OK
+{ due_date: "2025-01-10" } # => OK
+{ } # => invalid (not given)
+```
+
+#### Keywords
+
Each GraphQL `argument` defined is passed to the `#resolve` method
of a mutation as keyword arguments.
@@ -1373,6 +1405,8 @@ def resolve(my_arg:)
end
```
+#### Input Types
+
`graphql-ruby` wraps up arguments into an
[input type](https://graphql.org/learn/schema/#input-types).
@@ -1382,16 +1416,16 @@ defines these arguments (some
[through inheritance](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/graphql/mutations/merge_requests/base.rb)):
```ruby
-argument :project_path, GraphQL::ID_TYPE,
+argument :project_path, GraphQL::Types::ID,
required: true,
description: "The project the merge request to mutate is in."
-argument :iid, GraphQL::STRING_TYPE,
+argument :iid, GraphQL::Types::String,
required: true,
description: "The IID of the merge request to mutate."
argument :draft,
- GraphQL::BOOLEAN_TYPE,
+ GraphQL::Types::Boolean,
required: false,
description: <<~DESC
Whether or not to set the merge request as a draft.
diff --git a/doc/development/api_styleguide.md b/doc/development/api_styleguide.md
index c16e86726a8..73814399d2e 100644
--- a/doc/development/api_styleguide.md
+++ b/doc/development/api_styleguide.md
@@ -148,7 +148,7 @@ to make this easier.
## Using HTTP status helpers
-For non-200 HTTP responses, use the provided helpers in `lib/api/helpers.rb` to ensure correct behavior (`not_found!`, `no_content!` etc.). These `throw` inside Grape and abort the execution of your endpoint.
+For non-200 HTTP responses, use the provided helpers in `lib/api/helpers.rb` to ensure correct behavior (like `not_found!` or `no_content!`). These `throw` inside Grape and abort the execution of your endpoint.
For `DELETE` requests, you should also generally use the `destroy_conditionally!` helper which by default returns a `204 No Content` response on success, or a `412 Precondition Failed` response if the given `If-Unmodified-Since` header is out of range. This helper calls `#destroy` on the passed resource, but you can also implement a custom deletion method by passing a block.
diff --git a/doc/development/architecture.md b/doc/development/architecture.md
index f39171b1e69..a487e84d090 100644
--- a/doc/development/architecture.md
+++ b/doc/development/architecture.md
@@ -344,7 +344,7 @@ Component statuses are linked to configuration documentation for each component.
| [Certificate Management](#certificate-management) | TLS Settings, Let's Encrypt | ✅ | ✅ | ✅ | ⚙ | ✅ | ⚙ | ⚙ | CE & EE |
| [Consul](#consul) | Database node discovery, failover | ⚙ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | EE Only |
| [Database Migrations](#database-migrations) | Database migrations | ✅ | ✅ | ✅ | ✅ | ✅ | ⚙ | ✅ | CE & EE |
-| [Elasticsearch](#elasticsearch) | Improved search within GitLab | ⤓ | ⚙ | ⤓ | ⤓ | ✅ | ⤓ | ⤓ | EE Only |
+| [Elasticsearch](#elasticsearch) | Improved search within GitLab | ⤓ | ⚙ | ⤓ | ⤓ | ✅ | ⤓ | ⚙ | EE Only |
| [Gitaly](#gitaly) | Git RPC service for handling all Git calls made by GitLab | ✅ | ✅ | ✅ | ✅ | ✅ | ⚙ | ✅ | CE & EE |
| [GitLab Exporter](#gitlab-exporter) | Generates a variety of GitLab metrics | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | CE & EE |
| [GitLab Geo Node](#gitlab-geo) | Geographically distributed GitLab nodes | ⚙ | ⚙ | ❌ | ❌ | ✅ | ❌ | ⚙ | EE Only |
@@ -352,18 +352,18 @@ Component statuses are linked to configuration documentation for each component.
| [GitLab Pages](#gitlab-pages) | Hosts static websites | ⚙ | ⚙ | ❌ | ❌ | ✅ | ⚙ | ⚙ | CE & EE |
| [GitLab Kubernetes Agent](#gitlab-kubernetes-agent) | Integrate Kubernetes clusters in a cloud-native way | ⚙ | ⚙ | ⚙ | ❌ | ❌ | ⤓ | ⚙ | EE Only |
| [GitLab self-monitoring: Alertmanager](#alertmanager) | Deduplicates, groups, and routes alerts from Prometheus | ⚙ | ⚙ | ✅ | ⚙ | ✅ | ❌ | ❌ | CE & EE |
-| [GitLab self-monitoring: Grafana](#grafana) | Metrics dashboard | ✅ | ✅ | ⚙ | ⤓ | ✅ | ❌ | ❌ | CE & EE |
+| [GitLab self-monitoring: Grafana](#grafana) | Metrics dashboard | ✅ | ✅ | ⚙ | ⤓ | ✅ | ❌ | ⚙ | CE & EE |
| [GitLab self-monitoring: Jaeger](#jaeger) | View traces generated by the GitLab instance | ❌ | ⚙ | ⚙ | ❌ | ❌ | ⤓ | ⚙ | CE & EE |
-| [GitLab self-monitoring: Prometheus](#prometheus) | Time-series database, metrics collection, and query service | ✅ | ✅ | ✅ | ⚙ | ✅ | ❌ | ❌ | CE & EE |
+| [GitLab self-monitoring: Prometheus](#prometheus) | Time-series database, metrics collection, and query service | ✅ | ✅ | ✅ | ⚙ | ✅ | ❌ | ⚙ | CE & EE |
| [GitLab self-monitoring: Sentry](#sentry) | Track errors generated by the GitLab instance | ⤓ | ⤓ | ⤓ | ❌ | ✅ | ⤓ | ⤓ | CE & EE |
| [GitLab Shell](#gitlab-shell) | Handles `git` over SSH sessions | ✅ | ✅ | ✅ | ✅ | ✅ | ⚙ | ✅ | CE & EE |
| [GitLab Workhorse](#gitlab-workhorse) | Smart reverse proxy, handles large HTTP requests | ✅ | ✅ | ✅ | ✅ | ✅ | ⚙ | ✅ | CE & EE |
| [Inbound email (SMTP)](#inbound-email) | Receive messages to update issues | ⤓ | ⤓ | ⚙ | ⤓ | ✅ | ⤓ | ⤓ | CE & EE |
-| [Jaeger integration](#jaeger) | Distributed tracing for deployed apps | ⤓ | ⤓ | ⤓ | ⤓ | ⤓ | ⤓ | ⤓ | EE Only |
-| [LDAP Authentication](#ldap-authentication) | Authenticate users against centralized LDAP directory | ⤓ | ⤓ | ⤓ | ⤓ | ❌ | ⤓ | ⤓ | CE & EE |
-| [Mattermost](#mattermost) | Open-source Slack alternative | ⚙ | ⚙ | ⤓ | ⤓ | ⤓ | ❌ | ❌ | CE & EE |
+| [Jaeger integration](#jaeger) | Distributed tracing for deployed apps | ⤓ | ⤓ | ⤓ | ⤓ | ⤓ | ⤓ | ⚙ | EE Only |
+| [LDAP Authentication](#ldap-authentication) | Authenticate users against centralized LDAP directory | ⤓ | ⤓ | ⤓ | ⤓ | ❌ | ⤓ | ⚙ | CE & EE |
+| [Mattermost](#mattermost) | Open-source Slack alternative | ⚙ | ⚙ | ⤓ | ⤓ | ⤓ | ❌ | ⚙ | CE & EE |
| [MinIO](#minio) | Object storage service | ⤓ | ⤓ | ✅ | ✅ | ✅ | ❌ | ⚙ | CE & EE |
-| [NGINX](#nginx) | Routes requests to appropriate components, terminates SSL | ✅ | ✅ | ✅ | ⚙ | ✅ | ⤓ | ❌ | CE & EE |
+| [NGINX](#nginx) | Routes requests to appropriate components, terminates SSL | ✅ | ✅ | ✅ | ⚙ | ✅ | ⤓ | ⚙ | CE & EE |
| [Node Exporter](#node-exporter) | Prometheus endpoint with system metrics | ✅ | ✅ | N/A | N/A | ✅ | ❌ | ❌ | CE & EE |
| [Outbound email (SMTP)](#outbound-email) | Send email messages to users | ⤓ | ⤓ | ⚙ | ⤓ | ✅ | ⤓ | ⤓ | CE & EE |
| [Patroni](#patroni) | Manage PostgreSQL HA cluster leader selection and replication | ⚙ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | EE Only |
@@ -536,7 +536,7 @@ You can use it either for personal or business websites, such as portfolios, doc
- [Source](https://docs.gitlab.com/runner/)
- [GDK](https://gitlab.com/gitlab-org/gitlab-development-kit/blob/main/doc/howto/runner.md)
- Layer: Core Service (Processor)
-- GitLab.com: [Runner](../user/gitlab_com/index.md#shared-runners)
+- GitLab.com: [Runners](../ci/runners/index.md)
GitLab Runner runs jobs and sends the results to GitLab.
diff --git a/doc/development/audit_event_guide/index.md b/doc/development/audit_event_guide/index.md
index f809293df59..65a7fa0ae90 100644
--- a/doc/development/audit_event_guide/index.md
+++ b/doc/development/audit_event_guide/index.md
@@ -83,7 +83,7 @@ def audit_remove(model)
end
```
-Please note that this method does not support actions that are asynchronous, or
+This method does not support actions that are asynchronous, or
span across multiple processes (for example, background jobs).
### Using standard method call to record single event
diff --git a/doc/development/avoiding_downtime_in_migrations.md b/doc/development/avoiding_downtime_in_migrations.md
index 646b07f7266..b844415c94e 100644
--- a/doc/development/avoiding_downtime_in_migrations.md
+++ b/doc/development/avoiding_downtime_in_migrations.md
@@ -47,6 +47,9 @@ Multiple columns can be ignored, too:
ignore_columns %i[updated_at created_at], remove_with: '12.7', remove_after: '2020-01-22'
```
+If the model exists in CE and EE, the column has to be ignored in the CE model. If the
+model only exists in EE, then it has to be added there.
+
We require indication of when it is safe to remove the column ignore with:
- `remove_with`: set to a GitLab release typically two releases (M+2) after adding the
@@ -235,7 +238,7 @@ updating many rows in sequence.
To reduce database pressure you should instead use
`change_column_type_using_background_migration` or `rename_column_using_background_migration`
-when migrating a column in a large table (e.g. `issues`). These methods work
+when migrating a column in a large table (for example, `issues`). These methods work
similarly to the concurrent counterparts but uses background migration to spread
the work / load over a longer time period, without slowing down deployments.
@@ -402,7 +405,7 @@ into errors. On the other hand, if we were to migrate after deploying the
application code we could run into the same problems.
If you merely need to correct some invalid data, then a post-deployment
-migration is usually enough. If you need to change the format of data (e.g. from
+migration is usually enough. If you need to change the format of data (for example, from
JSON to something else) it's typically best to add a new column for the new data
format, and have the application use that. In such a case the procedure would
be:
diff --git a/doc/development/backend/ruby_style_guide.md b/doc/development/backend/ruby_style_guide.md
new file mode 100644
index 00000000000..461bb9aafde
--- /dev/null
+++ b/doc/development/backend/ruby_style_guide.md
@@ -0,0 +1,72 @@
+---
+type: reference, dev
+stage: none
+group: Development
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# Ruby style guide
+
+This is a GitLab-specific style guide for Ruby code.
+
+Generally, if a style is not covered by [existing rubocop rules or styleguides](../contributing/style_guides.md#ruby-rails-rspec), it shouldn't be a blocker.
+Before adding a new cop to enforce a given style, make sure to discuss it with your team.
+When the style is approved by a backend EM or by a BE staff eng, add a new section to this page to
+document the new rule. For every new guideline, add it in a new section and link the discussion from the section's
+[version history note](../documentation/styleguide/index.md#version-text-in-the-version-history)
+to provide context and serve as a reference.
+
+Just because something is listed here does not mean it cannot be reopened for discussion.
+
+## Instance variable access using `attr_reader`
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/52351) in GitLab 14.1.
+
+Instance variables can be accessed in a variety of ways in a class:
+
+```ruby
+# public
+class Foo
+ attr_reader :my_var
+
+ def initialize(my_var)
+ @my_var = my_var
+ end
+
+ def do_stuff
+ puts my_var
+ end
+end
+
+# private
+class Foo
+ def initialize(my_var)
+ @my_var = my_var
+ end
+
+ private
+
+ attr_reader :my_var
+
+ def do_stuff
+ puts my_var
+ end
+end
+
+# direct
+class Foo
+ def initialize(my_var)
+ @my_var = my_var
+ end
+
+ private
+
+ def do_stuff
+ puts @my_var
+ end
+end
+```
+
+Public attributes should only be used if they are accessed outside of the class.
+There is not a strong opinion on what strategy is used when attributes are only
+accessed internally, as long as there is consistency in related code.
diff --git a/doc/development/background_migrations.md b/doc/development/background_migrations.md
index 534621caf8f..695c565ca83 100644
--- a/doc/development/background_migrations.md
+++ b/doc/development/background_migrations.md
@@ -8,7 +8,7 @@ info: "See the Technical Writers assigned to Development Guidelines: https://abo
# Background migrations
Background migrations should be used to perform data migrations whenever a
-migration exceeds [the time limits in our guidelines](database_review.md#timing-guidelines-for-migrations). For example, you can use background
+migration exceeds [the time limits in our guidelines](migration_style_guide.md#how-long-a-migration-should-take). For example, you can use background
migrations to migrate data that's stored in a single JSON column
to a separate table instead.
@@ -18,7 +18,7 @@ migrations automatically reschedule themselves for a later point in time.
## When To Use Background Migrations
You should use a background migration when you migrate _data_ in tables that have
-so many rows that the process would exceed [the time limits in our guidelines](database_review.md#timing-guidelines-for-migrations) if performed using a regular Rails migration.
+so many rows that the process would exceed [the time limits in our guidelines](migration_style_guide.md#how-long-a-migration-should-take) if performed using a regular Rails migration.
- Background migrations should be used when migrating data in [high-traffic tables](migration_style_guide.md#high-traffic-tables).
- Background migrations may also be used when executing numerous single-row queries
@@ -31,7 +31,7 @@ Some examples where background migrations can be useful:
- Migrating events from one table to multiple separate tables.
- Populating one column based on JSON stored in another column.
-- Migrating data that depends on the output of external services (e.g. an API).
+- Migrating data that depends on the output of external services (for example, an API).
NOTE:
If the background migration is part of an important upgrade, make sure it's announced
@@ -40,7 +40,7 @@ into this category.
## Isolation
-Background migrations must be isolated and can not use application code (e.g.
+Background migrations must be isolated and can not use application code (for example,
models defined in `app/models`). Since these migrations can take a long time to
run it's possible for new versions to be deployed while they are still running.
@@ -157,7 +157,7 @@ Because background migrations can take a long time you can't immediately clean
things up after scheduling them. For example, you can't drop a column that's
used in the migration process as this would cause jobs to fail. This means that
you'll need to add a separate _post deployment_ migration in a future release
-that finishes any remaining jobs before cleaning things up (e.g. removing a
+that finishes any remaining jobs before cleaning things up (for example, removing a
column).
As an example, say you want to migrate the data from column `foo` (containing a
@@ -167,20 +167,25 @@ roughly be as follows:
1. Release A:
1. Create a migration class that perform the migration for a row with a given ID.
1. Deploy the code for this release, this should include some code that will
- schedule jobs for newly created data (e.g. using an `after_create` hook).
+ schedule jobs for newly created data (for example, using an `after_create` hook).
1. Schedule jobs for all existing rows in a post-deployment migration. It's
possible some newly created rows may be scheduled twice so your migration
should take care of this.
1. Release B:
1. Deploy code so that the application starts using the new column and stops
scheduling jobs for newly created data.
- 1. In a post-deployment migration you'll need to ensure no jobs remain.
- 1. Use `Gitlab::BackgroundMigration.steal` to process any remaining
- jobs in Sidekiq.
- 1. Reschedule the migration to be run directly (i.e. not through Sidekiq)
- on any rows that weren't migrated by Sidekiq. This can happen if, for
- instance, Sidekiq received a SIGKILL, or if a particular batch failed
- enough times to be marked as dead.
+ 1. In a post-deployment migration use `finalize_background_migration` from
+ `BackgroundMigrationHelpers` to ensure no jobs remain. This helper will:
+ 1. Use `Gitlab::BackgroundMigration.steal` to process any remaining
+ jobs in Sidekiq.
+ 1. Reschedule the migration to be run directly (that is, not through Sidekiq)
+ on any rows that weren't migrated by Sidekiq. This can happen if, for
+ instance, Sidekiq received a SIGKILL, or if a particular batch failed
+ enough times to be marked as dead.
+ 1. Remove `Gitlab::Database::BackgroundMigrationJob` rows where
+ `status = succeeded`. To retain diagnostic information that may
+ help with future bug tracking you can skip this step by specifying
+ the `delete_tracking_jobs: false` parameter.
1. Remove the old column.
This may also require a bump to the [import/export version](../user/project/settings/import_export.md), if
diff --git a/doc/development/build_test_package.md b/doc/development/build_test_package.md
index 1506017c6d5..bd2d7545bfc 100644
--- a/doc/development/build_test_package.md
+++ b/doc/development/build_test_package.md
@@ -29,7 +29,7 @@ trigger.
## Specifying versions of components
If you want to create a package from a specific branch, commit or tag of any of
-the GitLab components (like GitLab Workhorse, Gitaly, GitLab Pages, etc.), you
+the GitLab components (like GitLab Workhorse, Gitaly, or GitLab Pages), you
can specify the branch name, commit SHA or tag in the component's respective
`*_VERSION` file. For example, if you want to build a package that uses the
branch `0-1-stable`, modify the content of `GITALY_SERVER_VERSION` to
diff --git a/doc/development/caching.md b/doc/development/caching.md
new file mode 100644
index 00000000000..20847832e37
--- /dev/null
+++ b/doc/development/caching.md
@@ -0,0 +1,348 @@
+---
+stage: none
+group: unassigned
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# Caching guidelines
+
+This document describes the various caching strategies in use at GitLab, how to implement
+them effectively, and various gotchas. This material was extracted from the excellent
+[Caching Workshop](https://gitlab.com/gitlab-org/create-stage/-/issues/12820).
+
+## What is a cache?
+
+A faster store for data, which is:
+
+- Used in many areas of computing.
+ - Processors have caches, hard disks have caches, lots of things have caches!
+- Often closer to where you want the data to finally end up.
+- A simpler store for data.
+- Temporary.
+
+## What is fast?
+
+The goal for every web page should be to return in under 100ms:
+
+- This is achievable, but you need caching on a modern application.
+- Larger responses take longer to build, and caching becomes critical to maintaining a constant speed.
+- Cache reads are typically sub-1ms. There is very little that this doesn't improve.
+- It's no good only being fast on subsequent page loads, as the initial experience
+ is important too, so this isn't a complete solution.
+- User-specific data makes this challenging, and presents the biggest challenge
+ in refactoring existing applications to meet this speed goal.
+- User-specific caches can still be effective but they just result in fewer cache
+ hits than generic caches shared between users.
+- We're aiming to always have a majority of a page load pulled from the cache.
+
+## Why use a cache?
+
+- To make things faster!
+- To avoid IO.
+ - Disk reads.
+ - Database queries.
+ - Network requests.
+- To avoid recalculation of the same result multiple times:
+ - View rendering.
+ - JSON rendering.
+ - Markdown rendering.
+- To provide redundancy. In some cases, caching can help disguise failures elsewhere,
+ such as CloudFlare's "Always Online" feature
+- To reduce memory consumption. Processing less in Ruby but just fetching big strings
+- To save money. Especially true in cloud computing, where processors are expensive compared to RAM.
+
+## Doubts about caching
+
+- Some engineers are opposed to caching except as a last resort, considering it to
+ be a hack, and that the real solution is to improve the underlying code to be faster.
+- This is could be fed by fear of cache expiry, which is understandable.
+- But caching is _still faster_.
+- You must use both techniques to achieve true performance:
+ - There's no point caching if the initial cold write is so slow it times out, for example.
+ - But there are few cases where caching isn't a performance boost.
+- However, you can totally use caching as a quick hack, and that's cool too.
+ Sometimes the "real" fix takes months, and caching takes only a day to implement.
+
+### Caching at GitLab
+
+Despite downsides to Redis caching, you should still feel free to make good use of the
+caching setup inside the GitLab application and on GitLab.com. Our
+[forecasting for cache utilization](https://gitlab-com.gitlab.io/gl-infra/tamland/saturation.html)
+indicates we have plenty of headroom.
+
+## Workflow
+
+## Methodology
+
+1. Cache as close to your final user as possible. as often as possible.
+ - Caching your view rendering is by far the best performance improvement.
+1. Try to cache as much data for as many users as possible:
+ - Generic data can be cached for everyone.
+ - You must keep this in mind when building new features.
+1. Try to preserve cache data as much as possible:
+ - Use nested caches to maintain as much cached data as possible across expiries.
+1. Perform as few requests to the cache as possible:
+ - This reduces variable latency caused by network issues.
+ - Lower overhead for each read on the cache.
+
+### Identify what benefits from caching
+
+Is the cache being added "worthy"? This can be hard to measure, but you can consider:
+
+- How large is the cached data?
+ - This might affect what type of cache storage you should use, such as storing
+ large HTML responses on disk rather than in RAM.
+- How much I/O, CPU, and response time is saved by caching the data?
+ - If your cached data is large but the time taken to render it is low, such as
+ dumping a big chunk of text into the page, this might indicate the best place to cache it.
+- How often is this data accessed?
+ - Caching frequently-accessed data usually has a greater effect.
+- How often does this data change?
+ - If the cache rotates before the cache is read again, is this cache actually useful?
+
+### Tools
+
+#### Investigation
+
+- The performance bar is your first step when investigating locally and in production.
+ Look for expensive queries, excessive Redis calls, etc.
+- Generate a flamegraph: add `?performance_bar=flamegraph` to the URL to help find
+ the methods where time is being spent.
+- Dive into the Rails logs:
+ - Look closely at render times of partials too.
+ - To measure the response time alone, you can parse the JSON logs using `jq`:
+ - `tail -f log/development_json.log | jq ".duration_s"`
+ - `tail -f log/api_json.log | jq ".duration_s"`
+ - Some pointers for items to watch when you tail `development.log`:
+ - `tail -f log/development.log | grep "cache hits"`
+ - `tail -f log/development.log | grep "Rendered "`
+- After you're looking in the right place:
+ - Remove or comment out sections of code until you find the cause.
+ - Use `binding.pry` to poke about in live requests. This requires a foreground
+ web process like [Thin](https://gitlab.com/gitlab-org/gitlab-development-kit/-/blob/main/doc/howto/pry.md).
+
+#### Verification
+
+- Grafana, in particular the following dashboards:
+ - [`api: Rails Controller`](https://dashboards.gitlab.net/d/api-rails-controller/api-rails-controller?orgId=1)
+ - [`web: Rails Controller`](https://dashboards.gitlab.net/d/web-rails-controller/web-rails-controller?orgId=1)
+ - [`redis-cache: Overview`](https://dashboards.gitlab.net/d/redis-cache-main/redis-cache-overview?orgId=1)
+- Logs
+ - For situations where Grafana charts don't cover what you need, use Kibana instead.
+- Feature flags:
+ - It's nearly always worth using a feature flag when adding a cache.
+ - Toggle it on and off and watch the wiggly lines in Grafana.
+ - Expect response times to go up initially as the caches warm.
+ - The effect isn't obvious until you're running the flag at 100%.
+- Performance bar:
+ - Use this locally and look for the cache calls in the Redis list.
+ - Also use this in production to verify your cache keys are what you expect.
+- Flamegraphs:
+ - Append `?performance_bar=flamegraph` to the page
+
+## Cache levels
+
+### High level
+
+- HTTP caching:
+ - Use ETags and expiry times to instruct browsers to serve their own cached versions.
+ - This _does_ still hit Rails, but skips the view layer.
+- HTTP caching in a reverse proxy cache:
+ - Same as above, but with a `public` setting.
+ - Instead of the browser, this instructs a reverse proxy (such as NGINX, HAProxy, Varnish) to serve a cached version.
+ - Subsequent requests never hit Rails.
+- HTML page caching:
+ - Write a HTML file to disk
+ - Web server (such as NGINX, Apache, Caddy) serves the HTML file itself, skipping Rails.
+- View or action caching
+ - Rails writes the entire rendered view into its cache store and serves it back.
+- Fragment caching:
+ - Cache parts of a view in the Rails cache store.
+ - Cached parts are inserted into the view as it renders.
+
+### Low level
+
+1. Method caching:
+ - Calling the same method multiple times but only calculating the value once.
+ - Stored in Ruby memory.
+ - `@article ||= Article.find(params[:id])`
+ - `strong_memoize { Article.find(params[:id]) }`
+1. Request caching:
+ - Return the same value for a key for the duration of a web request.
+ - `Gitlab::SafeRequestStore.fetch`
+1. Read-through or write-through SQL caching:
+ - Cache sitting in front of the database.
+ - Rails does this within a request for the same query.
+1. Novelty caches.
+1. Hyper-specific caches for one use case.
+
+### Rails' built-in caching helpers
+
+This is well-documentation in the [Rails guides](https://guides.rubyonrails.org/caching_with_rails.html)
+
+- HTML page caching and action caching are no longer included by default, but they are still useful.
+- The Rails guides call HTTP caching
+ [Conditional GET](https://guides.rubyonrails.org/caching_with_rails.html#conditional-get-support).
+- For Rails' cache store, remember two very important (and almost identical) methods:
+ - `cache` in views, which is almost an alias for:
+ - `Rails.cache.fetch`, which you can use everywhere.
+- `cache` includes a "template tree digest" which changes when you modify your view files.
+
+#### Rails cache options
+
+##### `expires_in`
+
+This sets the Time To Live (TTL) for the cache entry, and is the single most useful
+(and most commonly used) cache option. This is supported in most Rails caching helpers.
+
+##### `race_condition_ttl`
+
+This option prevents multiple uncached hits for a key at the same time.
+The first process that finds the key expired bumps the TTL by this amount, and it
+then sets the new cache value.
+
+Used when a cache key is under very heavy load to prevent multiple simultaneous
+writes, but should be set to a low value, such as 10 seconds.
+
+### When to use HTTP caching
+
+Use conditional GET caching when the entire response is cacheable:
+
+- No privacy risk when you aren't using public caches. You're only caching what
+ the user sees, for that user, in their browser.
+- Particularly useful on [endpoints that get polled](polling.md#polling-with-etag-caching).
+- Good examples:
+ - A list of discussions that we poll for updates. Use the last created entry's `updated_at` value for the `etag`.
+ - API endpoints.
+
+#### Possible downsides
+
+- Users and API libraries can ignore the cache.
+- Sometimes Chrome does weird things with caches.
+- You will forget it exists in development mode and get angry when your changes aren't appearing.
+- In theory using conditional GET caching makes sense everywhere, but in practice it can
+ sometimes cause odd issues.
+
+### When to use view or action caching
+
+This is no longer very commonly used in the Rails world:
+
+- Support for it was removed from the Rails core.
+- Usually better to look at reverse proxy caching or conditional GET responses.
+- However it offers a somewhat simple way of emulating HTML page caching without
+ writing to disk, which makes it useful in cloud environments.
+- Stores rather large chunks of markup in the cache store.
+- We do have a custom implementation of this available on the API, where it is more
+ useful, in `cache_action`.
+
+### When to use fragment caching
+
+All the time!
+
+- Probably the most useful caching type to use in Rails, as it allows you to cache sections
+ of views, entire partials, collections of partials.
+- Rendered collections of partials should be engineered with the goal of using
+ `cached: true` on them.
+- It's faster to cache around the render call for a partial than inside the partial,
+ but then you lose out on the template tree digest, which means the caches don't expire
+ automatically when you update that partial.
+- Beware of introducing lots of cache calls, such as placing a cache call inside a loop.
+ Sometimes it's unavoidable, but there are options for getting around this, like the partial collection caching.
+- View rendering, and JSON generation, are slow, and should be cached wherever possible.
+
+### When to use method caching
+
+- Using instance variables, or [strong_memoize](utilities.md#strongmemoize) is something we all tend to do anyway.
+- Useful when the same value is needed multiple times in a request.
+- Can be used to prevent multiple cache calls for the same key.
+- Can cause issues with ActiveRecord objects where a value doesn't change until you call
+ reload, which tends to crop up in the test suite.
+
+### When to use request caching
+
+- Similar usage pattern to method caching but can be used across multiple methods.
+- Standardized way of storing something for the duration of a request.
+- As the lookup is similar to a cache lookup (in the GitLab implementation), we can use
+ the same key for both. This is how `Gitlab::Cache.fetch_once` works.
+
+### When to use SQL caching
+
+Rails uses this automatically for identical queries in a request, so no action is
+needed for that use case.
+
+- However, using a gem like `identity_cache` has a different purpose: caching queries
+ across multiple requests.
+- Avoid using on single object lookups, like `Article.find(params[:id])`.
+- Sometimes it's not possible to use the result, as it provides a read-only object.
+- It can also cache relationships, useful in situations where we want to return a
+ list of things but don't care about filtering or ordering them differently.
+
+### When to use a novelty cache
+
+If you've exhausted other options, and must cache something that's really awkward,
+it's time to look at a custom solution:
+
+- Examples in GitLab include `RepositorySetCache`, `RepositoryHashCache` and `AvatarCache`.
+- Where possible, you should avoid creating custom cache implementations as it adds
+ inconsistency.
+- Can be extremely effective. For example, the caching around `merged_branch_names`,
+ using [RepositoryHashCache](https://gitlab.com/gitlab-org/gitlab/-/issues/30536#note_290824711).
+
+## Cache expiration
+
+### How Redis expires keys
+
+In short: the oldest stuff is replaced with new stuff:
+
+- A [useful article](https://redis.io/topics/lru-cache) about configuring Redis as an LRU cache.
+- Lots of options for different cache eviction strategies.
+- You probably want `allkeys-lru`, which is functionally similar to Memcached.
+- In Redis 4.0 and later, [allkeys-lfu is available](https://redis.io/topics/lru-cache#the-new-lfu-mode),
+ which is similar but different.
+- We handle all explicit deletes using UNLINK instead of DEL now, which allows Redis to
+ reclaim memory in its own time, rather than immediately.
+ - This marks a key as deleted and returns a successful value quickly,
+ but actually deletes it later.
+
+### How Rails expires keys
+
+- Rails prefers using TTL and cache key expiry to using explicit deletes.
+- Cache keys include a template tree digest by default when fragment caching in
+ views, which ensure any changes to the template automatically expire the cache.
+ - This isn't true in helpers, though, as a warning.
+- Rails has two cache key methods on ActiveRecord objects: `cache_key_with_version` and `cache_key`.
+ The first one is used by default in version 5.2 and later, and is the standard behavior from before;
+ it includes the `updated_at` timestamp in the key.
+
+#### Cache key components
+
+Example found in the `application.log`:
+
+```plaintext
+cache(@project, :tag_list)
+views/projects/_home_panel:462ad2485d7d6957e03ceba2c6717c29/projects/16-2021031614242546945
+2/tag_list
+```
+
+1. The view name and template tree digest
+ `views/projects/_home_panel:462ad2485d7d6957e03ceba2c6717c29`
+1. The model name, ID, and `updated_at` values
+ `projects/16-20210316142425469452`
+1. The symbol we passed in, converted to a string
+ `tag_list`
+
+### Look for
+
+- User-specific data
+ - This is the most important!
+ - This isn't always obvious, particularly in views.
+ - You must trawl every helper method that's used in the area you want to cache.
+- Time-specific data, such as "Billy posted this 8 minutes ago".
+- Records being updated but not triggering the `updated_at` field to change
+- Rails helpers roll the template digest into the keys in views, but this doesn't happen elsewhere, such as in helpers.
+- `Grape::Entity` makes effective caching extremely difficult in the API layer. More on this later.
+- Don't use `break` or `return` inside the fragment cache helper in views - it never writes a cache entry.
+- Reordering items in a cache key that could return old data:
+ - such as having two values that could return `nil` and swapping them around.
+ - Use hashes, like `{ project: nil }` instead.
+- Rails calls `#cache_key` on members of an array to find the keys, but it doesn't call it on values of hashes.
diff --git a/doc/development/cicd/index.md b/doc/development/cicd/index.md
index 6d4e19d8196..76c756b0e95 100644
--- a/doc/development/cicd/index.md
+++ b/doc/development/cicd/index.md
@@ -45,7 +45,7 @@ processing it, and returns any syntax or semantic errors. The `YAML Processor` c
[all the keywords](../../ci/yaml/index.md) available to structure a pipeline.
The `CreatePipelineService` receives the abstract data structure returned by the `YAML Processor`,
-which then converts it to persisted models (pipeline, stages, jobs, etc.). After that, the pipeline is ready
+which then converts it to persisted models (like pipeline, stages, and jobs). After that, the pipeline is ready
to be processed. Processing a pipeline means running the jobs in order of execution (stage or DAG)
until either one of the following:
@@ -77,9 +77,9 @@ that need to be stored. Also, a job may depend on artifacts from previous jobs i
case the runner downloads them using a dedicated API endpoint.
Artifacts are stored in object storage, while metadata is kept in the database. An important example of artifacts
-are reports (JUnit, SAST, DAST, etc.) which are parsed and rendered in the merge request.
+are reports (like JUnit, SAST, and DAST) which are parsed and rendered in the merge request.
-Job status transitions are not all automated. A user may run [manual jobs](../../ci/yaml/index.md#whenmanual), cancel a pipeline, retry
+Job status transitions are not all automated. A user may run [manual jobs](../../ci/jobs/job_control.md#create-a-job-that-must-be-run-manually), cancel a pipeline, retry
specific failed jobs or the entire pipeline. Anything that
causes a job to change status triggers `ProcessPipelineService`, as it's responsible for
tracking the status of the entire pipeline.
@@ -159,7 +159,7 @@ On top of that, we have the following types of jobs:
- `Ci::Bridge` ... The job to trigger a downstream pipeline.
- `GenericCommitStatus` ... The job to be executed in an external CI/CD system e.g. Jenkins.
-Please note that, when you use the "Job" terminology in codebase, readers would
+When you use the "Job" terminology in codebase, readers would
assume that the class/object is any type of above.
If you specifically refer `Ci::Build` class, you should not name the object/class
as "job" as this could cause some confusions. In documentation,
diff --git a/doc/development/cicd/templates.md b/doc/development/cicd/templates.md
index 204287d7b59..03823a4b712 100644
--- a/doc/development/cicd/templates.md
+++ b/doc/development/cicd/templates.md
@@ -386,6 +386,6 @@ If you're unsure if it's secure or not, you need to ask security experts for cro
After your CI/CD template MR is created and labeled with `ci::templates`, DangerBot
suggests one reviewer and one maintainer that can review your code. When your merge
-request is ready for review, please `@mention` the reviewer and ask them to review
-your CI/CD template changes. See details in the merge request that added
+request is ready for review, please [mention](../../user/project/issues/issue_data_and_actions.md#mentions)
+the reviewer and ask them to review your CI/CD template changes. See details in the merge request that added
[a DangerBot task for CI/CD template MRs](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/44688).
diff --git a/doc/development/code_review.md b/doc/development/code_review.md
index 929e75e7774..d66f246ac8c 100644
--- a/doc/development/code_review.md
+++ b/doc/development/code_review.md
@@ -52,8 +52,8 @@ When self-identifying as a domain expert, it is recommended to assign the MR cha
We make the following assumption with regards to automatically being considered a domain expert:
-- Team members working in a specific stage/group (e.g. create: source code) are considered domain experts for that area of the app they work on
-- Team members working on a specific feature (e.g. search) are considered domain experts for that feature
+- Team members working in a specific stage/group (for example, create: source code) are considered domain experts for that area of the app they work on
+- Team members working on a specific feature (for example, search) are considered domain experts for that feature
We default to assigning reviews to team members with domain expertise.
When a suitable [domain expert](#domain-experts) isn't available, you can choose any team member to review the MR, or simply follow the [Reviewer roulette](#reviewer-roulette) recommendation.
@@ -125,7 +125,7 @@ with [domain expertise](#domain-experts).
1. If your merge request includes an addition of, or changes to a [Feature spec](testing_guide/testing_levels.md#frontend-feature-tests), it must be **approved by a [Quality maintainer](https://about.gitlab.com/handbook/engineering/projects/#gitlab_maintainers_qa) or [Quality reviewer](https://about.gitlab.com/handbook/engineering/projects/#gitlab_reviewers_qa)**.
1. If your merge request introduces a new service to GitLab (Puma, Sidekiq, Gitaly are examples), it must be **approved by a [product manager](https://about.gitlab.com/company/team/)**. See the [process for adding a service component to GitLab](adding_service_component.md) for details.
-- (*1*): Please note that specs other than JavaScript specs are considered backend code.
+- (*1*): Specs other than JavaScript specs are considered backend code.
- (*2*): We encourage you to seek guidance from a database maintainer if your merge
request is potentially introducing expensive queries. It is most efficient to comment
on the line of code in question with the SQL queries so they can give their advice.
@@ -403,6 +403,12 @@ your own suggestions to the merge request. Note that:
has more than one commit, then see the note below about rewriting
commit history.
+As a maintainer, if a merge request that you authored has received all required approvals, it is acceptable to show a [bias for action](https://about.gitlab.com/handbook/values/#bias-for-action) and merge your own MR, if:
+
+- The last maintainer to review intended to start the merge and did not, OR
+- The last maintainer to review started the merge, but some trivial chore caused the pipeline to break. For example, the MR might need a rebase first because of unrelated pipeline issues, or some files might need to be regenerated (like `gitlab.pot`).
+ - "Trivial" is a subjective measure but we expect project maintainers to exercise their judgement carefully and cautiously.
+
When ready to merge:
WARNING:
@@ -423,6 +429,7 @@ WARNING:
do not merge the merge request** except for
[very specific cases](https://about.gitlab.com/handbook/engineering/workflow/#criteria-for-merging-during-broken-master).
For other cases, follow these [handbook instructions](https://about.gitlab.com/handbook/engineering/workflow/#merging-during-broken-master).
+ - If the latest pipeline was created before the merge request was approved, start a new pipeline to ensure that full RSpec suite has been run. You may skip this step only if the merge request does not contain any backend change.
- If the **latest [Pipeline for Merged Results](../ci/pipelines/pipelines_for_merged_results.md)** finished less than 2 hours ago, you
might merge without starting a new pipeline as the merge request is close
enough to `main`.
@@ -577,11 +584,12 @@ context is fresh in memory, and improves contributors' experience significantly.
To ensure swift feedback to ready-to-review code, we maintain a `Review-response` Service-level Objective (SLO). The SLO is defined as:
-> - review-response SLO = (time when first review response is provided) - (time MR is assigned to reviewer) < 2 business days
+> Review-response SLO = (time when first review is provided) - (time MR is assigned to reviewer) < 2 business days
If you don't think you can review a merge request in the `Review-response` SLO
-time frame, let the author know as soon as possible and try to help them find
-another reviewer or maintainer who is able to, so that they can be unblocked
+time frame, let the author know as soon as possible in the comments
+(no later than 36 hours after first receiving the review request)
+and try to help them find another reviewer or maintainer who is able to, so that they can be unblocked
and get on with their work quickly. Remove yourself as a reviewer.
If you think you are at capacity and are unable to accept any more reviews until
diff --git a/doc/development/contributing/community_roles.md b/doc/development/contributing/community_roles.md
index 5419992517b..3804aa7f8a8 100644
--- a/doc/development/contributing/community_roles.md
+++ b/doc/development/contributing/community_roles.md
@@ -12,7 +12,7 @@ GitLab community members and their privileges/responsibilities.
|-------|------------------|--------------|
| Maintainer | Accepts merge requests on several GitLab projects | Added to the [team page](https://about.gitlab.com/company/team/). An expert on code reviews and knows the product/codebase |
| Reviewer | Performs code reviews on MRs | Added to the [team page](https://about.gitlab.com/company/team/) |
-| Developer |Has access to GitLab internal infrastructure & issues (e.g. HR-related) | GitLab employee or a Core Team member (with an NDA) |
+| Developer |Has access to GitLab internal infrastructure & issues (for example, HR-related) | GitLab employee or a Core Team member (with an NDA) |
| Contributor | Can make contributions to all GitLab public projects | Have a GitLab.com account |
[List of current reviewers/maintainers](https://about.gitlab.com/handbook/engineering/projects/#gitlab-ce).
diff --git a/doc/development/contributing/index.md b/doc/development/contributing/index.md
index 2fe08f78aed..fe7dc52d077 100644
--- a/doc/development/contributing/index.md
+++ b/doc/development/contributing/index.md
@@ -129,8 +129,8 @@ The general flow of contributing to GitLab is:
1. In the merge request's description:
- Ensure you provide complete and accurate information.
- Review the provided checklist.
-1. Assign the merge request (if possible) to, or `@mention`, one of the
- [code owners](../../user/project/code_owners.md) for the relevant project,
+1. Assign the merge request (if possible) to, or [mention](../../user/project/issues/issue_data_and_actions.md#mentions),
+ one of the [code owners](../../user/project/code_owners.md) for the relevant project,
and explain that you are ready for review.
When you submit code to GitLab, we really want it to get merged! However, we always review
@@ -167,18 +167,18 @@ GitLab will do its best to review community contributions as quickly as possible
appointed developers review community contributions daily. Look at the
[team page](https://about.gitlab.com/company/team/) for the merge request coach who specializes in
the type of code you have written and mention them in the merge request. For example, if you have
-written some front-end code, you should `@mention` the frontend merge request coach. If
-your code has multiple disciplines, you may `@mention` multiple merge request coaches.
+written some front-end code, you should mention the frontend merge request coach. If
+your code has multiple disciplines, you may mention multiple merge request coaches.
GitLab receives a lot of community contributions. If your code has not been reviewed within two
-working days of its initial submission, feel free to `@mention` all merge request coaches with
+working days of its initial submission, feel free to mention all merge request coaches with
`@gitlab-org/coaches` to get their attention.
When submitting code to GitLab, you may feel that your contribution requires the aid of an external
library. If your code includes an external library, please provide a link to the library, as well as
reasons for including it.
-`@mention` a maintainer in merge requests that contain:
+Mention a maintainer in merge requests that contain:
- More than 500 changes.
- Any major [breaking changes](#breaking-changes).
@@ -191,7 +191,7 @@ If you are not sure who to mention, the reviewer will do this for you early in t
A "breaking change" is any change that requires users to make a corresponding change to their code, settings, or workflow. "Users" might be humans, API clients, or even code classes that "use" another class. Examples of breaking changes include:
- Removing a user-facing feature without a replacement/workaround.
-- Changing the definition of an existing API (by re-naming query parameters, changing routes, etc.).
+- Changing the definition of an existing API (by doing things like re-naming query parameters or changing routes).
- Removing a public method from a code class.
A breaking change can be considered "major" if it affects many users, or represents a significant change in behavior.
diff --git a/doc/development/contributing/issue_workflow.md b/doc/development/contributing/issue_workflow.md
index aa1b353c634..1dfe560d68d 100644
--- a/doc/development/contributing/issue_workflow.md
+++ b/doc/development/contributing/issue_workflow.md
@@ -47,11 +47,11 @@ scheduling into milestones. Labeling is a task for everyone. (For some projects,
Most issues will have labels for at least one of the following:
-- Type: `~feature`, `~bug`, `~tooling`, `~documentation`, etc.
-- Stage: `~"devops::plan"`, `~"devops::create"`, etc.
-- Group: `~"group::source code"`, `~"group::knowledge"`, `~"group::editor"`, etc.
-- Category: `~"Category:Code Analytics"`, `~"Category:DevOps Reports"`, `~"Category:Templates"`, etc.
-- Feature: `~wiki`, `~ldap`, `~api`, `~issues`, `~"merge requests"`, etc.
+- Type. For example: `~feature`, `~bug`, `~tooling`, or `~documentation`.
+- Stage. For example: `~"devops::plan"` or `~"devops::create"`.
+- Group. For example: `~"group::source code"`, `~"group::knowledge"`, or `~"group::editor"`.
+- Category. For example: `~"Category:Code Analytics"`, `~"Category:DevOps Reports"`, or `~"Category:Templates"`.
+- Feature. For example: `~wiki`, `~ldap`, `~api`, `~issues`, or `~"merge requests"`.
- Department: `~UX`, `~Quality`
- Team: `~"Technical Writing"`, `~Delivery`
- Specialization: `~frontend`, `~backend`, `~documentation`
@@ -72,12 +72,17 @@ issue should have one and only one.
The current type labels are:
-- ~feature
-- ~bug
-- ~tooling
-- ~"support request"
-- ~meta
-- ~documentation
+- `~feature`
+ - `~"feature::addition"`
+ - `~"feature::enhancement"`
+ - `~"feature::maintenance"`
+- `~bug`
+- `~tooling`
+ - `~"tooling::pipelines"`
+ - `~"tooling::workflow"`
+- `~"support request"`
+- `~meta`
+- `~documentation`
A number of type labels have a priority assigned to them, which automatically
makes them float to the top, depending on their importance.
@@ -201,7 +206,7 @@ If you are an expert in a particular area, it makes it easier to find issues to
work on. You can also subscribe to those labels to receive an email each time an
issue is labeled with a feature label corresponding to your expertise.
-Examples of feature labels are `~wiki`, `~ldap`, `~api`, `~issues`, `~"merge requests"` etc.
+Examples of feature labels are `~wiki`, `~ldap`, `~api`, `~issues`, and `~"merge requests"`.
#### Naming and color convention
@@ -223,7 +228,7 @@ The current department labels are:
### Team labels
-**Important**: Most of the historical team labels (e.g. Manage, Plan etc.) are
+**Important**: Most of the historical team labels (like Manage or Plan) are
now deprecated in favor of [Group labels](#group-labels) and [Stage labels](#stage-labels).
Team labels specify what team is responsible for this issue.
diff --git a/doc/development/contributing/merge_request_workflow.md b/doc/development/contributing/merge_request_workflow.md
index a6dcac47910..534150e4d37 100644
--- a/doc/development/contributing/merge_request_workflow.md
+++ b/doc/development/contributing/merge_request_workflow.md
@@ -12,7 +12,7 @@ to GitLab code, tests, and documentation. The issues that are specifically suita
for community contributions are listed with the [`Accepting merge requests`](issue_workflow.md#label-for-community-contributors)
label, but you are free to contribute to any issue you want.
-Please note that if an issue is marked for the current milestone at any time, even
+If an issue is marked for the current milestone at any time, even
when you are working on it, a GitLab Inc. team member may take over the merge request
in order to ensure the work is finished before the release date.
@@ -23,8 +23,8 @@ wireframes of the proposed feature if it will also change the UI.
Merge requests should be submitted to the appropriate project at GitLab.com, for example
[GitLab](https://gitlab.com/gitlab-org/gitlab/-/merge_requests),
-[GitLab Runner](https://gitlab.com/gitlab-org/gitlab-runner/-/merge_requests),
-[Omnibus GitLab](https://gitlab.com/gitlab-org/omnibus-gitlab/-/merge_requests), etc.
+[GitLab Runner](https://gitlab.com/gitlab-org/gitlab-runner/-/merge_requests), or
+[Omnibus GitLab](https://gitlab.com/gitlab-org/omnibus-gitlab/-/merge_requests).
If you are new to GitLab development (or web development in general), see the
[how to contribute](index.md#how-to-contribute) section to get started with
@@ -69,7 +69,7 @@ request is as follows:
request addresses. Referenced issues do not [close automatically](../../user/project/issues/managing_issues.md#closing-issues-automatically).
You must close them manually once the merge request is merged.
1. The MR must include *Before* and *After* screenshots if UI changes are made.
- 1. Include any steps or setup required to ensure reviewers can view the changes you've made (e.g. include any information about feature flags).
+ 1. Include any steps or setup required to ensure reviewers can view the changes you've made (for example, include any information about feature flags).
1. If you're allowed to, set a relevant milestone and [labels](issue_workflow.md).
1. UI changes should use available components from the GitLab Design System,
[Pajamas](https://design.gitlab.com/).
@@ -204,7 +204,7 @@ the contribution acceptance criteria below:
only one working on your feature branch, otherwise merge `main`.
1. Only one specific issue is fixed or one specific feature is implemented. Do not
combine things; send separate merge requests for each issue or feature.
-1. Migrations should do only one thing (e.g., create a table, move data to a new
+1. Migrations should do only one thing (for example, create a table, move data to a new
table, or remove an old table) to aid retrying on failure.
1. Contains functionality that other users will benefit from.
1. Doesn't add configuration options or settings options since they complicate making
@@ -214,7 +214,7 @@ the contribution acceptance criteria below:
- Check for N+1 queries via the SQL log or [`QueryRecorder`](../merge_request_performance_guidelines.md).
- Avoid repeated access of the file system.
- Use [polling with ETag caching](../polling.md) if needed to support real-time features.
-1. If the merge request adds any new libraries (gems, JavaScript libraries, etc.),
+1. If the merge request adds any new libraries (like gems or JavaScript libraries),
they should conform to our [Licensing guidelines](../licensing.md). See those
instructions for help if the "license-finder" test fails with a
`Dependencies that need approval` error. Also, make the reviewer aware of the new
@@ -272,7 +272,7 @@ request:
We allow engineering time to fix small problems (with or without an
issue) that are incremental improvements, such as:
-1. Unprioritized bug fixes (e.g. [Banner alerting of project move is
+1. Unprioritized bug fixes (for example, [Banner alerting of project move is
showing up everywhere](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/18985))
1. Documentation improvements
1. Rubocop or Code Quality improvements
diff --git a/doc/development/contributing/style_guides.md b/doc/development/contributing/style_guides.md
index 5a54e3afbea..1b339b7f252 100644
--- a/doc/development/contributing/style_guides.md
+++ b/doc/development/contributing/style_guides.md
@@ -62,6 +62,7 @@ Before you push your changes, Lefthook automatically runs the following checks:
- SCSS lint: Run `yarn lint:stylelint` checks (with the [`.stylelintrc`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/.stylelintrc) configuration) on the modified `*.scss{,.css}` files. Tags: `stylesheet`, `css`, `style`.
- RuboCop: Run `bundle exec rubocop` checks (with the [`.rubocop.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/.rubocop.yml) configuration) on the modified `*.rb` files. Tags: `backend`, `style`.
- Vale: Run `vale` checks (with the [`.vale.ini`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/.vale.ini) configuration) on the modified `*.md` files. Tags: `documentation`, `style`.
+- Documentation metadata: Run checks for the absence of [documentation metadata](../documentation/index.md#metadata).
In addition to the default configuration, you can define a [local configuration](https://github.com/Arkweid/lefthook/blob/master/docs/full_guide.md#local-config).
@@ -139,7 +140,10 @@ reviewers/maintainers must not ask authors to use one style or the other, as bot
are accepted. This isn't an ideal situation since this leaves space for
[bike-shedding](https://en.wiktionary.org/wiki/bikeshedding), and ideally we
should enable all RuboCop rules to avoid style-related
-discussions/nitpicking/back-and-forth in reviews.
+discussions/nitpicking/back-and-forth in reviews. There are some styles that
+commonly come up in reviews that are not enforced, the
+[GitLab Ruby style guide](../backend/ruby_style_guide.md) includes a non-exhaustive
+list of these topics.
Additionally, we have a dedicated
[newlines style guide](../newlines_styleguide.md), as well as dedicated
diff --git a/doc/development/creating_enums.md b/doc/development/creating_enums.md
index 301c6031d28..1f04f4c9712 100644
--- a/doc/development/creating_enums.md
+++ b/doc/development/creating_enums.md
@@ -73,9 +73,9 @@ end
This works as-is, however, it has a couple of downside that:
- Someone could define a key/value pair in EE that is **conflicted** with a value defined in FOSS.
- e.g. Define `activity_limit_exceeded: 1` in `EE::Enums::Pipeline`.
+ For example, define `activity_limit_exceeded: 1` in `EE::Enums::Pipeline`.
- When it happens, the feature works totally different.
- e.g. We cannot figure out `failure_reason` is either `config_error` or `activity_limit_exceeded`.
+ For example, we cannot figure out `failure_reason` is either `config_error` or `activity_limit_exceeded`.
- When it happens, we have to ship a database migration to fix the data integrity,
which might be impossible if you cannot recover the original value.
@@ -98,7 +98,7 @@ end
This looks working as a workaround, however, this approach has some downsides that:
- Features could move from EE to FOSS or vice versa. Therefore, the offset might be mixed between FOSS and EE in the future.
- e.g. When you move `activity_limit_exceeded` to FOSS, you'll see `{ unknown_failure: 0, config_error: 1, activity_limit_exceeded: 1_000 }`.
+ For example, when you move `activity_limit_exceeded` to FOSS, you'll see `{ unknown_failure: 0, config_error: 1, activity_limit_exceeded: 1_000 }`.
- The integer column for the `enum` is likely created [as `SMALLINT`](#creating-enums).
Therefore, you need to be careful of that the offset doesn't exceed the maximum value of 2 bytes integer.
diff --git a/doc/development/dangerbot.md b/doc/development/dangerbot.md
index 8f5788785f0..d9b922cb60e 100644
--- a/doc/development/dangerbot.md
+++ b/doc/development/dangerbot.md
@@ -151,12 +151,16 @@ at GitLab so far:
Danger is run but its output is not added to a merge request comment if working
on a fork. This happens because the secret variable from the canonical project
-is not shared to forks. To work around this, you can add an [environment
-variable](../ci/variables/index.md) called `DANGER_GITLAB_API_TOKEN` with a
+is not shared to forks.
+
+### Configuring Danger for forks
+
+Contributors can configure Danger for their forks with the following steps:
+
+1. Add an [environment variable](../ci/variables/index.md) called `DANGER_GITLAB_API_TOKEN` with a
[personal API token](https://gitlab.com/-/profile/personal_access_tokens?name=GitLab+Dangerbot&scopes=api)
-to your fork that has the `api` scope set. That way the danger comments are made
-from CI using that API token instead. Making the variable
-[masked](../ci/variables/index.md#mask-a-cicd-variable) makes sure it
+to your fork that has the `api` scope set.
+1. Making the variable [masked](../ci/variables/index.md#mask-a-cicd-variable) makes sure it
doesn't show up in the job logs. The variable cannot be
[protected](../ci/variables/index.md#protect-a-cicd-variable), as it needs
to be present for all feature branches.
diff --git a/doc/development/database/constraint_naming_convention.md b/doc/development/database/constraint_naming_convention.md
index debf74d3b40..3faef8aee09 100644
--- a/doc/development/database/constraint_naming_convention.md
+++ b/doc/development/database/constraint_naming_convention.md
@@ -9,7 +9,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
The most common option is to let Rails pick the name for database constraints and indexes or let PostgreSQL use the defaults (when applicable). However, when needing to define custom names in Rails or working in Go applications where no ORM is used, it is important to follow strict naming conventions to improve consistency and discoverability.
The table below describes the naming conventions for custom PostgreSQL constraints.
-Please note that the intent is not to retroactively change names in existing databases but rather ensure consistency of future changes.
+The intent is not to retroactively change names in existing databases but rather ensure consistency of future changes.
| Type | Syntax | Notes | Examples |
|--------------------------|---------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------|
diff --git a/doc/development/database/database_migration_pipeline.md b/doc/development/database/database_migration_pipeline.md
new file mode 100644
index 00000000000..5a8ce89a362
--- /dev/null
+++ b/doc/development/database/database_migration_pipeline.md
@@ -0,0 +1,55 @@
+---
+stage: Enablement
+group: Database
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# Database migration pipeline
+
+> [Introduced](https://gitlab.com/gitlab-org/database-team/team-tasks/-/issues/171) in GitLab 14.2.
+
+With the [automated migration testing pipeline](https://gitlab.com/gitlab-org/database-team/gitlab-com-database-testing)
+we can automatically test migrations in a production-like environment (similar to `#database-lab`).
+It is based on an [architecture blueprint](../../architecture/blueprints/database_testing/index.md).
+
+Migration testing is enabled in the [GitLab project](https://gitlab.com/gitlab-org/gitlab)
+for changes that add a new database migration. Trigger this job manually by running the
+`db:gitlabcom-database-testing` job within in `test` stage. To avoid wasting resources,
+only run this job when your MR is ready for review.
+
+The job starts a pipeline on the [ops GitLab instance](https://ops.gitlab.net/).
+For security reasons, access to the pipeline is restricted to database maintainers.
+
+When the pipeline starts, a bot notifies you with a comment in the merge request.
+When it finishes, the comment gets updated with the test results.
+There are three sections which are described below.
+
+## Summary
+
+The first section of the comment contains a summary of the test results, including:
+
+| Result | Description |
+|-------------------|---------------------------------------------------------------------------------------------------------------------|
+| Warnings | Highlights critical issues such as exceptions or long-running queries. |
+| Migrations | The time each migration took to complete, whether it was successful, and the increment in the size of the database. |
+| Runtime histogram | Expand this section to see a histogram of query runtimes across all migrations. |
+
+## Migration details
+
+The next section of the comment contains detailed information for each migration, including:
+
+| Result | Description |
+|-------------------|-------------------------------------------------------------------------------------------------------------------------|
+| Details | The type of migration, total duration, and database size change. |
+| Queries | Every query executed during the migration, along with the number of calls, timings, and the number of the changed rows. |
+| Runtime histogram | Indicates the distribution of query times for the migration. |
+
+## Clone details and artifacts
+
+Some additional information is included at the bottom of the comment:
+
+| Result | Description |
+|----------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| Migrations pending on GitLab.com | A summary of migrations not deployed yet to GitLab.com. This info is useful when testing a migration that was merged but not deployed yet. |
+| Clone details | A link to the `Postgres.ai` thin clone created for this testing pipeline, along with information about its expiry. This can be used to further explore the results of running the migration. Only accessible by database maintainers or with an access request. |
+| Artifacts | A link to the pipeline's artifacts. Full query logs for each migration (ending in `.log`) are available there and only accessible by database maintainers or with an access request. |
diff --git a/doc/development/database/multiple_databases.md b/doc/development/database/multiple_databases.md
index 2895cef86fc..71dcc5bb866 100644
--- a/doc/development/database/multiple_databases.md
+++ b/doc/development/database/multiple_databases.md
@@ -61,7 +61,6 @@ development:
adapter: postgresql
encoding: unicode
database: gitlabhq_development_ci
- migrations_paths: db/ci_migrate
host: /path/to/gdk/postgresql
pool: 10
prepared_statements: false
@@ -82,7 +81,6 @@ test: &test
adapter: postgresql
encoding: unicode
database: gitlabhq_test_ci
- migrations_paths: db/ci_migrate
host: /path/to/gdk/postgresql
pool: 10
prepared_statements: false
@@ -92,10 +90,204 @@ test: &test
### Migrations
-Any migrations that affect `Ci::BaseModel` models
+Any migrations that affect `Ci::CiDatabaseRecord` models
and their tables must be placed in two directories for now:
- `db/migrate`
- `db/ci_migrate`
We aim to keep the schema for both tables the same across both databases.
+
+### Removing joins between `ci_*` and non `ci_*` tables
+
+We are planning on moving all the `ci_*` tables to a separate database so
+referencing `ci_*` tables with other tables will not be possible. This means,
+that using any kind of `JOIN` in SQL queries will not work. We have identified
+already many such examples that need to be fixed in
+<https://gitlab.com/groups/gitlab-org/-/epics/6289> .
+
+The following are some real examples that have resulted from this and these
+patterns may apply to future cases.
+
+#### Remove the code
+
+The simplest solution we've seen several times now has been an existing scope
+that is unused. This is the easiest example to fix. So the first step is to
+investigate if the code is unused and then remove it. These are some
+real examples:
+
+- <https://gitlab.com/gitlab-org/gitlab/-/merge_requests/67162>
+- <https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66714>
+- <https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66503>
+
+There may be more examples where the code is used, but we can evaluate
+if we need it or if the feature should behave this way.
+Before complicating things by adding new columns and tables,
+consider if you can simplify the solution and still meet the requirements.
+One case being evaluated involves changing how certain `UsageData` is
+calculated to remove a join query in
+<https://gitlab.com/gitlab-org/gitlab/-/issues/336170>. This is a good candidate
+to evaluate, because `UsageData` is not critical to users and it may be possible
+to get a similarly useful metric with a simpler approach. Alternatively we may
+find that nobody is using these metrics, so we can remove them.
+
+#### Use `preload` instead of `includes`
+
+The `includes` and `preload` methods in Rails are both ways to avoid an N+1
+query. The `includes` method in Rails uses a heuristic approach to determine
+if it needs to join to the table, or if it can load all of the
+records in a separate query. This method assumes it needs to join if it thinks
+you need to query the columns from the other table, but sometimes
+this method gets it wrong and executes a join even when not needed. In
+this case using `preload` to explicitly load the data in a separate query
+allows you to avoid the join, while still avoiding the N+1 query.
+
+You can see a real example of this solution being used in
+<https://gitlab.com/gitlab-org/gitlab/-/merge_requests/67655>.
+
+#### De-normalize some foreign key to the table
+
+De-normalization refers to adding redundant precomputed (duplicated) data to
+a table to simplify certain queries or to improve performance. In this
+case, it can be useful when you are doing a join that involves three tables, where
+you are joining through some intermediate table.
+
+Generally when modeling a database schema, a "normalized" structure is
+preferred because of the following reasons:
+
+- Duplicate data uses extra storage.
+- Duplicate data needs to be kept in sync.
+
+Sometimes normalized data is less performant so de-normalization has been a
+common technique GitLab has used to improve the performance of database queries
+for a while. The above problems are mitigated when the following conditions are
+met:
+
+1. There isn't much data (for example, it's just an integer column).
+1. The data does not update often (for example, the `project_id` column is almost
+ never updated for most tables).
+
+One example we found was the `security_scans` table. This table has a foreign
+key `security_scans.build_id` which allows you to join to the build. Therefore
+you could join to the project like so:
+
+```sql
+select projects.* from security_scans
+inner join ci_builds on security_scans.build_id = ci_builds.id
+inner join projects on ci_builds.project_id = projects.id
+```
+
+The problem with this query is that `ci_builds` is in a different database
+from the other two tables.
+
+The solution in this case is to add the `project_id` column to
+`security_scans`. This doesn't use much extra storage, and due to the way
+these features work, it's never updated (a build never moves projects).
+
+This simplified the query to:
+
+```sql
+select projects.* from security_scans
+inner join projects on security_scans.project_id = projects.id
+```
+
+This also improves performance because you don't need to join through an extra
+table.
+
+You can see this approach implemented in
+<https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66963> . This MR also
+de-normalizes `pipeline_id` to fix a similar query.
+
+#### De-normalize into an extra table
+
+Sometimes the previous de-normalization (adding an extra column) doesn't work for
+your specific case. This may be due to the fact that your data is not 1:1, or
+because the table you're adding to is already too wide (for example, the `projects`
+table shouldn't have more columns added).
+
+In this case you may decide to just store the extra data in a separate table.
+
+One example where this approach is being used was to implement the
+`Project.with_code_coverage` scope. This scope was essentially used to narrow
+down a list of projects to only those that have at one point in time used code
+coverage features. This query (simplified) was:
+
+```sql
+select projects.* from projects
+inner join ci_daily_build_group_report_results on ci_daily_build_group_report_results.project_id = projects.id
+where ((data->'coverage') is not null)
+and ci_daily_build_group_report_results.default_branch = true
+group by projects.id
+```
+
+This work is still in progress but the current plan is to introduce a new table
+called `projects_with_ci_feature_usage` which has 2 columns `project_id` and
+`ci_feature`. This table would be written to the first time a project creates a
+`ci_daily_build_group_report_results` for code coverage. Therefore the new
+query would be:
+
+```sql
+select projects.* from projects
+inner join projects_with_ci_feature_usage on projects_with_ci_feature_usage.project_id = projects.id
+where projects_with_ci_feature_usage.ci_feature = 'code_coverage'
+```
+
+The above example uses as a text column for simplicity but we should probably
+use an [enum](../creating_enums.md) to save space.
+
+The downside of this new design is that this may need to be
+updated (removed if the `ci_daily_build_group_report_results` is deleted).
+Depending on your domain, however, this may not be necessary because deletes are
+edge cases or impossible, or because the user impact of seeing the project on the
+list page may not be problematic. It's also possible to implement the
+logic to delete these rows if or whenever necessary in your domain.
+
+Finally, this de-normalization and new query also improves performance because
+it does less joins and needs less filtering.
+
+#### Summary of cross-join removal patterns
+
+A quick checklist for fixing a specific join query would be:
+
+1. Is the code even used? If not just remove it
+1. If the code is used, then is this feature even used or can we implement the
+ feature in a simpler way and still meet the requirements. Always prefer the
+ simplest option.
+1. Can we remove the join if we de-normalize the data you are joining to by
+ adding a new column
+1. Can we remove the join by adding a new table in the correct database that
+ replicates the minimum data needed to do the join
+
+#### How to validate you have correctly removed a cross-join
+
+Using RSpec tests, you can validate all SQL queries within a code block to
+ensure that none of them are joining across the two databases. This is a useful
+tool to confirm you have correctly fixed an existing cross-join.
+
+At some point in the future we will have fixed all cross-joins and this tool
+will run by default in all tests. For now, the tool needs to be explicitly enabled
+for your test.
+
+You can use this method like so:
+
+```ruby
+it 'does not join across databases' do
+ with_cross_joins_prevented do
+ ::Ci::Build.joins(:project).to_a
+ end
+end
+```
+
+This will raise an exception if the query joins across the two databases. The
+previous example is fixed by removing the join, like so:
+
+```ruby
+it 'does not join across databases' do
+ with_cross_joins_prevented do
+ ::Ci::Build.preload(:project).to_a
+ end
+end
+```
+
+You can see a real example of using this method for fixing a cross-join in
+<https://gitlab.com/gitlab-org/gitlab/-/merge_requests/67655>.
diff --git a/doc/development/database/not_null_constraints.md b/doc/development/database/not_null_constraints.md
index 48b198b46bd..178a207dab5 100644
--- a/doc/development/database/not_null_constraints.md
+++ b/doc/development/database/not_null_constraints.md
@@ -58,7 +58,7 @@ different releases:
1. Release `N.M` (current release)
- - Ensure the constraint is enforced at the application level (i.e. add a model validation).
+ - Ensure the constraint is enforced at the application level (that is, add a model validation).
- Add a post-deployment migration to add the `NOT NULL` constraint with `validate: false`.
- Add a post-deployment migration to fix the existing records.
diff --git a/doc/development/database_review.md b/doc/development/database_review.md
index 88639758a9d..2746d9f6582 100644
--- a/doc/development/database_review.md
+++ b/doc/development/database_review.md
@@ -117,7 +117,7 @@ test its execution using `CREATE INDEX CONCURRENTLY` in the `#database-lab` Slac
- If the execution from `#database-lab` is longer than `1h`, the index should be moved to a [post-migration](post_deployment_migrations.md).
Keep in mind that in this case you may need to split the migration and the application changes in separate releases to ensure the index
will be in place when the code that needs it will be deployed.
-- Trigger the [database testing](../architecture/blueprints/database_testing/index.md) job (`db:gitlabcom-database-testing`) in the `test` stage.
+- Manually trigger the [database testing](database/database_migration_pipeline.md) job (`db:gitlabcom-database-testing`) in the `test` stage.
- This job runs migrations in a production-like environment (similar to `#database_lab`) and posts to the MR its findings (queries, runtime, size change).
- Review migration runtimes and any warnings.
@@ -128,7 +128,7 @@ test its execution using `CREATE INDEX CONCURRENTLY` in the `#database-lab` Slac
- Write the raw SQL in the MR description. Preferably formatted
nicely with [pgFormatter](https://sqlformat.darold.net) or
[paste.depesz.com](https://paste.depesz.com) and using regular quotes
- (e.g. `"projects"."id"`) and avoiding smart quotes (e.g. `“projects”.“id”`).
+ (for example, `"projects"."id"`) and avoiding smart quotes (for example, `“projects”.“id”`).
- In case of queries generated dynamically by using parameters, there should be one raw SQL query for each variation.
For example, a finder for issues that may take as a parameter an optional filter on projects,
@@ -216,7 +216,7 @@ test its execution using `CREATE INDEX CONCURRENTLY` in the `#database-lab` Slac
it's suggested to treat background migrations as post migrations:
place them in `db/post_migrate` instead of `db/migrate`. Keep in mind
that post migrations are executed post-deployment in production.
-- Check [timing guidelines for migrations](#timing-guidelines-for-migrations)
+- Check [timing guidelines for migrations](migration_style_guide.md#how-long-a-migration-should-take)
- Check migrations are reversible and implement a `#down` method
- Check data migrations:
- Establish a time estimate for execution on GitLab.com.
@@ -234,18 +234,3 @@ test its execution using `CREATE INDEX CONCURRENTLY` in the `#database-lab` Slac
to queries (changing the query, schema or adding indexes and similar)
- General guideline is for queries to come in below [100ms execution time](query_performance.md#timing-guidelines-for-queries)
- Avoid N+1 problems and minimize the [query count](merge_request_performance_guidelines.md#query-counts).
-
-### Timing guidelines for migrations
-
-In general, migrations for a single deploy shouldn't take longer than
-1 hour for GitLab.com. The following guidelines are not hard rules, they were
-estimated to keep migration timing to a minimum.
-
-NOTE:
-Keep in mind that all runtimes should be measured against GitLab.com.
-
-| Migration Type | Execution Time Recommended | Notes |
-|----|----|---|
-| Regular migrations on `db/migrate` | `3 minutes` | A valid exception are index creation as this can take a long time. |
-| Post migrations on `db/post_migrate` | `10 minutes` | |
-| Background migrations | --- | Since these are suitable for larger tables, it's not possible to set a precise timing guideline, however, any single query must stay below [`1 second` execution time](query_performance.md#timing-guidelines-for-queries) with cold caches. |
diff --git a/doc/development/deleting_migrations.md b/doc/development/deleting_migrations.md
index f159f679c32..25ec1c08335 100644
--- a/doc/development/deleting_migrations.md
+++ b/doc/development/deleting_migrations.md
@@ -21,8 +21,8 @@ Instead of deleting we can opt for disabling the migration.
Migrations can be disabled if:
- They caused a timeout or general issue on GitLab.com.
-- They are obsoleted, e.g. changes are not necessary due to a feature change.
-- Migration is a data migration only, i.e. the migration does not change the database schema.
+- They are obsoleted, for example, changes are not necessary due to a feature change.
+- Migration is a data migration only, that is, the migration does not change the database schema.
## How to disable a data migration?
diff --git a/doc/development/dependencies.md b/doc/development/dependencies.md
new file mode 100644
index 00000000000..c81c6408211
--- /dev/null
+++ b/doc/development/dependencies.md
@@ -0,0 +1,56 @@
+---
+stage: none
+group: unassigned
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# Dependencies
+
+## Dependency updates
+
+We use the [Renovate GitLab Bot](https://gitlab.com/gitlab-org/frontend/renovate-gitlab-bot) to
+automatically create merge requests for updating (some) Node and Ruby dependencies in several projects.
+You can find the up-to-date list of projects managed by the renovate bot in the project's README.
+
+Some key dependencies updated using renovate are:
+
+- [`@gitlab/ui`](https://gitlab.com/gitlab-org/gitlab-ui)
+- [`@gitlab/svgs`](https://gitlab.com/gitlab-org/gitlab-svgs)
+- [`@gitlab/eslint-plugin`](https://gitlab.com/gitlab-org/frontend/eslint-plugin)
+- And any other package in the `@gitlab/` scope
+
+We have the goal of updating [_all_ dependencies with renovate](https://gitlab.com/gitlab-org/frontend/rfcs/-/issues/21).
+
+Updating dependencies automatically has several benefits, have a look at this [example MR](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/53613).
+
+- MRs are created automatically when new versions are released.
+- MRs can easily be rebased and updated by just checking a checkbox in the MR description.
+- MRs contain changelog summaries and links to compare the different package versions.
+- MRs can be assigned to people directly responsible for the dependencies.
+
+### Community contributions updating dependencies
+
+It is okay to reject Community Contributions that solely bump dependencies.
+Simple dependency updates are better done automatically for the reasons provided above.
+If a community contribution needs to be rebased, runs into conflicts, or goes stale, the effort required
+to instruct the contributor to correct it often outweighs the benefits.
+
+If a dependency update is accompanied with significant migration efforts, due to major version updates,
+a community contribution is acceptable.
+
+Here is a message you can use to explain to community contributors as to why we reject simple updates:
+
+```markdown
+Hello CONTRIBUTOR!
+
+Thank you very much for this contribution. It seems like you are doing a "simple" dependency update.
+
+If a dependency update is as simple as increasing the version number, we'd like a Bot to do this to save you and ourselves some time.
+
+This has certain benefits as outlined in our <a href="https://docs.gitlab.com/ee/development/fe_guide/dependencies.html#updating-dependencies">Frontend development guidelines</a>.
+
+You might find that we do not currently update DEPENDENCY automatically, but we are planning to do so in [the near future](https://gitlab.com/gitlab-org/frontend/rfcs/-/issues/21).
+
+Thank you for understanding, I will close this Merge Request.
+/close
+```
diff --git a/doc/development/directory_structure.md b/doc/development/directory_structure.md
index c96e2cc3254..8ba77bade2c 100644
--- a/doc/development/directory_structure.md
+++ b/doc/development/directory_structure.md
@@ -72,7 +72,7 @@ could make them shallow and more coupled with other contexts.
Bounded contexts (or top-level namespaces) can be seen as macro-components in the overall app.
Good bounded contexts should be [deep](https://medium.com/@nakabonne/depth-of-module-f62dac3c2fdb)
so consider having nested namespaces to further break down complex parts of the domain.
-E.g. `Ci::Config::`.
+For example, `Ci::Config::`.
For example, instead of having separate and granular bounded contexts like: `ContainerScanning::`,
`ContainerHostSecurity::`, `ContainerNetworkSecurity::`, we could have:
diff --git a/doc/development/distributed_tracing.md b/doc/development/distributed_tracing.md
index 8bd8599a0b0..f8184a562ec 100644
--- a/doc/development/distributed_tracing.md
+++ b/doc/development/distributed_tracing.md
@@ -101,7 +101,7 @@ trace in a hierarchical time-line.
## Using Jaeger without the GitLab Developer Kit
Distributed Tracing can be enabled in non-GDK development environments as well as production or
-staging environments, for troubleshooting. Please note that at this time, this functionality is
+staging environments, for troubleshooting. At this time, this functionality is
experimental, and not supported in production environments at present. In this first release, it is intended to be
used for debugging in development environments only.
diff --git a/doc/development/documentation/feature_flags.md b/doc/development/documentation/feature_flags.md
index 7fa80e2d0f5..b0fa6c3428c 100644
--- a/doc/development/documentation/feature_flags.md
+++ b/doc/development/documentation/feature_flags.md
@@ -1,14 +1,12 @@
---
type: reference, dev
-stage: none
-group: Development
-info: "See the Technical Writers assigned to Development Guidelines: https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments-to-development-guidelines"
+info: For assistance with this Style Guide page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments-to-other-projects-and-subjects.
description: "GitLab development - how to document features deployed behind feature flags"
---
# Document features deployed behind feature flags
-GitLab uses [Feature Flags](../feature_flags/index.md) to strategically roll
+GitLab uses [feature flags](../feature_flags/index.md) to strategically roll
out the deployment of its own features. The way we document a feature behind a
feature flag depends on its state (enabled or disabled). When the state
changes, the developer who made the change **must update the documentation**
@@ -18,296 +16,92 @@ Every feature introduced to the codebase, even if it's behind a feature flag,
must be documented. For context, see the
[latest merge request that updated this guideline](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/47917#note_459984428).
-## Criteria
+When you document feature flags, you must:
-According to the process of [deploying GitLab features behind feature flags](https://about.gitlab.com/handbook/product-development-flow/feature-flag-lifecycle/):
+- [Add a note at the start of the topic](#use-a-note-to-describe-the-state-of-the-feature-flag).
+- [Add version history text](#add-version-history-text).
-> - _By default, feature flags should be off._
-> - _Feature flags should remain in the codebase for a short period as possible to reduce the need for feature flag accounting._
-> - _In order to build a final release and present the feature for self-managed users, the feature flag should be at least defaulted to on._
+## Use a note to describe the state of the feature flag
-See how to document them below, according to the state of the flag:
+Information about feature flags should be in a **Note** at the start of the topic (just below the version history).
-- [Features disabled by default](#features-disabled-by-default).
-- [Features that became enabled by default](#features-that-became-enabled-by-default).
-- [Features directly enabled by default](#features-directly-enabled-by-default).
-- [Features that can be enabled or disabled for a single project](#features-enabled-by-project).
-- [Features with the feature flag removed](#features-with-flag-removed).
+The note has three parts, and follows this structure:
-The [`**(FREE SELF)**`](styleguide/index.md#product-tier-badges) badge or equivalent for
-the feature's tier should be added to the line and heading that refers to
-enabling/disabling feature flags as Admin access is required to do so,
-therefore, it indicates that it cannot be done by regular users of GitLab.com.
-
-### Features disabled by default
-
-For features disabled by default, add or improve the docs with every change in line with the
-[definition of done](../contributing/merge_request_workflow.md#definition-of-done).
-
-Include details of the feature flag in the documentation:
-
-- Say that it's disabled by default.
-- Say whether it's enabled on GitLab.com.
-- If the feature can be enabled/disabled for a single project, add the
- [by-project information](#features-enabled-by-project). Otherwise,
- do not say anything about it.
-- Say whether it's recommended for production use.
-- Document how to enable and disable it, preferably at the end of the file.
-- Add a warning to the user saying that the feature might be disabled.
-
-For example, for a feature disabled by default, disabled on GitLab.com, cannot
-be enabled for a single project, and is not ready for production use:
-
-````markdown
-# Feature Name
-
-> - [Introduced](link-to-issue) in GitLab 12.0.
-> - [Deployed behind a feature flag](<replace with path to>/user/feature_flags.md), disabled by default.
-> - Disabled on GitLab.com.
-> - Not recommended for production use.
-> - To use in GitLab self-managed instances, ask a GitLab administrator to [enable it](#anchor-to-section). **(FREE SELF)**
-
-This in-development feature might not be available for your use. There can be
-[risks when enabling features still in development](<replace with path to>/user/feature_flags.md#risks-when-enabling-features-still-in-development).
-Refer to this feature's version history for more details.
-
-(...Regular content goes here...)
-
-<!-- Add this at the end of the file -->
-
-### Enable or disable <Feature Name> **(FREE SELF)**
-
-<Feature Name> is under development and not ready for production use. It is
-deployed behind a feature flag that is **disabled by default**.
-[GitLab administrators with access to the GitLab Rails console](<replace with path to>/administration/feature_flags.md)
-can enable it.
-
-To enable it:
-
-```ruby
-Feature.enable(:<feature flag>)
-```
-
-To disable it:
-
-```ruby
-Feature.disable(:<feature flag>)
-```
-````
-
-Adjust the blurb according to the state of the feature you're documenting.
-Replace `<Feature name>`, `**(FREE SELF)**`, `<feature flag>`, and
-`<replace with path to>`, and `#anchor-to-section` accordingly.
-
-### Features that became enabled by default
-
-For features that were released disabled by default but became enabled by
-default:
-
-- Say that it became enabled by default.
-- Say whether it's enabled on GitLab.com.
-- If the feature can be enabled/disabled for a single project, add the
- [by-project information](#features-enabled-by-project). Otherwise,
- do not say anything about it.
-- Say whether it's recommended for production use.
-- Document how to disable and enable it, preferably at the end of the file.
-- Add a warning to the user saying that the feature might be disabled.
-
-For example, for a feature initially deployed disabled by default, that became
-enabled by default, that is enabled on GitLab.com, and is ready for production
-use:
-
-````markdown
-# Feature Name
-
-> - [Introduced](link-to-issue) in GitLab 12.0.
-> - [Deployed behind a feature flag](<replace with path to>/user/feature_flags.md), disabled by default.
-> - [Enabled by default](link-to-issue) in GitLab 12.1.
-> - Enabled on GitLab.com.
-> - Recommended for production use.
-> - For GitLab self-managed instances, GitLab administrators can opt to [disable it](#anchor-to-section). **(FREE SELF)**
-
-There can be
-[risks when disabling released features](<replace with path to>/user/feature_flags.md#risks-when-disabling-released-features).
-Refer to this feature's version history for more details.
-
-(...Regular content goes here...)
-
-<!-- Add this at the end of the file -->
-
-### Enable or disable <Feature Name> **(FREE SELF)**
-
-<Feature Name> is under development but ready for production use.
-It is deployed behind a feature flag that is **enabled by default**.
-[GitLab administrators with access to the GitLab Rails console](<replace with path to>/administration/feature_flags.md)
-can opt to disable it.
-
-To enable it:
-
-```ruby
-Feature.enable(:<feature flag>)
-```
-
-To disable it:
-
-```ruby
-Feature.disable(:<feature flag>)
+```markdown
+FLAG:
+<Self-managed GitLab availability information.> <GitLab.com availability information.>
+<This feature is not ready for production use.>
```
-````
-
-Adjust the blurb according to the state of the feature you're documenting.
-Replace `<Feature name>`, `**(FREE SELF)**`, `<feature flag>`,
-`<replace with path to>`, and `#anchor-to-section` accordingly.
-
-### Features directly enabled by default
-For features enabled by default:
+### Self-managed GitLab availability information
-- Say it's enabled by default.
-- Say whether it's enabled on GitLab.com.
-- If the feature can be enabled/disabled for a single project, add the
- [by-project information](#features-enabled-by-project). Otherwise,
- do not say anything about it.
-- Say whether it's recommended for production use.
-- Document how to disable and enable it, preferably at the end of the file.
-- Add a warning to the user saying that the feature might be disabled.
+| If the feature is... | Use this text |
+|--------------------------|---------------|
+| Available | `On self-managed GitLab, by default this feature is available. To hide the feature, ask an administrator to [disable the <flag name> flag](<path to>/administration/feature_flags.md).` |
+| Unavailable | `On self-managed GitLab, by default this feature is not available. To make it available, ask an administrator to [enable the <flag name> flag](<path to>/administration/feature_flags.md).` |
+| Available, per-group | `On self-managed GitLab, by default this feature is available. To hide the feature per group, ask an administrator to [disable the <flag name> flag](<path to>/administration/feature_flags.md).` |
+| Unavailable, per-group | `On self-managed GitLab, by default this feature is not available. To make it available per group, ask an administrator to [enable the <flag name> flag](<path to>/administration/feature_flags.md).` |
+| Available, per-project | `On self-managed GitLab, by default this feature is available. To hide the feature per project or for your entire instance, ask an administrator to [disable the <flag name> flag](<path to>/administration/feature_flags.md).` |
+| Unavailable, per-project | `On self-managed GitLab, by default this feature is not available. To make it available per project or for your entire instance, ask an administrator to [enable the <flag name> flag](<path to>/administration/feature_flags.md).` |
+| Available, per-user | `On self-managed GitLab, by default this feature is available. To hide the feature per user, ask an administrator to [disable the <flag name> flag](<path to>/administration/feature_flags.md).` |
+| Unavailable, per-user | `On self-managed GitLab, by default this feature is not available. To make it available per user, ask an administrator to [enable the <flag name> flag](<path to>/administration/feature_flags.md).` |
-For example, for a feature enabled by default, enabled on GitLab.com, that
-cannot be enabled for a single project, and is ready for production use:
+### GitLab.com availability information
-````markdown
-# Feature Name
+| If the feature is... | Use this text |
+|-------------------------------------|---------------|
+| Available | `On GitLab.com, this feature is available.` |
+| Available to GitLab.com admins only | `On GitLab.com, this feature is available but can be configured by GitLab.com administrators only.`
+| Unavailable | `On GitLab.com, this feature is not available.`|
-> - [Introduced](link-to-issue) in GitLab 12.0.
-> - [Deployed behind a feature flag](<replace with path to>/user/feature_flags.md), enabled by default.
-> - Enabled on GitLab.com.
-> - Recommended for production use.
-> - For GitLab self-managed instances, GitLab administrators can opt to [disable it](#anchor-to-section). **(FREE SELF)**
+### Optional information
-There can be
-[risks when disabling released features](<replace with path to>/user/feature_flags.md#risks-when-disabling-released-features).
-Refer to this feature's version history for more details.
+If needed, you can add this sentence:
-(...Regular content goes here...)
+`You should not use this feature for production environments.`
-<!-- Add this at the end of the file -->
+## Add version history text
-### Enable or disable <Feature Name> **(FREE SELF)**
-
-<Feature Name> is under development but ready for production use.
-It is deployed behind a feature flag that is **enabled by default**.
-[GitLab administrators with access to the GitLab Rails console](<replace with path to>/administration/feature_flags.md)
-can opt to disable it.
-
-To enable it:
-
-```ruby
-Feature.enable(:<feature flag>)
-```
+When the state of a flag changes (for example, disabled by default to enabled by default), add the change to the version history.
-To disable it:
-
-```ruby
-Feature.disable(:<feature flag>)
-```
-````
-
-Adjust the blurb according to the state of the feature you're documenting.
-Replace `<Feature name>`, `**(FREE SELF)**`, `<feature flag>`,
-`<replace with path to>`, and `#anchor-to-section` accordingly.
-
-### Features enabled by project
-
-If the feature can be enabled/disabled for a single project, include in the
-version history note:
+Possible version history entries are:
```markdown
-> - It can be enabled or disabled for a single project.
+> - [Enabled on GitLab.com](issue-link) in GitLab X.X and is ready for production use.
+> - [Enabled on GitLab.com](issue-link) in GitLab X.X and is ready for production use. Available to GitLab.com administrators only.
+> - [Enabled with <flag name> flag](issue-link) for self-managed GitLab in GitLab X.X and is ready for production use.
+> - [Feature flag <flag name> removed](issue-line) in GitLab X.X.
```
-Then add the by-project code to the code blocks:
-
-Enable code:
+## Feature flag documentation examples
-```ruby
-# For the instance
-Feature.enable(:<feature flag>)
-# For a single project
-Feature.enable(:<feature flag>, Project.find(<project id>))
-```
+The following examples show the progression of a feature flag.
-Disable code:
+```markdown
+> Introduced in GitLab 13.7.
-```ruby
-# For the instance
-Feature.disable(:<feature flag>)
-# For a single project
-Feature.disable(:<feature flag>, Project.find(<project id>))
+FLAG:
+On self-managed GitLab, by default this feature is not available. To make it available,
+ask an administrator to [enable the `forti_token_cloud` flag](../administration/feature_flags.md).`
+The feature is not ready for production use.
```
-For example, for a feature enabled by default, enabled on GitLab.com, that can
-be enabled by project, and is ready for production use:
+If it were to be updated in the future to enable its use in production, you can update the version history:
-````markdown
-# Feature Name
-
-> - [Introduced](link-to-issue) in GitLab 12.0.
-> - [Deployed behind a feature flag](<replace with path to>/user/feature_flags.md), enabled by default.
-> - Enabled on GitLab.com.
-> - Can be enabled or disabled for a single project.
-> - Recommended for production use.
-> - For GitLab self-managed instances, GitLab administrators can opt to [disable it](#anchor-to-section). **(FREE SELF)**
-
-There can be
-[risks when disabling released features](<replace with path to>/user/feature_flags.md#risks-when-disabling-released-features).
-Refer to this feature's version history for more details.
-
-(...Regular content goes here...)
-
-<!-- Add this at the end of the file -->
-
-### Enable or disable <Feature Name> **(FREE SELF)**
-
-<Feature Name> is under development but ready for production use.
-It is deployed behind a feature flag that is **enabled by default**.
-[GitLab administrators with access to the GitLab Rails console](<replace with path to>/administration/feature_flags.md)
-can opt to disable it.
-
-To enable it:
+```markdown
+> - Introduced in GitLab 13.7.
+> - [Enabled with `forti_token_cloud` flag](https://gitlab.com/issue/etc) for self-managed GitLab in GitLab X.X and ready for production use.
-```ruby
-# For the instance
-Feature.enable(:<feature flag>)
-# For a single project
-Feature.enable(:<feature flag>, Project.find(<project id>))
+FLAG:
+On self-managed GitLab, by default this feature is available. To hide the feature per user,
+ask an administrator to [disable the `forti_token_cloud` flag](../administration/feature_flags.md).
```
-To disable it:
+And, when the feature is done and fully available to all users:
-```ruby
-# For the instance
-Feature.disable(:<feature flag>)
-# For a single project
-Feature.disable(:<feature flag>, Project.find(<project id>))
+```markdown
+> - Introduced in GitLab 13.7.
+> - [Enabled on GitLab.com](https://gitlab.com/issue/etc) in GitLab X.X and is ready for production use.
+> - [Enabled with `forti_token_cloud` flag](https://gitlab.com/issue/etc) for self-managed GitLab in GitLab X.X and is ready for production use.
+> - [Feature flag `forti_token_cloud`](https://gitlab.com/issue/etc) removed in GitLab X.X.
```
-````
-
-Adjust the blurb according to the state of the feature you're documenting.
-Replace `<Feature name>`, `**(FREE SELF)**`, `<feature flag>`,
-`<replace with path to>`, and `#anchor-to-section` accordingly.
-
-### Features with flag removed
-
-Once the feature is ready and the flag has been removed, clean up the
-documentation. Remove the feature flag mention keeping only a note that
-mentions the flag in the version history notes:
-
-````markdown
-# Feature Name
-
-> - [Introduced](link-to-issue) in GitLab 12.0.
-> - [Feature flag removed](link-to-issue) in GitLab 12.2.
-
-(...Regular content...)
-
-````
diff --git a/doc/development/documentation/index.md b/doc/development/documentation/index.md
index 91215ca21b4..59a1b8c7b99 100644
--- a/doc/development/documentation/index.md
+++ b/doc/development/documentation/index.md
@@ -41,7 +41,7 @@ run only the jobs that match the type of contribution. If your contribution cont
**only** documentation changes, then only documentation-related jobs run, and
the pipeline completes much faster than a code contribution.
-If you are submitting documentation-only changes to Runner, Omnibus, or Charts,
+If you are submitting documentation-only changes to Omnibus or Charts,
the fast pipeline is not determined automatically. Instead, create branches for
docs-only merge requests using the following guide:
@@ -152,12 +152,7 @@ comments: false
Each page can have additional, optional metadata (set in the
[default.html](https://gitlab.com/gitlab-org/gitlab-docs/-/blob/fc3577921343173d589dfa43d837b4307e4e620f/layouts/default.html#L30-52)
-Nanoc layout), which is displayed at the top of the page if defined:
-
-- `reading_time`: If you want to add an indication of the approximate reading
- time of a page, you can set `reading_time` to `true`. This uses a simple
- [algorithm](https://gitlab.com/gitlab-org/gitlab-docs/-/blob/main/lib/helpers/reading_time.rb)
- to calculate the reading time based on the number of words.
+Nanoc layout), which is displayed at the top of the page if defined.
## Move or rename a page
@@ -209,8 +204,7 @@ To add a redirect:
bundle exec rake "gitlab:docs:redirect[doc/user/search/old_file.md, https://example.com]"
```
- Alternatively, you can omit the arguments, and you'll be asked to enter
- their values:
+ Alternatively, you can omit the arguments and be asked to enter their values:
```shell
bundle exec rake gitlab:docs:redirect
@@ -475,7 +469,7 @@ If you want to know the in-depth details, here's what's really happening:
The following GitLab features are used among others:
-- [Manual actions](../../ci/yaml/index.md#whenmanual)
+- [Manual jobs](../../ci/jobs/job_control.md#create-a-job-that-must-be-run-manually)
- [Multi project pipelines](../../ci/pipelines/multi_project_pipelines.md)
- [Review Apps](../../ci/review_apps/index.md)
- [Artifacts](../../ci/yaml/index.md#artifacts)
diff --git a/doc/development/documentation/site_architecture/index.md b/doc/development/documentation/site_architecture/index.md
index a1e08a9c19b..046de5c6d86 100644
--- a/doc/development/documentation/site_architecture/index.md
+++ b/doc/development/documentation/site_architecture/index.md
@@ -60,7 +60,7 @@ as such the docs for CE and EE are now identical. For historical reasons and
in order not to break any existing links throughout the internet, we still
maintain the CE docs (`https://docs.gitlab.com/ce/`), although it is hidden
from the website, and is now a symlink to the EE docs. When
-[Pages supports redirects](https://gitlab.com/gitlab-org/gitlab-pages/-/issues/24),
+[Support wildcard redirects](https://gitlab.com/gitlab-org/gitlab-pages/-/issues/500) is resolved,
we can remove this completely.
## Assets
@@ -241,7 +241,7 @@ reports.
## Monthly release process (versions)
The docs website supports versions and each month we add the latest one to the list.
-For more information, read about the [monthly release process](release_process.md).
+For more information, read about the [monthly release process](https://about.gitlab.com/handbook/engineering/ux/technical-writing/workflow/#monthly-documentation-releases).
## Review Apps for documentation merge requests
diff --git a/doc/development/documentation/site_architecture/release_process.md b/doc/development/documentation/site_architecture/release_process.md
deleted file mode 100644
index 46c74335932..00000000000
--- a/doc/development/documentation/site_architecture/release_process.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: 'https://about.gitlab.com/handbook/engineering/ux/technical-writing/workflow/#monthly-documentation-releases'
-remove_date: '2021-07-12'
----
-
-This file was moved to [another location](https://about.gitlab.com/handbook/engineering/ux/technical-writing/workflow/#monthly-documentation-releases).
-
-<!-- This redirect file can be deleted after <2021-07-12>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/development/documentation/structure.md b/doc/development/documentation/structure.md
index ac934673ee2..a9b93997906 100644
--- a/doc/development/documentation/structure.md
+++ b/doc/development/documentation/structure.md
@@ -183,8 +183,8 @@ A paragraph that explains what the tutorial does, and the expected outcome.
To create a website:
-- [Step 1: Do the first task](#do-the-first-task)
-- [Step 2: Do the second task](#do-the-second-task)
+1. [Do the first task](#do-the-first-task)
+1. [Do the second task](#do-the-second-task)
Prerequisites (optional):
@@ -197,8 +197,8 @@ Prerequisites (optional):
To do step 1:
1. First step.
-2. Another step.
-3. Another step.
+1. Another step.
+1. Another step.
## Do the second task
@@ -207,8 +207,8 @@ Before you begin, make sure you have [done the first task](#do-the-first-task).
To do step 2:
1. First step.
-2. Another step.
-3. Another step.
+1. Another step.
+1. Another step.
```
### Get started
diff --git a/doc/development/documentation/styleguide/index.md b/doc/development/documentation/styleguide/index.md
index a5345f3b52d..4e548179b9e 100644
--- a/doc/development/documentation/styleguide/index.md
+++ b/doc/development/documentation/styleguide/index.md
@@ -1,7 +1,5 @@
---
-stage: none
-group: Style Guide
-info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+info: For assistance with this Style Guide page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments-to-other-projects-and-subjects.
description: 'Writing styles, markup, formatting, and other standards for GitLab Documentation.'
---
@@ -39,7 +37,7 @@ documentation.
### The documentation includes all information
Include problem-solving actions that may address rare cases or be considered
-_risky_, but provide proper context through fully-detailed
+risky, but provide proper context through fully detailed
warnings and caveats. This kind of content should be included as it could be
helpful to others and, when properly explained, its benefits outweigh the risks.
If you think you have found an exception to this rule, contact the
@@ -96,7 +94,7 @@ of truth and explain why it is important.
### Docs-first methodology
-We employ a _documentation-first methodology_. This method ensures the documentation
+We employ a documentation-first methodology. This method ensures the documentation
remains a complete and trusted resource, and makes communicating about the use
of GitLab more efficient.
@@ -129,22 +127,14 @@ the documentation.
All GitLab documentation is written using [Markdown](https://en.wikipedia.org/wiki/Markdown).
-The [documentation website](https://docs.gitlab.com) uses GitLab Kramdown as its
-Markdown rendering engine. For a complete Kramdown reference, see the
-[GitLab Markdown Kramdown Guide](https://about.gitlab.com/handbook/markdown-guide/).
-
-The [`gitlab-kramdown`](https://gitlab.com/gitlab-org/gitlab_kramdown) Ruby gem
-plans to support all [GitLab Flavored Markdown](../../../user/markdown.md) in the future, which is
-all Markdown supported for display in the GitLab application itself. For now, use
-regular Markdown and follow the rules in the linked style guide.
-
-Kramdown-specific markup (for example, `{:.class}`) doesn't render
-properly on GitLab instances under [`/help`](../index.md#gitlab-help).
+The [documentation website](https://docs.gitlab.com) uses [GitLab Kramdown](https://gitlab.com/gitlab-org/gitlab_kramdown),
+a "flavored" Kramdown engine to render pages from Markdown to HTML. The use of Kramdown's
+features is limited by our linters, so, use regular Markdown and follow the rules in the
+linked style guide. You can't use Kramdown-specific markup (for example, `{:.class}`).
### HTML in Markdown
-Hard-coded HTML is valid, although it's discouraged from being used while we
-have `/help`. HTML is permitted if:
+Hard-coded HTML is valid, although it's discouraged from being used. HTML is permitted if:
- There's no equivalent markup in Markdown.
- Advanced tables are necessary.
@@ -232,8 +222,8 @@ Put files for a specific product area into the related folder:
When working with directories and files:
1. When you create a new directory, always start with an `index.md` file.
- Don't use another filename and _do not_ create `README.md` files.
-1. _Do not_ use special characters and spaces, or capital letters in file
+ Don't use another filename and do not create `README.md` files.
+1. Do not use special characters and spaces, or capital letters in file
names, directory names, branch names, and anything that generates a path.
1. When creating or renaming a file or directory and it has more than one word
in its name, use underscores (`_`) instead of spaces or dashes. For example,
@@ -300,16 +290,11 @@ Do not include the same information in multiple places.
## Language
-GitLab documentation should be clear and easy to understand. Avoid unnecessary words.
+GitLab documentation should be clear and easy to understand.
+- Avoid unnecessary words.
- Be clear, concise, and stick to the goal of the topic.
- Write in US English with US grammar. (Tested in [`British.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/British.yml).)
-- Rewrite to avoid wordiness:
- - there is
- - there are
- - enables you to
- - in order to
- - because of the fact that
### Capitalization
@@ -325,35 +310,20 @@ Use sentence case. For example:
When referring to specific user interface text, like a button label or menu
item, use the same capitalization that's displayed in the user interface.
Standards for this content are listed in the [Pajamas Design System Content section](https://design.gitlab.com/content/punctuation/)
-and typically match what's called for in this Documentation Style Guide.
+and typically match what's mentioned in this Documentation Style Guide.
If you think the user interface text contains style mistakes,
create an issue or an MR to propose a change to the user interface text.
#### Feature names
-- *Feature names are typically lowercase*, like those describing actions and
- types of objects in GitLab. For example:
- - epics
- - issues
- - issue weights
- - merge requests
- - milestones
- - reorder issues
- - runner, runners, shared runners
- - a to-do item (tested in [`ToDo.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/ToDo.yml))
+- *Feature names are typically lowercase*.
- *Some features are capitalized*, typically nouns naming GitLab-specific
- capabilities or tools. For example:
- - GitLab CI/CD
- - Repository Mirroring
- - Value Stream Analytics
- - the To-Do List
- - the Web IDE
- - Geo
- - GitLab Runner (see [this issue](https://gitlab.com/gitlab-org/gitlab/-/issues/233529) for details)
-
-Document any exceptions in this style guide. If you're not sure, ask a GitLab
-Technical Writer so that they can help decide and document the result.
+ capabilities or tools.
+
+See the [word list](word_list.md) for details.
+
+If the term is not in the word list, ask a GitLab Technical Writer for advice.
Do not match the capitalization of terms or phrases on the [Features page](https://about.gitlab.com/features/)
or [features.yml](https://gitlab.com/gitlab-com/www-gitlab-com/blob/master/data/features.yml)
@@ -374,24 +344,14 @@ Follow the capitalization style listed at the authoritative source
for the entity, which may use non-standard case styles. For example: GitLab and
npm.
-Use forms of *sign in*, instead of *log in* or *login*. For example:
-
-- Sign in to GitLab.
-- Open the sign-in page.
-
-Exceptions to this rule include the concept of *single sign-on* and
-references to user interface elements. For example:
-
-- To sign in to product X, enter your credentials, and then select **Log in**.
-
### Fake user information
You may need to include user information in entries such as a REST call or user profile.
-_Do not_ use real user information or email addresses in GitLab documentation. For email
-addresses and names, do use:
+Do not use real user information or email addresses in GitLab documentation. For email
+addresses and names, use:
-- _Email addresses_: Use an email address ending in `example.com`.
-- _Names_: Use strings like `example_username`. Alternatively, use diverse or
+- Email addresses: Use an email address ending in `example.com`.
+- Names: Use strings like `example_username`. Alternatively, use diverse or
non-gendered names with common surnames, such as `Sidney Jones`, `Zhang Wei`,
or `Alex Garcia`.
@@ -492,14 +452,14 @@ Follow these guidelines for punctuation:
| Rule | Example |
|------------------------------------------------------------------|--------------------------------------------------------|
-| Avoid semicolons. Use two sentences instead. | _That's the way that the world goes 'round. You're up one day and the next you're down._
-| Always end full sentences with a period. | _For a complete overview, read through this document._ |
-| Always add a space after a period when beginning a new sentence. | _For a complete overview, check this doc. For other references, check out this guide._ |
+| Avoid semicolons. Use two sentences instead. | That's the way that the world goes 'round. You're up one day and the next you're down.
+| Always end full sentences with a period. | For a complete overview, read through this document. |
+| Always add a space after a period when beginning a new sentence. | For a complete overview, check this doc. For other references, check out this guide. |
| Do not use double spaces. (Tested in [`SentenceSpacing.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/SentenceSpacing.yml).) | --- |
| Do not use tabs for indentation. Use spaces instead. You can configure your code editor to output spaces instead of tabs when pressing the tab key. | --- |
-| Use serial commas (_Oxford commas_) before the final _and_ or _or_ in a list of three or more items. (Tested in [`OxfordComma.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/OxfordComma.yml).) | _You can create new issues, merge requests, and milestones._ |
-| Always add a space before and after dashes when using it in a sentence (for replacing a comma, for example). | _You should try this - or not._ |
-| When a colon is part of a sentence, always use lowercase after the colon. | _Linked issues: a way to create a relationship between issues._ |
+| Use serial commas (Oxford commas) before the final **and** or **or** in a list of three or more items. (Tested in [`OxfordComma.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/OxfordComma.yml).) | You can create new issues, merge requests, and milestones. |
+| Always add a space before and after dashes when using it in a sentence (for replacing a comma, for example). | You should try this - or not. |
+| When a colon is part of a sentence, always use lowercase after the colon. | Linked issues: a way to create a relationship between issues. |
<!-- vale gitlab.Repetition = YES -->
@@ -529,6 +489,20 @@ When the docs are generated, the output is:
To stop the command, press <kbd>Control</kbd>+<kbd>C</kbd>.
+### Text entered in the UI
+
+If you want the user to type something in the UI, use backticks. For example:
+
+```plaintext
+In the **Commit message** box, type `This is my merge request`.
+```
+
+Backticks are more precise than quotes. For example, in this string:
+
+- In the **Commit message** box, type "This is my merge request."
+
+It's not clear whether the user should include the period in the string.
+
### Spaces between words
Use only standard spaces between words. The search engine for the documentation
@@ -776,11 +750,11 @@ Valid for Markdown content only, not for front matter entries:
"This sentence 'quotes' something in a quote".
For other punctuation rules, refer to the
-[GitLab UX guide](https://design.gitlab.com/content/punctuation/).
+[Pajamas Design System Punctuation section](https://design.gitlab.com/content/punctuation/).
## Headings
-- Add _only one H1_ in each document, by adding `#` at the beginning of
+- Add only one H1 in each document, by adding `#` at the beginning of
it (when using Markdown). The `h1` becomes the document `<title>`.
- Start with an `h2` (`##`), and respect the order `h2` > `h3` > `h4` > `h5` > `h6`.
Never skip the hierarchy level, such as `h2` > `h4`
@@ -879,16 +853,16 @@ We include guidance for links in these categories:
### Basic link criteria
- Use inline link Markdown markup `[Text](https://example.com)`.
- It's easier to read, review, and maintain. _Do not_ use `[Text][identifier]`.
+ It's easier to read, review, and maintain. Do not use `[Text][identifier]` reference-style links.
-- Use [meaningful anchor texts](https://www.futurehosting.com/blog/links-should-have-meaningful-anchor-text-heres-why/).
- For example, instead of writing something like `Read more about GitLab Issue Boards [here](LINK)`,
- write `Read more about [GitLab Issue Boards](LINK)`.
+- Use [meaningful anchor text](https://www.futurehosting.com/blog/links-should-have-meaningful-anchor-text-heres-why/).
+ For example, instead of writing something like `Read more about merge requests [here](LINK)`,
+ write `Read more about [merge requests](LINK)`.
### Links to internal documentation
NOTE:
-_Internal_ refers to documentation in the same project. When linking to
+**Internal** refers to documentation in the same project. When linking to
documentation in separate projects (for example, linking to Omnibus documentation
from GitLab documentation), you must use absolute URLs.
@@ -1020,8 +994,8 @@ the commit link ensures the user lands on the line you're referring to. The
**Permalink** button, displayed when viewing a file in a project,
provides a link to the most recent commit of that file.
-- _Do_: `[link to line 3](https://gitlab.com/gitlab-org/gitlab/-/blob/11f17c56d8b7f0b752562d78a4298a3a95b5ce66/.gitlab/issue_templates/Feature%20proposal.md#L3)`
-- _Don't_: `[link to line 3](https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab/issue_templates/Feature%20proposal.md#L3).`
+- Do: `[link to line 3](https://gitlab.com/gitlab-org/gitlab/-/blob/11f17c56d8b7f0b752562d78a4298a3a95b5ce66/.gitlab/issue_templates/Feature%20proposal.md#L3)`
+- Don't: `[link to line 3](https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab/issue_templates/Feature%20proposal.md#L3).`
If that linked expression has changed line numbers due to additional
commits, you can still search the file for that query. In this case, update the
@@ -1082,13 +1056,13 @@ they need to interact with the application.
When you take screenshots:
-- _Capture the most relevant area of the page._ Don't include unnecessary white
+- **Capture the most relevant area of the page.** Don't include unnecessary white
space or areas of the page that don't help illustrate the point. The left
sidebar of the GitLab user interface can change, so don't include the sidebar
if it's not necessary.
-- _Keep it small._ If you don't need to show the full width of the screen, don't.
+- **Keep it small.** If you don't need to show the full width of the screen, don't.
A value of 1000 pixels is a good maximum width for your screenshot image.
-- _Be consistent._ Coordinate screenshots with the other screenshots already on
+- **Be consistent.** Coordinate screenshots with the other screenshots already on
a documentation page. For example, if other screenshots include the left
sidebar, include the sidebar in all screenshots.
@@ -1107,8 +1081,8 @@ When you take screenshots:
- Consider using PNG images instead of JPEG.
- [Compress all PNG images](#compress-images).
- Compress GIFs with <https://ezgif.com/optimize> or similar tool.
-- Images should be used (only when necessary) to _illustrate_ the description
- of a process, not to _replace_ it.
+- Images should be used (only when necessary) to illustrate the description
+ of a process, not to replace it.
- Max image size: 100KB (GIFs included).
- See also how to link and embed [videos](#videos) to illustrate the
documentation.
@@ -1123,7 +1097,7 @@ documentation site. For accessibility and SEO, use [descriptions](https://webaim
that:
- Are accurate, succinct, and unique.
-- Don't use _image of…_ or _graphic of…_ to describe the image.
+- Don't use **image of** or **graphic of** to describe the image.
### Compress images
@@ -1196,7 +1170,7 @@ embedded videos take up a lot of space on the page and can be distracting to rea
To embed a video:
1. Copy the code from this procedure and paste it into your Markdown file. Leave a
- blank line above and below it. Do _not_ edit the code (don't remove or add any spaces).
+ blank line above and below it. Do not edit the code (don't remove or add any spaces).
1. In YouTube, visit the video URL you want to display. Copy the regular URL
from your browser (`https://www.youtube.com/watch?v=VIDEO-ID`) and replace
the video title and link in the line under `<div class="video-fallback">`.
@@ -1377,8 +1351,13 @@ example:
Use alert boxes to call attention to information.
-Alert boxes are generated when the words `NOTE:` or `WARNING:` are followed by a
-line break. For example:
+Alert boxes are generated when one of these words is followed by a line break:
+
+- `FLAG:`
+- `NOTE:`
+- `WARNING:`
+
+For example:
```markdown
NOTE:
@@ -1391,6 +1370,11 @@ To display an alert box for multiple paragraphs, lists, or headers, use
Alert boxes render only on the GitLab documentation site (<https://docs.gitlab.com>).
In the GitLab product help, alert boxes appear as plain text.
+### Flag
+
+Use this alert type to describe a feature's availability. For information about how to format
+`FLAG` alerts, see [Document features deployed behind feature flags](../feature_flags.md).
+
### Note
Use notes sparingly. Too many notes can make topics difficult to scan.
@@ -1481,17 +1465,18 @@ application:
Use these verbs for specific uses with user interface
elements:
-| Recommended | Used for | Replaces |
-|:--------------------|:--------------------------------------|:---------------------------|
-| _select_ | buttons, links, menu items, dropdowns | "click, "press," "hit" |
-| _select_ or _clear_ | checkboxes | "enable", "click", "press" |
-| _expand_ | expandable sections | "open" |
+| Recommended | Used for | Replaces |
+|:--------------------|:--------------------------------------|:----------------------|
+| select | buttons, links, menu items, dropdowns | click, press, hit |
+| select or clear | checkboxes | enable, click, press |
+| expand | expandable sections | open |
+| turn on or turn off | toggles | flip, enable, disable |
### Other Verbs
| Recommended | Used for | Replaces |
|:------------|:--------------------------------|:----------------------|
-| _go to_ | making a browser go to location | "navigate to", "open" |
+| go to | making a browser go to location | navigate to, open |
## GitLab versions
@@ -1624,6 +1609,20 @@ For example:
- In GitLab 12.2 and earlier, ...
- In GitLab 11.6 and later, ...
+### Promising features in future versions
+
+Do not promise to deliver features in a future release. For example, avoid phrases like,
+"Support for this feature is planned."
+
+We cannot guarantee future feature work, and promises
+like these can raise legal issues. Instead, say that an issue exists.
+For example:
+
+- Support for improvements is tracked `[in this issue](LINK)`.
+- You cannot do this thing, but `[an issue exists](LINK)` to change this behavior.
+
+You can say that we plan to remove a feature.
+
### Removing versions after each major release
Whenever a major GitLab release occurs, we remove all version references
@@ -1682,17 +1681,17 @@ badges and tooltips (`<span class="badge-trigger free">`).
#### Available product tier badges
-| Tier in which feature is available | Tier badge |
-|:--------------------------------------------------------------------------|:----------------------|
-| GitLab Free self-managed and SaaS, and higher tiers | `**(FREE)**` |
-| GitLab Premium self-managed and SaaS, and their higher tiers | `**(PREMIUM)**` |
-| GitLab Ultimate self-managed and SaaS | `**(ULTIMATE)**` |
-| _Only_ GitLab Free self-managed and higher tiers (no SaaS-based tiers) | `**(FREE SELF)**` |
-| _Only_ GitLab Premium self-managed and higher tiers (no SaaS-based tiers) | `**(PREMIUM SELF)**` |
-| _Only_ GitLab Ultimate self-managed (no SaaS-based tiers) | `**(ULTIMATE SELF)**` |
-| _Only_ GitLab Free SaaS and higher tiers (no self-managed instances) | `**(FREE SAAS)**` |
-| _Only_ GitLab Premium SaaS and higher tiers (no self-managed instances) | `**(PREMIUM SAAS)**` |
-| _Only_ GitLab Ultimate SaaS (no self-managed instances) | `**(ULTIMATE SAAS)**` |
+| Tier in which feature is available | Tier badge |
+|:------------------------------------------------------------------------|:----------------------|
+| GitLab Free self-managed and SaaS, and higher tiers | `**(FREE)**` |
+| GitLab Premium self-managed and SaaS, and their higher tiers | `**(PREMIUM)**` |
+| GitLab Ultimate self-managed and SaaS | `**(ULTIMATE)**` |
+| Only GitLab Free self-managed and higher tiers (no SaaS-based tiers) | `**(FREE SELF)**` |
+| Only GitLab Premium self-managed and higher tiers (no SaaS-based tiers) | `**(PREMIUM SELF)**` |
+| Only GitLab Ultimate self-managed (no SaaS-based tiers) | `**(ULTIMATE SELF)**` |
+| Only GitLab Free SaaS and higher tiers (no self-managed instances) | `**(FREE SAAS)**` |
+| Only GitLab Premium SaaS and higher tiers (no self-managed instances) | `**(PREMIUM SAAS)**` |
+| Only GitLab Ultimate SaaS (no self-managed instances) | `**(ULTIMATE SAAS)**` |
Topics that mention the `gitlab.rb` file are referring to
self-managed instances of GitLab. To prevent confusion, include the relevant `TIER SELF`
diff --git a/doc/development/documentation/styleguide/word_list.md b/doc/development/documentation/styleguide/word_list.md
index 3fba9078bab..9e921bb30f0 100644
--- a/doc/development/documentation/styleguide/word_list.md
+++ b/doc/development/documentation/styleguide/word_list.md
@@ -17,6 +17,12 @@ For guidance not on this page, we defer to these style guides:
<!-- vale off -->
<!-- markdownlint-disable -->
+## @mention
+
+Try to avoid. Say "mention" instead, and consider linking to the
+[mentions topic](../../../user/project/issues/issue_data_and_actions.md#mentions).
+Don't use `code formatting`.
+
## above
Try to avoid extra words when referring to an example or table in a documentation page, but if required, use **previously** instead.
@@ -35,6 +41,13 @@ Try to avoid, unless you are talking about security-related features. For exampl
This phrasing is more active and is from the user perspective, rather than the person who implemented the feature.
[View details in the Microsoft style guide](https://docs.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/a/allow-allows).
+## Alpha
+
+Uppercase. For example: **The XYZ feature is in Alpha.** or **This Alpha release is ready to test.**
+
+You might also want to link to [this section](https://about.gitlab.com/handbook/product/gitlab-the-product/#alpha-beta-ga)
+in the handbook when writing about Alpha features.
+
## and/or
Instead of **and/or**, use or or rewrite the sentence to spell out both options.
@@ -43,10 +56,29 @@ Instead of **and/or**, use or or rewrite the sentence to spell out both options.
Try to avoid extra words when referring to an example or table in a documentation page, but if required, use **following** instead.
+## Beta
+
+Uppercase. For example: **The XYZ feature is in Beta.** or **This Beta release is ready to test.**
+
+You might also want to link to [this section](https://about.gitlab.com/handbook/product/gitlab-the-product/#alpha-beta-ga)
+in the handbook when writing about Beta features.
+
## blacklist
Do not use. Another option is **denylist**. ([Vale](../testing.md#vale) rule: [`InclusionCultural.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/InclusionCultural.yml))
+## board
+
+Use lowercase for **boards**, **issue boards**, and **epic boards**.
+
+## checkbox
+
+One word, **checkbox**. Do not use **check box**.
+
+## CI/CD
+
+Always uppercase. No need to spell out on first use.
+
## currently
Do not use when talking about the product or its features. The documentation describes the product as it is today. ([Vale](../testing.md#vale) rule: [`CurrentStatus.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/CurrentStatus.yml))
@@ -56,6 +88,7 @@ Do not use when talking about the product or its features. The documentation des
When writing about the Developer role:
- Use a capital **D**.
+- Do not use bold.
- Do not use the phrase, **if you are a developer** to mean someone who is assigned the Developer
role. Instead, write it out. For example, **if you are assigned the Developer role**.
- To describe a situation where the Developer role is the minimum required:
@@ -69,6 +102,13 @@ Do not use **Developer permissions**. A user who is assigned the Developer role
See [the Microsoft style guide](https://docs.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/d/disable-disabled) for guidance.
Use **inactive** or **off** instead. ([Vale](../testing.md#vale) rule: [`InclusionAbleism.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/InclusionAbleism.yml))
+## earlier
+
+Use when talking about version numbers.
+
+- Avoid: In GitLab 14.1 and lower.
+- Use instead: In GitLab 14.1 and earlier.
+
## easily
Do not use. If the user doesn't find the process to be easy, we lose their trust.
@@ -86,24 +126,51 @@ Do not use **e-mail** with a hyphen. When plural, use **emails** or **email mess
See [the Microsoft style guide](https://docs.microsoft.com/en-us/style-guide/a-z-word-list-term-collections/e/enable-enables) for guidance.
Use **active** or **on** instead. ([Vale](../testing.md#vale) rule: [`InclusionAbleism.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/InclusionAbleism.yml))
+## epic
+
+Lowercase.
+
+## epic board
+
+Lowercase.
+
+## etc.
+
+Try to avoid. Be as specific as you can. Do not use **and so on** as a replacement.
+
+- Avoid: You can update objects, like merge requests, issues, etc.
+- Use instead: You can update objects, like merge requests and issues.
+
+## foo
+
+Do not use in product documentation. You can use it in our API and contributor documentation, but try to use a clearer and more meaningful example instead.
+
## future tense
When possible, use present tense instead. For example, use `after you execute this command, GitLab displays the result` instead of `after you execute this command, GitLab will display the result`. ([Vale](../testing.md#vale) rule: [`FutureTense.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/FutureTense.yml))
+## Geo
+
+Title case.
+
## GitLab
-Do not make possessive (GitLab's). This guidance follows [GitLab Brand Guidelines](https://about.gitlab.com/handbook/marketing/corporate-marketing/brand-activation/brand-guidelines/#trademark).
+Do not make possessive (GitLab's). This guidance follows [GitLab Trademark Guidelines](https://about.gitlab.com/handbook/marketing/corporate-marketing/brand-activation/trademark-guidelines/).
-### GitLab.com
+## GitLab.com
Refers to the GitLab instance managed by GitLab itself.
-### GitLab SaaS
+## GitLab SaaS
Refers to the product license that provides access to GitLab.com. Does not refer to the
GitLab instance managed by GitLab itself.
-### GitLab self-managed
+## GitLab Runner
+
+Title case. This is the product you install. See also [runners](#runner-runners) and [this issue](https://gitlab.com/gitlab-org/gitlab/-/issues/233529).
+
+## GitLab self-managed
Refers to the product license for GitLab instances managed by customers themselves.
@@ -112,6 +179,7 @@ Refers to the product license for GitLab instances managed by customers themselv
When writing about the Guest role:
- Use a capital **G**.
+- Do not use bold.
- Do not use the phrase, **if you are a guest** to mean someone who is assigned the Guest
role. Instead, write it out. For example, **if you are assigned the Guest role**.
- To describe a situation where the Guest role is the minimum required:
@@ -128,6 +196,13 @@ Do not use. If the user doesn't find the feature or process to be handy, we lose
Do not use. Instead, direct readers to the GitLab [reference architectures](../../../administration/reference_architectures/index.md) for information about configuring GitLab for handling greater amounts of users.
+## higher
+
+Do not use when talking about version numbers.
+
+- Avoid: In GitLab 14.1 and higher.
+- Use instead: In GitLab 14.1 and later.
+
## I
Do not use first-person singular. Use **you**, **we**, or **us** instead. ([Vale](../testing.md#vale) rule: [`FirstPerson.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/FirstPerson.yml))
@@ -136,11 +211,52 @@ Do not use first-person singular. Use **you**, **we**, or **us** instead. ([Vale
Do not use Latin abbreviations. Use **that is** instead. ([Vale](../testing.md#vale) rule: [`LatinTerms.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/LatinTerms.yml))
+## in order to
+
+Do not use. Use **to** instead. ([Vale](../testing.md#vale) rule: [`Wordy.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/Wordy.yml))
+
+## issue
+
+Lowercase.
+
+## issue board
+
+Lowercase.
+
+## issue weights
+
+Lowercase.
+
+## job
+
+Do not use **build** to be synonymous with **job**. A job is defined in the `.gitlab-ci.yml` file and runs as part of a pipeline.
+
+If you want to use **CI** with the word **job**, use **CI/CD job** rather than **CI job**.
+
+## later
+
+Use when talking about version numbers.
+
+- Avoid: In GitLab 14.1 and higher.
+- Use instead: In GitLab 14.1 and later.
+
+## log in, log on
+
+Do not use. Use [sign in](#sign-in) instead. If the user interface has **Log in**, you can use it.
+
+## lower
+
+Do not use when talking about version numbers.
+
+- Avoid: In GitLab 14.1 and lower.
+- Use instead: In GitLab 14.1 and earlier.
+
## Maintainer
When writing about the Maintainer role:
- Use a capital **M**.
+- Do not use bold.
- Do not use the phrase, **if you are a maintainer** to mean someone who is assigned the Maintainer
role. Instead, write it out. For example, **if you are assigned the Maintainer role**.
- To describe a situation where the Maintainer role is the minimum required:
@@ -173,11 +289,38 @@ Do not use first-person singular. Use **you**, **we**, or **us** instead. ([Vale
Lowercase. If you use **MR** as the acronym, spell it out on first use.
+## milestones
+
+Lowercase.
+
+## need to, should
+
+Try to avoid. If something is required, use **must**.
+
+- Avoid: You need to set the variable.
+- Use instead: You must set the variable. Or: Set the variable.
+
+**Should** is acceptable for recommended actions or items, or in cases where an event may not
+happen. For example:
+
+- Although you can configure the installation manually, you should use the express configuration to
+ avoid complications.
+- You should see a success message in the console. Contact support if an error message appears
+ instead.
+
+## note that
+
+Do not use.
+
+- Avoid: Note that you can change the settings.
+- Use instead: You can change the settings.
+
## Owner
When writing about the Owner role:
- Use a capital **O**.
+- Do not use bold.
- Do not use the phrase, **if you are an owner** to mean someone who is assigned the Owner
role. Instead, write it out. For example, **if you are assigned the Owner role**.
@@ -200,6 +343,7 @@ Do not use. Doing so may negatively affect other users and contributors, which i
When writing about the Reporter role:
- Use a capital **R**.
+- Do not use bold.
- Do not use the phrase, **if you are a reporter** to mean someone who is assigned the Reporter
role. Instead, write it out. For example, **if you are assigned the Reporter role**.
- To describe a situation where the Reporter role is the minimum required:
@@ -208,10 +352,18 @@ When writing about the Reporter role:
Do not use **Reporter permissions**. A user who is assigned the Reporter role has a set of associated permissions.
+## Repository Mirroring
+
+Title case.
+
## roles
Do not use roles and permissions interchangeably. Each user is assigned a role. Each role includes a set of permissions.
+## runner, runners
+
+Lowercase. These are the agents that run CI/CD jobs. See also [GitLab Runner](#gitlab-runner) and [this issue](https://gitlab.com/gitlab-org/gitlab/-/issues/233529).
+
## sanity check
Do not use. Use **check for completeness** instead. ([Vale](../testing.md#vale) rule: [`InclusionAbleism.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/InclusionAbleism.yml))
@@ -227,6 +379,12 @@ Use **setup** as a noun, and **set up** as a verb. For example:
- Your remote office setup is amazing.
- To set up your remote office correctly, consider the ergonomics of your work area.
+## sign in
+
+Use instead of **sign on** or **log on** or **log in**. If the user interface has different words, use those.
+
+You can use **single sign-on**.
+
## simply, simple
Do not use. If the user doesn't find the process to be simple, we lose their trust.
@@ -245,17 +403,57 @@ Use instead of **sub-group**.
## that
-Do not use. For example:
+Do not use when describing a noun. For example:
-- Avoid: The file that you save...
+- Avoid: The file **that** you save...
- Use instead: The file you save...
+See also [this, these, that, those](#this-these-that-those).
+
+## terminal
+
+Lowercase. For example:
+
+- Open a terminal.
+- From a terminal, run the `docker login` command.
+
+## there is, there are
+
+Try to avoid. These phrases hide the subject.
+
+- Avoid: There are holes in the bucket.
+- Use instead: The bucket has holes.
+
## they
Avoid the use of gender-specific pronouns, unless referring to a specific person.
Use a singular [they](https://developers.google.com/style/pronouns#gender-neutral-pronouns) as
a gender-neutral pronoun.
+## this, these, that, those
+
+Always follow these words with a noun. For example:
+
+- Avoid: **This** improves performance.
+- Use instead: **This setting** improves performance.
+
+- Avoid: **These** are the best.
+- Use instead: **These pants** are the best.
+
+- Avoid: **That** is the one you are looking for.
+- Use instead: **That Jedi** is the one you are looking for.
+
+- Avoid: **Those** need to be configured.
+- Use instead: **Those settings** need to be configured. (Or even better, **Configure those settings.**)
+
+## to-do item
+
+Use lowercase. ([Vale](../testing.md#vale) rule: [`ToDo.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/ToDo.yml))
+
+## To-Do List
+
+Use title case. ([Vale](../testing.md#vale) rule: [`ToDo.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/ToDo.yml))
+
## useful
Do not use. If the user doesn't find the process to be useful, we lose their trust.
@@ -264,6 +462,10 @@ Do not use. If the user doesn't find the process to be useful, we lose their tru
Do not use. Use **use** instead. It's more succinct and easier for non-native English speakers to understand.
+## Value Stream Analytics
+
+Title case.
+
## via
Do not use Latin abbreviations. Use **with**, **through**, or **by using** instead. ([Vale](../testing.md#vale) rule: [`LatinTerms.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/LatinTerms.yml))
diff --git a/doc/development/documentation/testing.md b/doc/development/documentation/testing.md
index ddd44801ae9..2ade6c1e71d 100644
--- a/doc/development/documentation/testing.md
+++ b/doc/development/documentation/testing.md
@@ -224,6 +224,27 @@ guidelines:
| UI text from GitLab | Verify it correctly matches the UI, then: If it does not match the UI, update it. If it matches the UI, but the UI seems incorrect, create an issue to see if the UI needs to be fixed. If it matches the UI and seems correct, add it to the [vale spelling exceptions list](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/spelling-exceptions.txt). |
| UI text from a third-party product | Rewrite the sentence to avoid it, or [add the vale exception code in-line](#disable-vale-tests). |
+#### Vale readability score
+
+In [`ReadingLevel.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/.vale/gitlab/ReadingLevel.yml),
+we have implemented
+[the Flesch-Kincaid grade level test](https://readable.com/blog/the-flesch-reading-ease-and-flesch-kincaid-grade-level/)
+to determine the readability of our documentation.
+
+As a general guideline, the lower the score, the more readable the documentation.
+For example, a page that scores `12` before a set of changes, and `9` after, indicates an iterative improvement to readability. The score is not an exact science, but is meant to help indicate the
+general complexity level of the page.
+
+The readability score is calculated by using the following formula:
+
+```plaintext
+(.39 x ASL) + (11.8 x ASW) – 15.59
+```
+
+- `ASL` is average sentence length (the number of words divided by the number of sentences).
+- `ASW` is the average number of syllables per word (the number of syllables divided by the number of words).
+- The score excludes headings, code blocks, and lists.
+
### Install linters
At a minimum, install [markdownlint](#markdownlint) and [Vale](#vale) to match the checks run in
@@ -285,11 +306,14 @@ To configure Vale in your editor, install one of the following as appropriate:
In the extension's settings:
+ <!-- vale gitlab.Spelling = NO -->
+
- Select the **Use CLI** checkbox.
- - In the <!-- vale gitlab.Spelling = NO --> **Config** setting, enter an absolute
+ - In the **Config** setting, enter an absolute
path to [`.vale.ini`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/.vale.ini)
in one of the cloned GitLab repositories on your computer.
- <!-- vale gitlab.Spelling = YES -->
+
+ <!-- vale gitlab.Spelling = YES -->
- In the **Path** setting, enter the absolute path to the Vale binary. In most
cases, `vale` should work. To find the location, run `which vale` in a terminal.
diff --git a/doc/development/ee_features.md b/doc/development/ee_features.md
index fb00fe748d0..42fb9fd42fc 100644
--- a/doc/development/ee_features.md
+++ b/doc/development/ee_features.md
@@ -174,10 +174,10 @@ There are a few gotchas with it:
implementation, you should refactor the CE method and split it in
smaller methods. Or create a "hook" method that is empty in CE,
and with the EE-specific implementation in EE.
-- when the original implementation contains a guard clause (e.g.
+- when the original implementation contains a guard clause (for example,
`return unless condition`), we cannot easily extend the behavior by
overriding the method, because we can't know when the overridden method
- (i.e. calling `super` in the overriding method) would want to stop early.
+ (that is, calling `super` in the overriding method) would want to stop early.
In this case, we shouldn't just override it, but update the original method
to make it call the other method we want to extend, like a [template method
pattern](https://en.wikipedia.org/wiki/Template_method_pattern).
@@ -480,7 +480,7 @@ module EE
prepended do
argument :name,
- GraphQL::STRING_TYPE,
+ GraphQL::Types::String,
required: false,
description: 'Tanuki name'
end
@@ -522,10 +522,10 @@ Resolving an EE template path that is relative to the CE view path doesn't work.
For `render` and `render_if_exists`, they search for the EE partial first,
and then CE partial. They would only render a particular partial, not all
partials with the same name. We could take the advantage of this, so that
-the same partial path (e.g. `shared/issuable/form/default_templates`) could
-be referring to the CE partial in CE (i.e.
+the same partial path (for example, `shared/issuable/form/default_templates`) could
+be referring to the CE partial in CE (that is,
`app/views/shared/issuable/form/_default_templates.html.haml`), while EE
-partial in EE (i.e.
+partial in EE (that is,
`ee/app/views/shared/issuable/form/_default_templates.html.haml`). This way,
we could show different things between CE and EE.
@@ -549,8 +549,8 @@ In the above example, we can't use
`render 'shared/issuable/form/default_templates'` because it would find the
same EE partial, causing infinite recursion. Instead, we could use `render_ce`
so it ignores any partials in `ee/` and then it would render the CE partial
-(i.e. `app/views/shared/issuable/form/_default_templates.html.haml`)
-for the same path (i.e. `shared/issuable/form/default_templates`). This way
+(that is, `app/views/shared/issuable/form/_default_templates.html.haml`)
+for the same path (that is, `shared/issuable/form/default_templates`). This way
we could easily wrap around the CE partial.
### Code in `lib/`
@@ -673,17 +673,19 @@ class definition to make it easy and clear:
```ruby
module API
- class JobArtifacts < Grape::API::Instance
- # EE::API::JobArtifacts would override the following helpers
- helpers do
- def authorize_download_artifacts!
- authorize_read_builds!
+ module Ci
+ class JobArtifacts < Grape::API::Instance
+ # EE::API::Ci::JobArtifacts would override the following helpers
+ helpers do
+ def authorize_download_artifacts!
+ authorize_read_builds!
+ end
end
end
end
end
-API::JobArtifacts.prepend_mod_with('API::JobArtifacts')
+API::Ci::JobArtifacts.prepend_mod_with('API::Ci::JobArtifacts')
```
And then we can follow regular object-oriented practices to override it:
@@ -691,14 +693,16 @@ And then we can follow regular object-oriented practices to override it:
```ruby
module EE
module API
- module JobArtifacts
- extend ActiveSupport::Concern
+ module Ci
+ module JobArtifacts
+ extend ActiveSupport::Concern
- prepended do
- helpers do
- def authorize_download_artifacts!
- super
- check_cross_project_pipelines_feature!
+ prepended do
+ helpers do
+ def authorize_download_artifacts!
+ super
+ check_cross_project_pipelines_feature!
+ end
end
end
end
@@ -1103,7 +1107,7 @@ If a component you're adding styles for is limited to EE, it is better to have a
separate SCSS file in an appropriate directory within `app/assets/stylesheets`.
In some cases, this is not entirely possible or creating dedicated SCSS file is an overkill,
-e.g. a text style of some component is different for EE. In such cases,
+for example, a text style of some component is different for EE. In such cases,
styles are usually kept in a stylesheet that is common for both CE and EE, and it is wise
to isolate such ruleset from rest of CE rules (along with adding comment describing the same)
to avoid conflicts during CE to EE merge.
diff --git a/doc/development/elasticsearch.md b/doc/development/elasticsearch.md
index d5f6e95033f..4b87f1c28f1 100644
--- a/doc/development/elasticsearch.md
+++ b/doc/development/elasticsearch.md
@@ -135,20 +135,20 @@ This is not applicable yet as multiple indices functionality is not fully implem
Currently GitLab can only handle a single version of setting. Any setting/schema changes would require reindexing everything from scratch. Since reindexing can take a long time, this can cause search functionality downtime.
To avoid downtime, GitLab is working to support multiple indices that
-can function at the same time. Whenever the schema changes, the admin
+can function at the same time. Whenever the schema changes, the administrator
will be able to create a new index and reindex to it, while searches
continue to go to the older, stable index. Any data updates will be
-forwarded to both indices. Once the new index is ready, an admin can
+forwarded to both indices. Once the new index is ready, an administrator can
mark it active, which will direct all searches to it, and remove the old
index.
-This is also helpful for migrating to new servers, e.g. moving to/from AWS.
+This is also helpful for migrating to new servers, for example, moving to/from AWS.
Currently we are on the process of migrating to this new design. Everything is hardwired to work with one single version for now.
### Architecture
-The traditional setup, provided by `elasticsearch-rails`, is to communicate through its internal proxy classes. Developers would write model-specific logic in a module for the model to include in (e.g. `SnippetsSearch`). The `__elasticsearch__` methods would return a proxy object, e.g.:
+The traditional setup, provided by `elasticsearch-rails`, is to communicate through its internal proxy classes. Developers would write model-specific logic in a module for the model to include in (for example, `SnippetsSearch`). The `__elasticsearch__` methods would return a proxy object, for example:
- `Issue.__elasticsearch__` returns an instance of `Elasticsearch::Model::Proxy::ClassMethodsProxy`
- `Issue.first.__elasticsearch__` returns an instance of `Elasticsearch::Model::Proxy::InstanceMethodsProxy`.
@@ -171,7 +171,7 @@ The global configurations per version are now in the `Elastic::(Version)::Config
NOTE:
This is not applicable yet as multiple indices functionality is not fully implemented.
-Folders like `ee/lib/elastic/v12p1` contain snapshots of search logic from different versions. To keep a continuous Git history, the latest version lives under `ee/lib/elastic/latest`, but its classes are aliased under an actual version (e.g. `ee/lib/elastic/v12p3`). When referencing these classes, never use the `Latest` namespace directly, but use the actual version (e.g. `V12p3`).
+Folders like `ee/lib/elastic/v12p1` contain snapshots of search logic from different versions. To keep a continuous Git history, the latest version lives under `ee/lib/elastic/latest`, but its classes are aliased under an actual version (for example, `ee/lib/elastic/v12p3`). When referencing these classes, never use the `Latest` namespace directly, but use the actual version (for example, `V12p3`).
The version name basically follows the GitLab release version. If setting is changed in 12.3, we will create a new namespace called `V12p3` (p stands for "point"). Raise an issue if there is a need to name a version differently.
@@ -254,7 +254,7 @@ class BatchedMigrationName < Elastic::Migration
throttle_delay 10.minutes
pause_indexing!
space_requirements!
-
+
# ...
end
```
diff --git a/doc/development/emails.md b/doc/development/emails.md
index c1054077f9e..f99b914e2de 100644
--- a/doc/development/emails.md
+++ b/doc/development/emails.md
@@ -26,7 +26,7 @@ mailer.unknown_sign_in_email(user, ip, time).deliver_later
To view rendered emails "sent" in your development instance, visit
[`/rails/letter_opener`](http://localhost:3000/rails/letter_opener).
-Please note that [S/MIME signed](../administration/smime_signing_email.md) emails
+[S/MIME signed](../administration/smime_signing_email.md) emails
[cannot be currently previewed](https://github.com/fgrehm/letter_opener_web/issues/96) with
`letter_opener`.
@@ -125,7 +125,7 @@ Examples of valid email keys:
- `1234567890abcdef1234567890abcdef-unsubscribe` (unsubscribe from a conversation)
- `1234567890abcdef1234567890abcdef` (reply to a conversation)
-Please note that the action `-issue-` is used in GitLab as the handler for the Service Desk feature.
+The action `-issue-` is used in GitLab as the handler for the Service Desk feature.
### Legacy format
@@ -137,7 +137,7 @@ These are the only valid legacy formats for an email handler:
- `namespace`
- `namespace+action`
-Please note that `path/to/project` is used in GitLab as the handler for the Service Desk feature.
+In GitLab, the handler for the Service Desk feature is `path/to/project`.
---
diff --git a/doc/development/experiment_guide/gitlab_experiment.md b/doc/development/experiment_guide/gitlab_experiment.md
index 33222b0492c..1cd3fefb7cf 100644
--- a/doc/development/experiment_guide/gitlab_experiment.md
+++ b/doc/development/experiment_guide/gitlab_experiment.md
@@ -492,12 +492,12 @@ expect(subject).to track(:my_event)
subject.track(:my_event)
```
-You can use the `on_any_instance` chain method to specify that it could happen on
-any instance of the experiment. This helps you if you're calling
+You can use the `on_next_instance` chain method to specify that it will happen
+on the next instance of the experiment. This helps you if you're calling
`experiment(:example).track` downstream:
```ruby
-expect(experiment(:example)).to track(:my_event).on_any_instance
+expect(experiment(:example)).to track(:my_event).on_next_instance
experiment(:example).track(:my_event)
```
@@ -506,7 +506,7 @@ A full example of the methods you can chain onto the `track` matcher:
```ruby
expect(experiment(:example)).to track(:my_event, value: 1, property: '_property_')
- .on_any_instance
+ .on_next_instance
.with_context(foo: :bar)
.for(:variant_name)
diff --git a/doc/development/experiment_guide/index.md b/doc/development/experiment_guide/index.md
index 798c6ff84d0..e4a97091a81 100644
--- a/doc/development/experiment_guide/index.md
+++ b/doc/development/experiment_guide/index.md
@@ -63,6 +63,7 @@ Therefore, you should postpone this effort until the [experiment cleanup process
We recommend the following workflow:
+1. Review the Pajamas guidelines for [icons](https://design.gitlab.com/product-foundations/iconography) and [illustrations](https://design.gitlab.com/product-foundations/illustration).
1. Add an icon or illustration as an `.svg` file in the `/app/assets/images` (or EE) path in the GitLab repository.
1. Use `image_tag` or `image_path` to render it via the asset pipeline.
1. **If the experiment is a success**, designers add the new icon or illustration to the Pajamas UI kit as part of the cleanup process.
diff --git a/doc/development/export_csv.md b/doc/development/export_csv.md
index c301b6b9d66..e2bbd0491d6 100644
--- a/doc/development/export_csv.md
+++ b/doc/development/export_csv.md
@@ -11,7 +11,7 @@ This document lists the different implementations of CSV export in GitLab codeba
| Export type | How it works | Advantages | Disadvantages | Existing examples |
|---|---|---|---|---|
| Streaming | - Query and yield data in batches to a response stream.<br>- Download starts immediately. | - Report available immediately. | - No progress indicator.<br>- Requires a reliable connection. | [Export Audit Event Log](../administration/audit_events.md#export-to-csv) |
-| Downloading | - Query and write data in batches to a temporary file.<br>- Loads the file into memory.<br>- Sends the file to the client. | - Report available immediately. | - Large amount of data might cause request timeout.<br>- Memory intensive.<br>- Request expires when user navigates to a different page. | [Export Chain of Custody Report](../user/compliance/compliance_dashboard/#chain-of-custody-report) |
+| Downloading | - Query and write data in batches to a temporary file.<br>- Loads the file into memory.<br>- Sends the file to the client. | - Report available immediately. | - Large amount of data might cause request timeout.<br>- Memory intensive.<br>- Request expires when user navigates to a different page. | [Export Chain of Custody Report](../user/compliance/compliance_report/#chain-of-custody-report) |
| As email attachment | - Asynchronously process the query with background job.<br>- Email uses the export as an attachment. | - Asynchronous processing. | - Requires users use a different app (email) to download the CSV.<br>- Email providers may limit attachment size. | - [Export Issues](../user/project/issues/csv_export.md)<br>- [Export Merge Requests](../user/project/merge_requests/csv_export.md) |
| As downloadable link in email (*) | - Asynchronously process the query with background job.<br>- Email uses an export link. | - Asynchronous processing.<br>- Bypasses email provider attachment size limit. | - Requires users use a different app (email).<br>- Requires additional storage and cleanup. | [Export User Permissions](https://gitlab.com/gitlab-org/gitlab/-/issues/1772) |
| Polling (non-persistent state) | - Asynchronously processes the query with the background job.<br>- Frontend(FE) polls every few seconds to check if CSV file is ready. | - Asynchronous processing.<br>- Automatically downloads to local machine on completion.<br>- In-app solution. | - Non-persistable request - request expires when user navigates to a different page.<br>- API is processed for each polling request. | [Export Vulnerabilities](../user/application_security/vulnerability_report/#export-vulnerability-details) |
diff --git a/doc/development/fe_guide/dependencies.md b/doc/development/fe_guide/dependencies.md
index e8e251baafc..c4f30fd36c9 100644
--- a/doc/development/fe_guide/dependencies.md
+++ b/doc/development/fe_guide/dependencies.md
@@ -24,52 +24,7 @@ production assets post-compile.
## Updating dependencies
-We use the [Renovate GitLab Bot](https://gitlab.com/gitlab-org/frontend/renovate-gitlab-bot) to
-automatically create merge requests for updating dependencies of several projects.
-You can find the up-to-date list of projects managed by the renovate bot in the project's README.
-
-Some key dependencies updated using renovate are:
-
-- [`@gitlab/ui`](https://gitlab.com/gitlab-org/gitlab-ui)
-- [`@gitlab/svgs`](https://gitlab.com/gitlab-org/gitlab-svgs)
-- [`@gitlab/eslint-plugin`](https://gitlab.com/gitlab-org/frontend/eslint-plugin)
-- And any other package in the `@gitlab/` scope
-
-We have the goal of updating [_all_ dependencies with renovate](https://gitlab.com/gitlab-org/frontend/rfcs/-/issues/21).
-
-Updating dependencies automatically has several benefits, have a look at this [example MR](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/53613).
-
-- MRs will be created automatically when new versions are released
-- MRs can easily be rebased and updated with just checking a checkbox in the MR description
-- MRs contain changelog summaries and links to compare the different package versions
-- MRs can be assigned to people directly responsible for the dependencies
-
-### Community contributions updating dependencies
-
-It is okay to reject Community Contributions that solely bump dependencies.
-Simple dependency updates are better done automatically for the reasons provided above.
-If a community contribution needs to be rebased, runs into conflicts, or goes stale, the effort required
-to instruct the contributor to correct it often outweighs the benefits.
-
-If a dependency update is accompanied with significant migration efforts, due to major version updates,
-a community contribution is acceptable.
-
-Here is a message you can use to explain to community contributors as to why we reject simple updates:
-
-```markdown
-Hello CONTRIBUTOR!
-
-Thank you very much for this contribution. It seems like you are doing a "simple" dependency update.
-
-If a dependency update is as simple as increasing the version number, we'd like a Bot to do this to save you and ourselves some time.
-
-This has certain benefits as outlined in our <a href="https://docs.gitlab.com/ee/development/fe_guide/dependencies.html#updating-dependencies">Frontend development guidelines</a>.
-
-You might find that we do not currently update DEPENDENCY automatically, but we are planning to do so in [the near future](https://gitlab.com/gitlab-org/frontend/rfcs/-/issues/21).
-
-Thank you for understanding, I will close this Merge Request.
-/close
-```
+See the main [Dependencies](../dependencies.md) page for general information about dependency updates.
### Blocked dependencies
diff --git a/doc/development/fe_guide/design_anti_patterns.md b/doc/development/fe_guide/design_anti_patterns.md
index 0788921fce4..9e602b1ea04 100644
--- a/doc/development/fe_guide/design_anti_patterns.md
+++ b/doc/development/fe_guide/design_anti_patterns.md
@@ -12,7 +12,8 @@ generally be avoided.
Throughout the GitLab codebase, there may be historic uses of these anti-patterns. Please [use discretion](https://about.gitlab.com/handbook/engineering/#balance-refactoring-and-velocity)
when figuring out whether or not to refactor, when touching code that uses one of these legacy patterns.
-**Please note:** For new features, anti-patterns are not necessarily prohibited, but it is **strongly suggested** to find another approach.
+NOTE:
+For new features, anti-patterns are not necessarily prohibited, but it is **strongly suggested** to find another approach.
## Shared Global Object (Anti-pattern)
@@ -59,7 +60,7 @@ Shared Global Object's solve the problem of making something globally accessible
could be appropriate:
- When a responsibility is truly global and should be referenced across the application
- (e.g., an application-wide Event Bus).
+ (for example, an application-wide Event Bus).
Even in these scenarios, please consider avoiding the Shared Global Object pattern because the
side-effects can be notoriously difficult to reason with.
@@ -136,8 +137,8 @@ many problems with a module that exports utility functions.
Singletons solve the problem of enforcing there to be only 1 instance of a thing. It's possible
that a Singleton could be appropriate in the following rare cases:
-- We need to manage some resource that **MUST** have just 1 instance (i.e. some hardware restriction).
-- There is a real [cross-cutting concern](https://en.wikipedia.org/wiki/Cross-cutting_concern) (e.g., logging) and a Singleton provides the simplest API.
+- We need to manage some resource that **MUST** have just 1 instance (that is, some hardware restriction).
+- There is a real [cross-cutting concern](https://en.wikipedia.org/wiki/Cross-cutting_concern) (for example, logging) and a Singleton provides the simplest API.
Even in these scenarios, please consider avoiding the Singleton pattern.
@@ -174,7 +175,7 @@ export const fuzzify = (id) => { /* ... */ };
#### Dependency Injection
[Dependency Injection](https://en.wikipedia.org/wiki/Dependency_injection) is an approach which breaks
-coupling by declaring a module's dependencies to be injected from outside the module (e.g., through constructor parameters, a bona-fide Dependency Injection framework, and even Vue's `provide/inject`).
+coupling by declaring a module's dependencies to be injected from outside the module (for example, through constructor parameters, a bona-fide Dependency Injection framework, and even Vue's `provide/inject`).
```javascript
// bad - Vue component coupled to Singleton
diff --git a/doc/development/fe_guide/design_patterns.md b/doc/development/fe_guide/design_patterns.md
index c769d0767e7..03575f7e7f9 100644
--- a/doc/development/fe_guide/design_patterns.md
+++ b/doc/development/fe_guide/design_patterns.md
@@ -9,7 +9,8 @@ info: To determine the technical writer assigned to the Stage/Group associated w
The following design patterns are suggested approaches for solving common problems. Use discretion when evaluating
if a certain pattern makes sense in your situation. Just because it is a pattern, doesn't mean it is a good one for your problem.
-**Please note:** When adding a design pattern to this document, be sure to clearly state the **problem it solves**.
+NOTE:
+When adding a design pattern to this document, be sure to clearly state the **problem it solves**.
## TBD
diff --git a/doc/development/fe_guide/graphql.md b/doc/development/fe_guide/graphql.md
index 7fa9e957f56..3b49601f027 100644
--- a/doc/development/fe_guide/graphql.md
+++ b/doc/development/fe_guide/graphql.md
@@ -110,7 +110,7 @@ Default client accepts two parameters: `resolvers` and `config`.
If you are make multiple queries to the same Apollo client object you might encounter the following error: "Store error: the application attempted to write an object with no provided ID but the store already contains an ID of SomeEntity". [This error only should occur when you have made a query with an ID field for a portion, then made another that returns what would be the same object, but is missing the ID field.](https://github.com/apollographql/apollo-client/issues/2510#issue-271829009)
-Please note this is being tracked in [this issue](https://gitlab.com/gitlab-org/gitlab/-/issues/326101) and the documentation will be updated when this issue is resolved.
+This is being tracked in [this issue](https://gitlab.com/gitlab-org/gitlab/-/issues/326101) and the documentation will be updated when this issue is resolved.
## GraphQL Queries
diff --git a/doc/development/fe_guide/haml.md b/doc/development/fe_guide/haml.md
new file mode 100644
index 00000000000..8f501007755
--- /dev/null
+++ b/doc/development/fe_guide/haml.md
@@ -0,0 +1,74 @@
+---
+stage: none
+group: unassigned
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# HAML
+
+[HAML](https://haml.info/) is the [Ruby on Rails](https://rubyonrails.org/) template language that GitLab uses.
+
+## GitLab UI form builder
+
+[GitLab UI](https://gitlab-org.gitlab.io/gitlab-ui/) is a Vue component library that conforms
+to the [Pajamas design system](https://design.gitlab.com/). Most of these components
+rely on JavaScript and therefore can only be used in Vue.
+
+However, some of the simpler components (checkboxes, radio buttons, form inputs) can be
+used in HAML by applying the correct CSS classes to the elements. A custom
+[Ruby on Rails form builder](https://gitlab.com/gitlab-org/gitlab/-/blob/7c108df101e86d8a27d69df2b5b1ff1fc24133c5/lib/gitlab/form_builders/gitlab_ui_form_builder.rb) exists to help use GitLab UI components in HAML.
+
+### Use the GitLab UI form builder
+
+To use the GitLab UI form builder:
+
+1. Change `form_for` to `gitlab_ui_form_for`.
+1. Change `f.check_box` to `f.gitlab_ui_checkbox_component`.
+1. Remove `f.label` and instead pass the label as the second argument in `f.gitlab_ui_checkbox_component`.
+
+For example:
+
+- Before:
+
+ ```haml
+ = form_for @group do |f|
+ .form-group.gl-mb-3
+ .gl-form-checkbox.custom-control.custom-checkbox
+ = f.check_box :prevent_sharing_groups_outside_hierarchy, disabled: !can_change_prevent_sharing_groups_outside_hierarchy?(@group), class: 'custom-control-input'
+ = f.label :prevent_sharing_groups_outside_hierarchy, class: 'custom-control-label' do
+ %span
+ = s_('GroupSettings|Prevent members from sending invitations to groups outside of %{group} and its subgroups.').html_safe % { group: link_to_group(@group) }
+ %p.help-text= prevent_sharing_groups_outside_hierarchy_help_text(@group)
+ ```
+
+- After:
+
+ ```haml
+ = gitlab_ui_form_for @group do |f|
+ .form-group.gl-mb-3
+ = f.gitlab_ui_checkbox_component :prevent_sharing_groups_outside_hierarchy,
+ s_('GroupSettings|Prevent members from sending invitations to groups outside of %{group} and its subgroups.').html_safe % { group: link_to_group(@group) },
+ help_text: prevent_sharing_groups_outside_hierarchy_help_text(@group),
+ checkbox_options: { disabled: !can_change_prevent_sharing_groups_outside_hierarchy?(@group) }
+ ```
+
+### Available components
+
+When using the GitLab UI form builder, the following components are available for use in HAML.
+
+NOTE:
+Currently only `gitlab_ui_checkbox_component` is available but more components are planned.
+
+#### gitlab_ui_checkbox_component
+
+[GitLab UI Docs](https://gitlab-org.gitlab.io/gitlab-ui/?path=/story/base-form-form-checkbox--default)
+
+| Argument | Description | Type | Required (default value) |
+|---|---|---|---|
+| `method` | Attribute on the object passed to `gitlab_ui_form_for`. | `Symbol` | `true` |
+| `label` | Checkbox label. | `String` | `true` |
+| `help_text` | Help text displayed below the checkbox. | `String` | `false` (`nil`) |
+| `checkbox_options` | Options that are passed to [Rails `check_box` method](https://api.rubyonrails.org/classes/ActionView/Helpers/FormBuilder.html#method-i-check_box). | `Hash` | `false` (`{}`) |
+| `checked_value` | Value when checkbox is checked. | `String` | `false` (`'1'`) |
+| `unchecked_value` | Value when checkbox is unchecked. | `String` | `false` (`'0'`) |
+| `label_options` | Options that are passed to [Rails `label` method](https://api.rubyonrails.org/classes/ActionView/Helpers/FormBuilder.html#method-i-label). | `Hash` | `false` (`{}`) |
diff --git a/doc/development/fe_guide/index.md b/doc/development/fe_guide/index.md
index 325310ad05c..549fa3261b1 100644
--- a/doc/development/fe_guide/index.md
+++ b/doc/development/fe_guide/index.md
@@ -12,9 +12,13 @@ across the GitLab frontend team.
## Overview
GitLab is built on top of [Ruby on Rails](https://rubyonrails.org). It uses [Haml](https://haml.info/) and a JavaScript-based frontend with [Vue.js](https://vuejs.org).
+
<!-- vale gitlab.Spelling = NO -->
+
Be wary of [the limitations that come with using Hamlit](https://github.com/k0kubun/hamlit/blob/master/REFERENCE.md#limitations).
+
<!-- vale gitlab.Spelling = YES -->
+
We also use [SCSS](https://sass-lang.com) and plain JavaScript with
modern ECMAScript standards supported through [Babel](https://babeljs.io/) and ES module support through [webpack](https://webpack.js.org/).
@@ -81,6 +85,10 @@ Vue specific [design patterns and practices](vue.md).
How to use [GraphQL](graphql.md).
+## HAML
+
+How to use [HAML](haml.md).
+
## Icons and Illustrations
How we use SVG for our [Icons and Illustrations](icons.md).
diff --git a/doc/development/fe_guide/performance.md b/doc/development/fe_guide/performance.md
index e7f347554d7..94beecf6168 100644
--- a/doc/development/fe_guide/performance.md
+++ b/doc/development/fe_guide/performance.md
@@ -212,6 +212,8 @@ When writing code for real-time features we have to keep a couple of things in m
Thus, we must strike a balance between sending requests and the feeling of real-time.
Use the following rules when creating real-time solutions.
+<!-- vale gitlab.Spelling = NO -->
+
1. The server tells you how much to poll by sending `Poll-Interval` in the header.
Use that as your polling interval. This enables system administrators to change the
[polling rate](../../administration/polling.md).
@@ -219,11 +221,13 @@ Use the following rules when creating real-time solutions.
1. A response with HTTP status different from 2XX should disable polling as well.
1. Use a common library for polling.
1. Poll on active tabs only. Please use [Visibility](https://github.com/ai/visibilityjs).
-1. Use regular polling intervals, do not use <!-- vale gitlab.Spelling = NO --> backoff polling <!-- vale gitlab.Spelling = YES --> or jitter, as the interval is
+1. Use regular polling intervals, do not use backoff polling or jitter, as the interval is
controlled by the server.
1. The backend code is likely to be using ETags. You do not and should not check for status
`304 Not Modified`. The browser transforms it for you.
+<!-- vale gitlab.Spelling = YES -->
+
### Lazy Loading Images
To improve the time to first render we are using lazy loading for images. This works by setting
diff --git a/doc/development/fe_guide/style/scss.md b/doc/development/fe_guide/style/scss.md
index 4a9446f2949..6d9bbdd3f2d 100644
--- a/doc/development/fe_guide/style/scss.md
+++ b/doc/development/fe_guide/style/scss.md
@@ -21,8 +21,11 @@ In order to reduce the generation of more CSS as our site grows, prefer the use
#### Where are utility classes defined?
Prefer the use of [utility classes defined in GitLab UI](https://gitlab.com/gitlab-org/gitlab-ui/-/blob/main/doc/css.md#utilities).
+
<!-- vale gitlab.Spelling = NO -->
+
An easy list of classes can also be [seen on Unpkg](https://unpkg.com/browse/@gitlab/ui/src/scss/utilities.scss).
+
<!-- vale gitlab.Spelling = YES -->
Classes in [`utilities.scss`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/assets/stylesheets/utilities.scss) and [`common.scss`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/assets/stylesheets/framework/common.scss) are being deprecated.
diff --git a/doc/development/fe_guide/troubleshooting.md b/doc/development/fe_guide/troubleshooting.md
index 028184e0397..14943cca3ac 100644
--- a/doc/development/fe_guide/troubleshooting.md
+++ b/doc/development/fe_guide/troubleshooting.md
@@ -38,7 +38,7 @@ See [this video](https://youtu.be/-BkEhghP-kM) for an in-depth overview and inve
+ expect(wrapper.findComponent(ChildComponent).props()).toMatchObject(...);
```
-Please note that `toMatchObject` actually changes the nature of the assertion and won't fail if some items are **missing** from the expectation.
+`toMatchObject` actually changes the nature of the assertion and won't fail if some items are **missing** from the expectation.
### Script issues
diff --git a/doc/development/fe_guide/vue.md b/doc/development/fe_guide/vue.md
index 0a769f257d0..509e2f4b688 100644
--- a/doc/development/fe_guide/vue.md
+++ b/doc/development/fe_guide/vue.md
@@ -66,12 +66,68 @@ To do that, you can use the `data` attributes in the HTML element and query them
You should only do this while initializing the application, because the mounted element is replaced
with a Vue-generated DOM.
-The advantage of providing data from the DOM to the Vue instance through `props` in the `render`
-function instead of querying the DOM inside the main Vue component is avoiding the need to create a
-fixture or an HTML element in the unit test, which makes the tests easier.
+The advantage of providing data from the DOM to the Vue instance through `props` or
+`provide` in the `render` function, instead of querying the DOM inside the main Vue
+component, is that you avoid the need to create a fixture or an HTML element in the unit test.
-See the following example. Also, please refer to our [Vue style guide](style/vue.md#basic-rules) for
-additional information on why we explicitly declare the data being passed into the Vue app;
+##### provide/inject
+
+Vue supports dependency injection through [provide/inject](https://vuejs.org/v2/api/#provide-inject).
+Values passed to the component through `provide` can be accessed in the component the `inject` configuration.
+In the following example of a Vue app initialization, a value from HAML is passed to the component
+through the `provide` configuration:
+
+```javascript
+#js-vue-app{ data: { endpoint: 'foo' }}
+
+// index.js
+const el = document.getElementById('js-vue-app');
+
+if (!el) return false;
+
+const { endpoint } = el.dataset;
+
+return new Vue({
+ el,
+ render(createElement) {
+ return createElement('my-component', {
+ provide: {
+ endpoint
+ },
+ });
+ },
+});
+```
+
+The component, or any of its child components, can access the property through `inject` as:
+
+```vue
+<script>
+ export default {
+ name: 'MyComponent',
+ inject: ['endpoint'],
+ ...
+ ...
+ };
+</script>
+<template>
+ ...
+ ...
+</template>
+```
+
+Using dependency injection to provide values from HAML is ideal when:
+
+- The injected value doesn't need an explicit validation against its data type or contents.
+- The value doesn't need to be reactive.
+- There are multiple components in the hierarchy that need access to this value where
+ prop-drilling becomes an inconvenience. Prop-drilling when the same prop is passed
+ through all components in the hierarchy until the component that is genuinely using it.
+
+##### props
+
+If the value from HAML doesn't fit the criteria of dependency injection, use `props`.
+See the following example.
```javascript
// haml
@@ -99,6 +155,9 @@ return new Vue({
> When adding an `id` attribute to mount a Vue application, please make sure this `id` is unique
across the codebase.
+For more information on why we explicitly declare the data being passed into the Vue app,
+refer to our [Vue style guide](style/vue.md#basic-rules).
+
#### Providing Rails form fields to Vue applications
When composing a form with Rails, the `name`, `id`, and `value` attributes of form inputs are generated
diff --git a/doc/development/feature_flags/controls.md b/doc/development/feature_flags/controls.md
index c69a698149e..35dbc2703f9 100644
--- a/doc/development/feature_flags/controls.md
+++ b/doc/development/feature_flags/controls.md
@@ -96,18 +96,18 @@ Guidelines:
#### Process
-Before toggling any feature flag, check that there are no ongoing
-significant incidents on GitLab.com. You can do this by checking the
-`#production` and `#incident-management` Slack channels, or looking for
-[open incident issues](https://gitlab.com/gitlab-com/gl-infra/production/-/issues/?scope=all&state=opened&label_name[]=incident)
-(although check the dates and times).
-
-We do not want to introduce changes during an incident, as it can make
-diagnosis and resolution of the incident much harder to achieve, and
-also will largely invalidate your rollout process as you will be unable
-to assess whether the rollout was without problems or not.
-
-If there is any doubt, ask in `#production`.
+When enabling a feature flag rollout, the system will automatically block the
+chatops command from succeeding if there are active `"severity::1"` or `~"severity::2"`
+incidents or in-progress change issues, for example:
+
+```shell
+/chatops run feature set gitaly_lfs_pointers_pipeline true
+
+- Production checks fail!
+- active incidents
+
+ 2021-06-29 Canary deployment failing QA tests
+```
The following `/chatops` commands should be performed in the Slack
`#production` channel.
diff --git a/doc/development/geo.md b/doc/development/geo.md
index 38245e5f4e5..7d5aae49749 100644
--- a/doc/development/geo.md
+++ b/doc/development/geo.md
@@ -96,7 +96,7 @@ projects that need updating. Those projects can be:
- Updated recently: Projects that have a `last_repository_updated_at`
timestamp that is more recent than the `last_repository_successful_sync_at`
timestamp in the `Geo::ProjectRegistry` model.
-- Manual: The admin can manually flag a repository to resync in the
+- Manual: The administrator can manually flag a repository to resync in the
[Geo admin panel](../user/admin_area/geo_nodes.md).
When we fail to fetch a repository on the secondary `RETRIES_BEFORE_REDOWNLOAD`
diff --git a/doc/development/gitaly.md b/doc/development/gitaly.md
index 0a17bfedc0f..fa4fa59e35d 100644
--- a/doc/development/gitaly.md
+++ b/doc/development/gitaly.md
@@ -12,12 +12,16 @@ Workhorse and GitLab Shell.
## Deep Dive
-In May 2019, <!-- vale gitlab.Spelling = NO --> Bob Van Landuyt <!-- vale gitlab.Spelling = YES -->
+<!-- vale gitlab.Spelling = NO -->
+
+In May 2019, Bob Van Landuyt
hosted a Deep Dive (GitLab team members only: `https://gitlab.com/gitlab-org/create-stage/issues/1`)
on the [Gitaly project](https://gitlab.com/gitlab-org/gitaly). It included how to contribute to it as a
Ruby developer, and shared domain-specific knowledge with anyone who may work in this part of the
codebase in the future.
+<!-- vale gitlab.Spelling = YES -->
+
You can find the <i class="fa fa-youtube-play youtube" aria-hidden="true"></i> [recording on YouTube](https://www.youtube.com/watch?v=BmlEWFS8ORo), and the slides
on [Google Slides](https://docs.google.com/presentation/d/1VgRbiYih9ODhcPnL8dS0W98EwFYpJ7GXMPpX-1TM6YE/edit)
and in [PDF](https://gitlab.com/gitlab-org/create-stage/uploads/a4fdb1026278bda5c1c5bb574379cf80/Create_Deep_Dive__Gitaly_for_Create_Ruby_Devs.pdf).
diff --git a/doc/development/github_importer.md b/doc/development/github_importer.md
index a733d6881fa..84c10e0c005 100644
--- a/doc/development/github_importer.md
+++ b/doc/development/github_importer.md
@@ -69,7 +69,23 @@ don't need to perform this work in parallel.
This worker imports all pull requests. For every pull request a job for the
`Gitlab::GithubImport::ImportPullRequestWorker` worker is scheduled.
-### 5. Stage::ImportIssuesAndDiffNotesWorker
+### 5. Stage::ImportPullRequestsMergedByWorker
+
+This worker imports the pull requests' _merged-by_ user information. The [_List pull
+requests_](https://docs.github.com/en/rest/reference/pulls#list-pull-requests)
+API doesn't provide this information. Therefore, this stage must fetch each merged pull request
+individually to import this information. A
+`Gitlab::GithubImport::ImportPullRequestMergedByWorker` job is scheduled for each fetched pull
+request.
+
+### 6. Stage::ImportPullRequestsReviewsWorker
+
+This worker imports the pull requests' reviews. For each pull request, this worker:
+
+- Fetches all the pages of reviews.
+- Schedules a `Gitlab::GithubImport::ImportPullRequestReviewWorker` job for each fetched review.
+
+### 7. Stage::ImportIssuesAndDiffNotesWorker
This worker imports all issues and pull request comments. For every issue, we
schedule a job for the `Gitlab::GithubImport::ImportIssueWorker` worker. For
@@ -85,7 +101,7 @@ label links in the same worker removes the need for performing a separate crawl
through the API data, reducing the number of API calls necessary to import a
project.
-### 6. Stage::ImportNotesWorker
+### 8. Stage::ImportNotesWorker
This worker imports regular comments for both issues and pull requests. For
every comment, we schedule a job for the
@@ -96,7 +112,7 @@ returns comments for both issues and pull requests. This means we have to wait
for all issues and pull requests to be imported before we can import regular
comments.
-### 7. Stage::FinishImportWorker
+### 9. Stage::FinishImportWorker
This worker completes the import process by performing some housekeeping
(such as flushing any caches) and by marking the import as completed.
@@ -167,6 +183,9 @@ perform:
tries to find the user based on the GitHub user ID, while the second query
is used to find the user using their GitHub Email address.
+To avoid mismatching users, the search by GitHub user ID is not done when importing from GitHub
+Enterprise.
+
Because this process is quite expensive we cache the result of these lookups in
Redis. For every user looked up we store three keys:
@@ -218,9 +237,11 @@ The code for this resides in:
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/48512/diffs) in GitLab 13.7.
> - Number of imported objects [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/64256) in GitLab 14.1.
+> - `Gitlab::GithubImport::Logger` [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/65968) in GitLab 14.2.
+> - `import_source` [renamed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/67726) to `import_type` in GitLab 14.2.
The import progress can be checked in the `logs/importer.log` file. Each relevant import is logged
-with `"import_source": "github"` and the `"project_id"`.
+with `"import_type": "github"` and the `"project_id"`.
The last log entry reports the number of objects fetched and imported:
diff --git a/doc/development/graphql_guide/authorization.md b/doc/development/graphql_guide/authorization.md
index a317b5d805b..d7edd01cda2 100644
--- a/doc/development/graphql_guide/authorization.md
+++ b/doc/development/graphql_guide/authorization.md
@@ -142,7 +142,7 @@ to view the `secretName` field:
```ruby
module Types
class ProjectType < BaseObject
- field :secret_name, ::GraphQL::STRING_TYPE, null: true, authorize: :owner_access
+ field :secret_name, ::GraphQL::Types::String, null: true, authorize: :owner_access
end
end
```
@@ -179,7 +179,7 @@ as an array instead of as a single value:
```ruby
module Types
class MyType < BaseObject
- field :hidden_field, ::GraphQL::INT_TYPE,
+ field :hidden_field, ::GraphQL::Types::Int,
null: true,
authorize: [:owner_access, :another_ability]
end
diff --git a/doc/development/graphql_guide/batchloader.md b/doc/development/graphql_guide/batchloader.md
index 1869c6e6f80..0e90f89ff7a 100644
--- a/doc/development/graphql_guide/batchloader.md
+++ b/doc/development/graphql_guide/batchloader.md
@@ -29,7 +29,7 @@ For example, to load a `User` by `username`, we can add batching as follows:
```ruby
class UserResolver < BaseResolver
type UserType, null: true
- argument :username, ::GraphQL::STRING_TYPE, required: true
+ argument :username, ::GraphQL::Types::String, required: true
def resolve(**args)
BatchLoader::GraphQL.for(username).batch do |usernames, loader|
diff --git a/doc/development/i18n/externalization.md b/doc/development/i18n/externalization.md
index 796a1f44ccd..53825f0904a 100644
--- a/doc/development/i18n/externalization.md
+++ b/doc/development/i18n/externalization.md
@@ -131,40 +131,70 @@ You can mark that content for translation with:
### JavaScript files
-In JavaScript we added the `__()` (double underscore parenthesis) function that
-you can import from the `~/locale` file. For instance:
+The `~/locale` module exports the following key functions for externalization:
+
+- `__()` (double underscore parenthesis)
+- `s__()` (namespaced double underscore parenthesis)
+- `__()` Mark content for translation (note the double underscore).
+- `s__()` Mark namespaced content for translation
+- `n__()` Mark pluralized content for translation
```javascript
-import { __ } from '~/locale';
+import { __, s__, n__ } from '~/locale';
+
+const defaultErrorMessage = s__('Branches|Create branch failed.');
const label = __('Subscribe');
+const message = n__('Apple', 'Apples', 3)
```
-To test JavaScript translations you must:
-
-- Change the GitLab localization to a language other than English.
-- Generate JSON files by using `bin/rake gettext:po_to_json` or `bin/rake gettext:compile`.
+To test JavaScript translations, learn about [manually testing translations from the UI](#manually-test-translations-from-the-ui).
### Vue files
-In Vue files, we make the following functions available:
+In Vue files, we make the following functions available to Vue templates using the `translate` mixin:
-- `__()` (double underscore parenthesis)
-- `s__()` (namespaced double underscore parenthesis)
+- `__()`
+- `s__()`
+- `n__()`
+- `sprintf`
-You can therefore import from the `~/locale` file.
-For example:
+This means you can externalize strings in Vue templates without having to import these functions from the `~/locale` file:
-```javascript
-import { __, s__ } from '~/locale';
-const label = __('Subscribe');
-const nameSpacedlabel = __('Plan|Subscribe');
+```html
+<template>
+ <h1>{{ s__('Branches|Create a new branch') }}</h1>
+ <gl-button>{{ __('Create branch') }}</gl-button>
+</template>
```
-For the static text strings we suggest two patterns for using these translations in Vue files:
+If you need to translate strings in the Vue component's JavaScript, you can import the necessary externalization function from the `~/locale` file as described in the [JavaScript files](#javascript-files) section.
-- External constants file:
+To test Vue translations, learn about [manually testing translations from the UI](#manually-test-translations-from-the-ui).
- ```javascript
+#### Recommendations
+
+If strings are reused throughout a component, it can be useful to define these strings as variables. We recommend defining an `i18n` property on the component's `$options` object. If there is a mixture of many-use and single-use strings in the component, consider using this approach to create a local [Single Source of Truth](https://about.gitlab.com/handbook/values/#single-source-of-truth) for externalized strings.
+
+```javascript
+<script>
+ export default {
+ i18n: {
+ buttonLabel: s__('Plan|Button Label')
+ }
+ },
+</script>
+
+<template>
+ <gl-button :aria-label="$options.i18n.buttonLabel">
+ {{ $options.i18n.buttonLabel }}
+ </gl-button>
+</template>
+```
+
+Also consider defining these strings in a `constants.js` file, especially if they need
+to be shared across different modules.
+
+```javascript
javascripts
└───alert_settings
@@ -179,60 +209,41 @@ For the static text strings we suggest two patterns for using these translations
/* Integration constants */
- export const I18N_ALERT_SETTINGS_FORM = {
- saveBtnLabel: __('Save changes'),
- };
+ export const MSG_ALERT_SETTINGS_FORM_ERROR = __('Failed to save alert settings.')
// alert_settings_form.vue
import {
- I18N_ALERT_SETTINGS_FORM,
+ MSG_ALERT_SETTINGS_FORM_ERROR,
} from '../constants';
<script>
export default {
- i18n: {
- I18N_ALERT_SETTINGS_FORM,
- }
+ MSG_ALERT_SETTINGS_FROM_ERROR,
}
</script>
<template>
- <gl-button
- ref="submitBtn"
- variant="success"
- type="submit"
- >
- {{ $options.i18n.I18N_ALERT_SETTINGS_FORM }}
- </gl-button>
+ <gl-alert v-if="showAlert">
+ {{ $options.MSG_ALERT_SETTINGS_FORM_ERROR }}
+ </gl-alert>
</template>
- ```
-
- When possible, you should opt for this pattern, as this allows you to import these strings directly into your component specs for re-use during testing.
-
-- Internal component `$options` object:
+```
- ```javascript
- <script>
- export default {
- i18n: {
- buttonLabel: s__('Plan|Button Label')
- }
- },
- </script>
+Using either `constants` or `$options.i18n` allows us to reference messages directly in specs:
- <template>
- <gl-button :aria-label="$options.i18n.buttonLabel">
- {{ $options.i18n.buttonLabel }}
- </gl-button>
- </template>
- ```
+```javascript
+import { MSG_ALERT_SETTINGS_FORM_ERROR } from 'path/to/constants.js';
-To visually test the Vue translations:
+// okay
+expect(wrapper.text()).toEqual('this test will fail just from button text changing!');
-1. Change the GitLab localization to another language than English.
-1. Generate JSON files using `bin/rake gettext:po_to_json` or `bin/rake gettext:compile`.
+// better
+expect(wrapper.text()).toEqual(MyComponent.i18n.buttonLabel);
+// also better
+expect(wrapper.text()).toEqual(MSG_ALERT_SETTINGS_FORM_ERROR);
+```
### Dynamic translations
@@ -853,3 +864,10 @@ Suppose you want to add translations for a new language, for example, French:
git add locale/fr/ app/assets/javascripts/locale/fr/
git commit -m "Add French translations for Value Stream Analytics page"
```
+
+## Manually test translations from the UI
+
+To manually test Vue translations:
+
+1. Change the GitLab localization to another language than English.
+1. Generate JSON files using `bin/rake gettext:po_to_json` or `bin/rake gettext:compile`.
diff --git a/doc/development/i18n/proofreader.md b/doc/development/i18n/proofreader.md
index 6e3b32e18df..462c3fde7d6 100644
--- a/doc/development/i18n/proofreader.md
+++ b/doc/development/i18n/proofreader.md
@@ -12,88 +12,91 @@ are very appreciative of the work done by translators and proofreaders!
## Proofreaders
<!-- vale gitlab.Spelling = NO -->
+
- Albanian
- Proofreaders needed.
- Amharic
- - Tsegaselassie Tadesse - [GitLab](https://gitlab.com/tsega), [CrowdIn](https://crowdin.com/profile/tsegaselassi/activity)
+ - Tsegaselassie Tadesse - [GitLab](https://gitlab.com/tsega), [Crowdin](https://crowdin.com/profile/tsegaselassi)
- Arabic
- Proofreaders needed.
- Bosnian
- Proofreaders needed.
- Bulgarian
- - Lyubomir Vasilev - [CrowdIn](https://crowdin.com/profile/lyubomirv)
+ - Lyubomir Vasilev - [Crowdin](https://crowdin.com/profile/lyubomirv)
- Catalan
- - David Planella - [GitLab](https://gitlab.com/dplanella), [CrowdIn](https://crowdin.com/profile/dplanella)
+ - David Planella - [GitLab](https://gitlab.com/dplanella), [Crowdin](https://crowdin.com/profile/dplanella)
- Chinese Simplified 简体中文
- - Huang Tao - [GitLab](https://gitlab.com/htve), [CrowdIn](https://crowdin.com/profile/htve)
- - Victor Wu - [GitLab](https://gitlab.com/victorwuky), [CrowdIn](https://crowdin.com/profile/victorwu)
- - Xiaogang Wen - [GitLab](https://gitlab.com/xiaogang_gitlab), [CrowdIn](https://crowdin.com/profile/xiaogang_gitlab)
+ - Huang Tao - [GitLab](https://gitlab.com/htve), [Crowdin](https://crowdin.com/profile/htve)
+ - Victor Wu - [GitLab](https://gitlab.com/_victorwu_), [Crowdin](https://crowdin.com/profile/victorwu)
+ - Xiaogang Wen - [GitLab](https://gitlab.com/xiaogang_cn), [Crowdin](https://crowdin.com/profile/xiaogang_gitlab)
+ - Shuang Zhang - [GitLab](https://gitlab.com/tonygodspeed92), [Crowdin](https://crowdin.com/profile/tonygodspeed92)
- Chinese Traditional 繁體中文
- - Weizhe Ding - [GitLab](https://gitlab.com/d.weizhe), [CrowdIn](https://crowdin.com/profile/d.weizhe)
- - Yi-Jyun Pan - [GitLab](https://gitlab.com/pan93412), [CrowdIn](https://crowdin.com/profile/pan93412)
- - Victor Wu - [GitLab](https://gitlab.com/victorwuky), [CrowdIn](https://crowdin.com/profile/victorwu)
+ - Weizhe Ding - [GitLab](https://gitlab.com/d.weizhe), [Crowdin](https://crowdin.com/profile/d.weizhe)
+ - Yi-Jyun Pan - [GitLab](https://gitlab.com/pan93412), [Crowdin](https://crowdin.com/profile/pan93412)
+ - Victor Wu - [GitLab](https://gitlab.com/_victorwu_), [Crowdin](https://crowdin.com/profile/victorwu)
- Chinese Traditional, Hong Kong 繁體中文 (香港)
- - Victor Wu - [GitLab](https://gitlab.com/victorwuky), [CrowdIn](https://crowdin.com/profile/victorwu)
- - Ivan Ip - [GitLab](https://gitlab.com/lifehome), [CrowdIn](https://crowdin.com/profile/lifehome)
+ - Victor Wu - [GitLab](https://gitlab.com/_victorwu_), [Crowdin](https://crowdin.com/profile/victorwu)
+ - Ivan Ip - [GitLab](https://gitlab.com/lifehome), [Crowdin](https://crowdin.com/profile/lifehome)
- Croatian
- Proofreaders needed.
- Czech
- - Jan Urbanec - [GitLab](https://gitlab.com/TatranskyMedved), [CrowdIn](https://crowdin.com/profile/Tatranskymedved)
+ - Jan Urbanec - [GitLab](https://gitlab.com/TatranskyMedved), [Crowdin](https://crowdin.com/profile/Tatranskymedved)
- Danish
- - Saederup92 - [GitLab](https://gitlab.com/Saederup92), [CrowdIn](https://crowdin.com/profile/Saederup92)
+ - Saederup92 - [GitLab](https://gitlab.com/Saederup92), [Crowdin](https://crowdin.com/profile/Saederup92)
- Dutch
- - Emily Hendle - [GitLab](https://gitlab.com/pundachan), [CrowdIn](https://crowdin.com/profile/pandachan)
+ - Emily Hendle - [GitLab](https://gitlab.com/pundachan), [Crowdin](https://crowdin.com/profile/pandachan)
- Esperanto
- - Lyubomir Vasilev - [CrowdIn](https://crowdin.com/profile/lyubomirv)
+ - Lyubomir Vasilev - [Crowdin](https://crowdin.com/profile/lyubomirv)
- Estonian
- Proofreaders needed.
- Filipino
- - Andrei Jiroh Halili - [GitLab](https://gitlab.com/AJHalili2006DevPH), [Crowdin](https://crowdin.com/profile/AndreiJirohHaliliDev2006)
+ - Andrei Jiroh Halili - [GitLab](https://gitlab.com/ajhalili2006), [Crowdin](https://crowdin.com/profile/AndreiJirohHaliliDev2006)
- French
- - Davy Defaud - [GitLab](https://gitlab.com/DevDef), [CrowdIn](https://crowdin.com/profile/DevDef)
+ - Davy Defaud - [GitLab](https://gitlab.com/DevDef), [Crowdin](https://crowdin.com/profile/DevDef)
- Galician
- - Antón Méixome - [CrowdIn](https://crowdin.com/profile/meixome)
- - Pedro Garcia - [GitLab](https://gitlab.com/pedgarrod), [CrowdIn](https://crowdin.com/profile/breaking_pitt)
+ - Antón Méixome - [Crowdin](https://crowdin.com/profile/meixome)
+ - Pedro Garcia - [GitLab](https://gitlab.com/pedgarrod), [Crowdin](https://crowdin.com/profile/breaking_pitt)
- German
- - Michael Hahnle - [GitLab](https://gitlab.com/mhah), [CrowdIn](https://crowdin.com/profile/mhah)
- - Katrin Leinweber - [GitLab](https://gitlab.com/katrinleinweber/), [CrowdIn](https://crowdin.com/profile/katrinleinweber)
+ - Michael Hahnle - [GitLab](https://gitlab.com/mhah), [Crowdin](https://crowdin.com/profile/mhah)
+ - Katrin Leinweber - [GitLab](https://gitlab.com/katrinleinweber), [Crowdin](https://crowdin.com/profile/katrinleinweber)
- Greek
- Proofreaders needed.
- Hebrew
- - Yaron Shahrabani - [GitLab](https://gitlab.com/yarons), [CrowdIn](https://crowdin.com/profile/YaronSh)
+ - Yaron Shahrabani - [GitLab](https://gitlab.com/yarons), [Crowdin](https://crowdin.com/profile/YaronSh)
- Hindi
- Proofreaders needed.
- Hungarian
- Proofreaders needed.
- Indonesian
- - Adi Ferdian - [GitLab](https://gitlab.com/adiferd), [CrowdIn](https://crowdin.com/profile/adiferd)
- - Ahmad Naufal Mukhtar - [GitLab](https://gitlab.com/anaufalm), [CrowdIn](https://crowdin.com/profile/anaufalm)
+ - Adi Ferdian - [GitLab](https://gitlab.com/adiferd), [Crowdin](https://crowdin.com/profile/adiferd)
+ - Ahmad Naufal Mukhtar - [GitLab](https://gitlab.com/anaufalm), [Crowdin](https://crowdin.com/profile/anaufalm)
- Italian
- - Massimiliano Cuttini - [GitLab](https://gitlab.com/maxcuttins), [CrowdIn](https://crowdin.com/profile/maxcuttins)
- - Paolo Falomo - [GitLab](https://gitlab.com/paolofalomo), [CrowdIn](https://crowdin.com/profile/paolo.falomo)
+ - Massimiliano Cuttini - [GitLab](https://gitlab.com/maxcuttins), [Crowdin](https://crowdin.com/profile/maxcuttins)
+ - Paolo Falomo - [GitLab](https://gitlab.com/paolofalomo), [Crowdin](https://crowdin.com/profile/paolo.falomo)
- Japanese
- - Hiroyuki Sato - [GitLab](https://gitlab.com/hiroponz), [CrowdIn](https://crowdin.com/profile/hiroponz)
- - Tomo Dote - [GitLab](https://gitlab.com/fu7mu4), [CrowdIn](https://crowdin.com/profile/fu7mu4)
- - Hiromi Nozawa - [GitLab](https://gitlab.com/hir0mi), [CrowdIn](https://crowdin.com/profile/hir0mi)
- - Takuya Noguchi - [GitLab](https://gitlab.com/tnir), [CrowdIn](https://crowdin.com/profile/tnir)
+ - Hiroyuki Sato - [GitLab](https://gitlab.com/hiroponz), [Crowdin](https://crowdin.com/profile/hiroponz)
+ - Tomo Dote - [GitLab](https://gitlab.com/fu7mu4), [Crowdin](https://crowdin.com/profile/fu7mu4)
+ - Hiromi Nozawa - [GitLab](https://gitlab.com/hir0mi), [Crowdin](https://crowdin.com/profile/hir0mi)
+ - Takuya Noguchi - [GitLab](https://gitlab.com/tnir), [Crowdin](https://crowdin.com/profile/tnir)
- Korean
- - Chang-Ho Cha - [GitLab](https://gitlab.com/changho-cha), [CrowdIn](https://crowdin.com/profile/zzazang)
- - Ji Hun Oh - [GitLab](https://gitlab.com/Baw-Appie), [CrowdIn](https://crowdin.com/profile/BawAppie)
- - Jeongwhan Choi - [GitLab](https://gitlab.com/jeongwhanchoi), [CrowdIn](https://crowdin.com/profile/jeongwhanchoi)
+ - Chang-Ho Cha - [GitLab](https://gitlab.com/changho-cha), [Crowdin](https://crowdin.com/profile/zzazang)
+ - Ji Hun Oh - [GitLab](https://gitlab.com/Baw-Appie), [Crowdin](https://crowdin.com/profile/BawAppie)
+ - Jeongwhan Choi - [GitLab](https://gitlab.com/jeongwhanchoi), [Crowdin](https://crowdin.com/profile/jeongwhanchoi)
+ - Sunjung Park - [GitLab](https://gitlab.com/sunjungp), [Crowdin](https://crowdin.com/profile/sunjungp)
- Mongolian
- Proofreaders needed.
- Norwegian Bokmal
- - Imre Kristoffer Eilertsen - [GitLab](https://gitlab.com/DandelionSprout), [CrowdIn](https://crowdin.com/profile/DandelionSprout)
+ - Imre Kristoffer Eilertsen - [GitLab](https://gitlab.com/DandelionSprout), [Crowdin](https://crowdin.com/profile/DandelionSprout)
- Polish
- - Filip Mech - [GitLab](https://gitlab.com/mehenz), [CrowdIn](https://crowdin.com/profile/mehenz)
- - Maksymilian Roman - [GitLab](https://gitlab.com/villaincandle), [CrowdIn](https://crowdin.com/profile/villaincandle)
- - Jakub Gładykowski - [GitLab](https://gitlab.com/gladykov), [CrowdIn](https://crowdin.com/profile/gladykov)
+ - Filip Mech - [GitLab](https://gitlab.com/mehenz), [Crowdin](https://crowdin.com/profile/mehenz)
+ - Maksymilian Roman - [GitLab](https://gitlab.com/villaincandle), [Crowdin](https://crowdin.com/profile/villaincandle)
+ - Jakub Gładykowski - [GitLab](https://gitlab.com/gladykov), [Crowdin](https://crowdin.com/profile/gladykov)
- Portuguese
- - Diogo Trindade - [GitLab](https://gitlab.com/luisdiogo2071317), [CrowdIn](https://crowdin.com/profile/ldiogotrindade)
+ - Diogo Trindade - [GitLab](https://gitlab.com/luisdiogo2071317), [Crowdin](https://crowdin.com/profile/ldiogotrindade)
- Portuguese, Brazilian
- - Paulo George Gomes Bezerra - [GitLab](https://gitlab.com/paulobezerra), [CrowdIn](https://crowdin.com/profile/paulogomes.rep)
- - André Gama - [GitLab](https://gitlab.com/andregamma), [CrowdIn](https://crowdin.com/profile/ToeOficial)
- - Eduardo Addad de Oliveira - [GitLab](https://gitlab.com/eduardoaddad), [CrowdIn](https://crowdin.com/profile/eduardoaddad)
+ - Paulo George Gomes Bezerra - [GitLab](https://gitlab.com/paulobezerra), [Crowdin](https://crowdin.com/profile/paulogomes.rep)
+ - André Gama - [GitLab](https://gitlab.com/andregamma), [Crowdin](https://crowdin.com/profile/ToeOficial)
+ - Eduardo Addad de Oliveira - [GitLab](https://gitlab.com/eduardoaddad), [Crowdin](https://crowdin.com/profile/eduardoaddad)
- Romanian
- Proofreaders needed.
- Russian
@@ -108,22 +111,22 @@ are very appreciative of the work done by translators and proofreaders!
- Slovak
- Proofreaders needed.
- Spanish
- - Pedro Garcia - [GitLab](https://gitlab.com/pedgarrod), [CrowdIn](https://crowdin.com/profile/breaking_pitt)
+ - Pedro Garcia - [GitLab](https://gitlab.com/pedgarrod), [Crowdin](https://crowdin.com/profile/breaking_pitt)
- Swedish
- - Johannes Nilsson - [GitLab](https://gitlab.com/nlssn), [CrowdIn](https://crowdin.com/profile/nlssn)
+ - Johannes Nilsson - [GitLab](https://gitlab.com/nlssn), [Crowdin](https://crowdin.com/profile/nlssn)
- Turkish
- - Ali Demirtaş - [GitLab](https://gitlab.com/alidemirtas), [CrowdIn](https://crowdin.com/profile/alidemirtas)
- - Rıfat Ünalmış (Rifat Unalmis) - [GitLab](https://gitlab.com/runalmis), [CrowdIn](https://crowdin.com/profile/runalmis)
+ - Ali Demirtaş - [GitLab](https://gitlab.com/alidemirtas), [Crowdin](https://crowdin.com/profile/alidemirtas)
+ - Rıfat Ünalmış (Rifat Unalmis) - [GitLab](https://gitlab.com/runalmis), [Crowdin](https://crowdin.com/profile/runalmis)
- Ukrainian
- - Volodymyr Sobotovych - [GitLab](https://gitlab.com/wheleph), [CrowdIn](https://crowdin.com/profile/wheleph)
- - Andrew Vityuk - [GitLab](https://gitlab.com/3_1_3_u), [CrowdIn](https://crowdin.com/profile/andruwa13)
+ - Volodymyr Sobotovych - [GitLab](https://gitlab.com/wheleph), [Crowdin](https://crowdin.com/profile/wheleph)
+ - Andrew Vityuk - [GitLab](https://gitlab.com/3_1_3_u), [Crowdin](https://crowdin.com/profile/andruwa13)
- Welsh
- - Delyth Prys - [GitLab](https://gitlab.com/Delyth), [CrowdIn](https://crowdin.com/profile/DelythPrys)
+ - Delyth Prys - [GitLab](https://gitlab.com/Delyth), [Crowdin](https://crowdin.com/profile/DelythPrys)
<!-- vale gitlab.Spelling = YES -->
## Become a proofreader
-Before requesting proofreader permissions in CrowdIn, be sure you have a history of contributing
+Before requesting proofreader permissions in Crowdin, be sure you have a history of contributing
translations to the GitLab project.
1. Contribute translations to GitLab. See instructions for
@@ -143,7 +146,7 @@ translations to the GitLab project.
- Name
- Link to your GitLab profile
- - Link to your CrowdIn profile
+ - Link to your Crowdin profile
In the merge request description, include links to any projects you have previously translated.
diff --git a/doc/development/i18n/translation.md b/doc/development/i18n/translation.md
index f2592d9a8b9..34b7f5e8763 100644
--- a/doc/development/i18n/translation.md
+++ b/doc/development/i18n/translation.md
@@ -81,8 +81,10 @@ ethnicity. In languages that distinguish between a male and female form, use bot
neutral formulation.
<!-- vale gitlab.Spelling = NO -->
+
For example, in German, the word _user_ can be translated into _Benutzer_ (male) or _Benutzerin_
(female). Therefore, _create a new user_ translates to _Benutzer(in) anlegen_.
+
<!-- vale gitlab.Spelling = YES -->
### Updating the glossary
@@ -93,7 +95,9 @@ To propose additions to the glossary, please
## French translation guidelines
<!-- vale gitlab.Spelling = NO -->
+
In French, the _écriture inclusive_ is now over (see on [Legifrance](https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000036068906/)).
To include both genders, write _Utilisateurs et utilisatrices_ instead of _Utilisateur·rice·s_. If
there is not enough space, use the male gender alone.
+
<!-- vale gitlab.Spelling = YES -->
diff --git a/doc/development/img/stage_group_dashboards_error_attribution.png b/doc/development/img/stage_group_dashboards_error_attribution.png
index bac778b7450..f6ea7c004ac 100644
--- a/doc/development/img/stage_group_dashboards_error_attribution.png
+++ b/doc/development/img/stage_group_dashboards_error_attribution.png
Binary files differ
diff --git a/doc/development/img/stage_group_dashboards_service_sli_detail.png b/doc/development/img/stage_group_dashboards_service_sli_detail.png
index 5372b10074a..5dc32063709 100644
--- a/doc/development/img/stage_group_dashboards_service_sli_detail.png
+++ b/doc/development/img/stage_group_dashboards_service_sli_detail.png
Binary files differ
diff --git a/doc/development/import_project.md b/doc/development/import_project.md
index 71d8f8b34b9..69e5873cd87 100644
--- a/doc/development/import_project.md
+++ b/doc/development/import_project.md
@@ -16,7 +16,7 @@ There are several ways to import a project.
### Importing via UI
-The first option is to simply [import the Project tarball file via the GitLab UI](../user/project/settings/import_export.md#importing-the-project):
+The first option is to simply [import the Project tarball file via the GitLab UI](../user/project/settings/import_export.md#import-the-project):
1. Create the group `qa-perf-testing`
1. Import the [GitLab FOSS project tarball](https://gitlab.com/gitlab-org/quality/performance-data/-/blob/master/projects_export/gitlabhq_export.tar.gz) into the Group.
diff --git a/doc/development/index.md b/doc/development/index.md
index 711fc009d23..e8e7369f6c5 100644
--- a/doc/development/index.md
+++ b/doc/development/index.md
@@ -63,12 +63,13 @@ Complementary reads:
- [GitLab core team & GitLab Inc. contribution process](https://gitlab.com/gitlab-org/gitlab/-/blob/master/PROCESS.md)
- [Security process for developers](https://gitlab.com/gitlab-org/release/docs/blob/master/general/security/developer.md#security-releases-critical-non-critical-as-a-developer)
+- [Patch release process for developers](https://gitlab.com/gitlab-org/release/docs/blob/master/general/patch/process.md#process-for-developers)
- [Guidelines for implementing Enterprise Edition features](ee_features.md)
-- [Danger bot](dangerbot.md)
+- [Adding a new service component to GitLab](adding_service_component.md)
- [Guidelines for changelogs](changelog.md)
+- [Dependencies](dependencies.md)
+- [Danger bot](dangerbot.md)
- [Requesting access to ChatOps on GitLab.com](chatops_on_gitlabcom.md#requesting-access) (for GitLab team members)
-- [Patch release process for developers](https://gitlab.com/gitlab-org/release/docs/blob/master/general/patch/process.md#process-for-developers)
-- [Adding a new service component to GitLab](adding_service_component.md)
### Development guidelines review
@@ -256,6 +257,7 @@ the [reviewer values](https://about.gitlab.com/handbook/engineering/workflow/rev
environments.
- [Performance guidelines](performance.md) for writing code, benchmarks, and
certain patterns to avoid.
+- [Caching guidelines](caching.md) for using caching in Rails under a GitLab environment.
- [Merge request performance guidelines](merge_request_performance_guidelines.md)
for ensuring merge requests do not negatively impact GitLab performance
- [Profiling](profiling.md) a URL, measuring performance using Sherlock, or
diff --git a/doc/development/integrations/jenkins.md b/doc/development/integrations/jenkins.md
index 0e42055cba2..a1ad259319d 100644
--- a/doc/development/integrations/jenkins.md
+++ b/doc/development/integrations/jenkins.md
@@ -1,10 +1,10 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
-# How to run Jenkins in development environment (on macOS) **(STARTER)**
+# How to run Jenkins in development environment (on macOS) **(FREE)**
This is a step by step guide on how to set up [Jenkins](https://www.jenkins.io/) on your local machine and connect to it from your GitLab instance. GitLab triggers webhooks on Jenkins, and Jenkins connects to GitLab using the API. By running both applications on the same machine, we can make sure they are able to access each other.
diff --git a/doc/development/integrations/jira_connect.md b/doc/development/integrations/jira_connect.md
index 98a48007238..9772f7504cf 100644
--- a/doc/development/integrations/jira_connect.md
+++ b/doc/development/integrations/jira_connect.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
@@ -19,11 +19,13 @@ The following are required to install and test the app:
- [GDK with Gitpod](https://gitlab.com/gitlab-org/gitlab-development-kit/-/blob/main/doc/howto/gitpod.md)
documentation.
- You **must not** use tunneling tools such as
- <!-- vale gitlab.Spelling = NO --> Serveo <!-- vale gitlab.Spelling = YES -->
- or `ngrok`. These are
+ <!-- vale gitlab.Spelling = NO -->
+
+ You **must not** use tunneling tools such as Serveo or `ngrok`. These are
security risks, and must not be run on developer laptops.
+ <!-- vale gitlab.Spelling = YES -->
+
Jira requires all connections to the app host to be over SSL. If you set up
your own environment, remember to enable SSL and an appropriate certificate.
diff --git a/doc/development/integrations/secure.md b/doc/development/integrations/secure.md
index 07f7ac6a2ac..42a57e7f4fb 100644
--- a/doc/development/integrations/secure.md
+++ b/doc/development/integrations/secure.md
@@ -456,7 +456,7 @@ The attributes used to generate the location fingerprint also depend on the type
### Details
-The `details` field is an object that supports many different content elements that are displayed when viewing vulnerability information. An example of the various data elements can be seen in the [security-reports repository](https://gitlab.com/gitlab-examples/security/security-reports/-/tree/master/samples/details-example).
+The `details` field is an object that supports many different content elements that are displayed when viewing vulnerability information. An example of the various data elements can be seen in the [security-reports repository](https://gitlab.com/gitlab-examples/security/security-reports/-/tree/master/samples/details-example).
#### Dependency Scanning
diff --git a/doc/development/internal_api.md b/doc/development/internal_api.md
index 4614db96263..c7fc4bed38c 100644
--- a/doc/development/internal_api.md
+++ b/doc/development/internal_api.md
@@ -658,7 +658,7 @@ to apply additional packs of CI minutes, for personal namespaces or top-level gr
### Creating an additional pack
-Use a POST to create an additional pack.
+Use a POST to create additional packs.
```plaintext
POST /namespaces/:id/minutes
@@ -666,9 +666,10 @@ POST /namespaces/:id/minutes
| Attribute | Type | Required | Description |
|:------------|:--------|:---------|:------------|
-| `expires_at` | date | yes | Expiry date of the purchased pack|
-| `number_of_minutes` | integer | yes | Number of additional minutes |
-| `purchase_xid` | string | yes | The unique ID of the purchase |
+| `packs` | array | yes | An array of purchased minutes packs |
+| `packs[expires_at]` | date | yes | Expiry date of the purchased pack|
+| `packs[number_of_minutes]` | integer | yes | Number of additional minutes |
+| `packs[purchase_xid]` | string | yes | The unique ID of the purchase |
Example request:
@@ -678,20 +679,27 @@ curl --request POST \
--header 'Content-Type: application/json' \
--header 'PRIVATE-TOKEN: <admin access token>' \
--data '{
- "number_of_minutes": 10000,
- "expires_at": "2022-01-01",
- "purchase_xid": "46952fe69bebc1a4de10b2b4ff439d0c" }'
+ "packs": [
+ {
+ "number_of_minutes": 10000,
+ "expires_at": "2022-01-01",
+ "purchase_xid": "46952fe69bebc1a4de10b2b4ff439d0c"
+ }
+ ]
+ }'
```
Example response:
```json
-{
- "namespace_id": 123,
- "expires_at": "2022-01-01",
- "number_of_minutes": 10000,
- "purchase_xid": "46952fe69bebc1a4de10b2b4ff439d0c"
-}
+[
+ {
+ "namespace_id": 123,
+ "expires_at": "2022-01-01",
+ "number_of_minutes": 10000,
+ "purchase_xid": "46952fe69bebc1a4de10b2b4ff439d0c"
+ }
+]
```
### Moving additional packs
diff --git a/doc/development/iterating_tables_in_batches.md b/doc/development/iterating_tables_in_batches.md
index 3f2b467fec9..fba6f2f616d 100644
--- a/doc/development/iterating_tables_in_batches.md
+++ b/doc/development/iterating_tables_in_batches.md
@@ -334,8 +334,8 @@ end
The iteration uses the `id` column of the `projects` table. The batching does not affect the
subquery. This means for each iteration, the subquery is executed by the database. This adds a
constant "load" on the query which often ends up in statement timeouts. We have an unknown number
-of confidential issues, the execution time and the accessed database rows depend on the data
-distribution in the `issues` table.
+of [confidential issues](../user/project/issues/confidential_issues.md), the execution time
+and the accessed database rows depend on the data distribution in the `issues` table.
NOTE:
Using subqueries works only when the subquery returns a small number of rows.
diff --git a/doc/development/logging.md b/doc/development/logging.md
index cb1070b49cc..a4eda6ad02e 100644
--- a/doc/development/logging.md
+++ b/doc/development/logging.md
@@ -45,7 +45,7 @@ Note that currently on GitLab.com, any messages in `production.log` aren't
indexed by Elasticsearch due to the sheer volume and noise. They
do end up in Google Stackdriver, but it is still harder to search for
logs there. See the [GitLab.com logging
-documentation](https://gitlab.com/gitlab-com/runbooks/blob/master/logging/doc/README.md)
+documentation](https://gitlab.com/gitlab-com/runbooks/-/tree/master/docs/logging)
for more details.
## Use structured (JSON) logging
diff --git a/doc/development/migration_style_guide.md b/doc/development/migration_style_guide.md
index f76b053c2bd..bbaa6527e84 100644
--- a/doc/development/migration_style_guide.md
+++ b/doc/development/migration_style_guide.md
@@ -31,11 +31,66 @@ Please don't depend on GitLab-specific code since it can change in future
versions. If needed copy-paste GitLab code into the migration to make it forward
compatible.
-For GitLab.com, please take into consideration that regular migrations (under `db/migrate`)
-are run before [Canary is deployed](https://gitlab.com/gitlab-com/gl-infra/readiness/-/tree/master/library/canary/#configuration-and-deployment),
-and [post-deployment migrations](post_deployment_migrations.md) (`db/post_migrate`) are run after the deployment to production has finished.
+## Choose an appropriate migration type
+
+The first step before adding a new migration should be to decide which type is most appropriate.
+
+There are currently three kinds of migrations you can create, depending on the kind of
+work it needs to perform and how long it takes to complete:
+
+1. [**Regular schema migrations.**](#create-a-regular-schema-migration) These are traditional Rails migrations in `db/migrate` that run _before_ new application code is deployed
+ (for GitLab.com before [Canary is deployed](https://gitlab.com/gitlab-com/gl-infra/readiness/-/tree/master/library/canary/#configuration-and-deployment)).
+ This means that they should be relatively fast, no more than a few minutes, so as not to unnecessarily delay a deployment.
+
+ One exception is a migration that takes longer but is absolutely critical for the application to operate correctly.
+ For example, you might have indices that enforce unique tuples, or that are needed for query performance in critical parts of the application. In cases where the migration would be unacceptably slow, however, a better option might be to guard the feature with a [feature flag](feature_flags/index.md)
+ and perform a post-deployment migration instead. The feature can then be turned on after the migration finishes.
+1. [**Post-deployment migrations.**](post_deployment_migrations.md) These are Rails migrations in `db/post_migrate` and
+ run _after_ new application code has been deployed (for GitLab.com after the production deployment has finished).
+ They can be used for schema changes that aren't critical for the application to operate, or data migrations that take at most a few minutes.
+ Common examples for schema changes that should run post-deploy include:
+ - Clean-ups, like removing unused columns.
+ - Adding non-critical indices on high-traffic tables.
+ - Adding non-critical indices that take a long time to create.
+1. [**Background migrations.**](background_migrations.md) These aren't regular Rails migrations, but application code that is
+ executed via Sidekiq jobs, although a post-deployment migration is used to schedule them. Use them only for data migrations that
+ exceed the timing guidelines for post-deploy migrations. Background migrations should _not_ change the schema.
+
+Use the following diagram to guide your decision, but keep in mind that it is just a tool, and
+the final outcome will always be dependent on the specific changes being made:
+
+```mermaid
+graph LR
+ A{Schema<br/>changed?}
+ A -->|Yes| C{Critical to<br/>speed or<br/>behavior?}
+ A -->|No| D{Is it fast?}
+
+ C -->|Yes| H{Is it fast?}
+ C -->|No| F[Post-deploy migration]
+
+ H -->|Yes| E[Regular migration]
+ H -->|No| I[Post-deploy migration<br/>+ feature flag]
+
+ D -->|Yes| F[Post-deploy migration]
+ D -->|No| G[Background migration]
+```
+
+### How long a migration should take
+
+In general, all migrations for a single deploy shouldn't take longer than
+1 hour for GitLab.com. The following guidelines are not hard rules, they were
+estimated to keep migration duration to a minimum.
+
+NOTE:
+Keep in mind that all durations should be measured against GitLab.com.
+
+| Migration Type | Recommended Duration | Notes |
+|----|----|---|
+| Regular migrations | `<= 3 minutes` | A valid exception are changes without which application functionality or performance would be severely degraded and which cannot be delayed. |
+| Post-deployment migrations | `<= 10 minutes` | A valid exception are schema changes, since they must not happen in background migrations. |
+| Background migrations | `> 10 minutes` | Since these are suitable for larger tables, it's not possible to set a precise timing guideline, however, any single query must stay below [`1 second` execution time](query_performance.md#timing-guidelines-for-queries) with cold caches. |
-## Create database migrations
+## Create a regular schema migration
To create a migration you can use the following Rails generator:
@@ -433,47 +488,6 @@ like a standard migration invocation.
The migration might fail if there is a very long running transaction (40+ minutes)
accessing the `users` table.
-## Multi-Threading
-
-Sometimes a migration might need to use multiple Ruby threads to speed up a
-migration. For this to work your migration needs to include the module
-`Gitlab::Database::MultiThreadedMigration`:
-
-```ruby
-class MyMigration < ActiveRecord::Migration[6.0]
- include Gitlab::Database::MigrationHelpers
- include Gitlab::Database::MultiThreadedMigration
-end
-```
-
-You can then use the method `with_multiple_threads` to perform work in separate
-threads. For example:
-
-```ruby
-class MyMigration < ActiveRecord::Migration[6.0]
- include Gitlab::Database::MigrationHelpers
- include Gitlab::Database::MultiThreadedMigration
-
- def up
- with_multiple_threads(4) do
- disable_statement_timeout
-
- # ...
- end
- end
-end
-```
-
-Here the call to `disable_statement_timeout` uses the connection local to
-the `with_multiple_threads` block, instead of re-using the global connection
-pool. This ensures each thread has its own connection object, and doesn't time
-out when trying to obtain one.
-
-PostgreSQL has a maximum amount of connections that it allows. This
-limit can vary from installation to installation. As a result, it's recommended
-you do not use more than 32 threads in a single migration. Usually, 4-8 threads
-should be more than enough.
-
## Removing indexes
If the table is not empty when removing an index, make sure to use the method
@@ -1131,3 +1145,7 @@ Note that the metrics linked here are GitLab-internal only:
- [Size](https://thanos.gitlab.net/graph?g0.range_input=2h&g0.max_source_resolution=0s&g0.expr=topk(500%2C%20max%20by%20(relname)%20(pg_total_relation_size_bytes%7Benvironment%3D%22gprd%22%7D))&g0.tab=1) is greater than 10 GB
Any table which has some high read operation compared to current [high-traffic tables](https://gitlab.com/gitlab-org/gitlab/-/blob/master/rubocop/rubocop-migrations.yml#L4) might be a good candidate.
+
+As a general rule, we discourage adding columns to high-traffic tables that are purely for
+analytics or reporting of GitLab.com. This can have negative performance impacts for all
+self-managed instances without providing direct feature value to them.
diff --git a/doc/development/namespaces_storage_statistics.md b/doc/development/namespaces_storage_statistics.md
index 232d421d883..c6af0ddf9ea 100644
--- a/doc/development/namespaces_storage_statistics.md
+++ b/doc/development/namespaces_storage_statistics.md
@@ -14,7 +14,7 @@ storage consumed by a group, and allow easy management.
## Proposal
-1. Create a new ActiveRecord model to hold the namespaces' statistics in an aggregated form (only for root namespaces).
+1. Create a new ActiveRecord model to hold the namespaces' statistics in an aggregated form (only for root [namespaces](../user/group/index.md#namespaces)).
1. Refresh the statistics in this model every time a project belonging to this namespace is changed.
## Problem
diff --git a/doc/development/permissions.md b/doc/development/permissions.md
index 177fedcf454..b7079e9fb8e 100644
--- a/doc/development/permissions.md
+++ b/doc/development/permissions.md
@@ -86,7 +86,8 @@ is calculated properly.
### Confidential issues
-Confidential issues can be accessed only by project members who are at least
+[Confidential issues](../user/project/issues/confidential_issues.md) can be accessed
+only by project members who are at least
reporters (they can't be accessed by guests). Additionally they can be accessed
by their authors and assignees.
diff --git a/doc/development/pipelines.md b/doc/development/pipelines.md
index 0fe48fe8b9e..820299a426b 100644
--- a/doc/development/pipelines.md
+++ b/doc/development/pipelines.md
@@ -404,7 +404,7 @@ graph LR
A Merge Request author may choose to opt-out of the fail fast mechanism by doing one of the following:
-- Including `[SKIP RSPEC FAIL-FAST]` in the Merge Request title.
+- Adding the `pipeline:skip-rspec-fail-fast` label to the merge request
- Starting the `dont-interrupt-me` job found in the `sync` stage of a Merge Request pipeline.
The `rspec fail-fast` is a no-op if there are more than 10 test files related to the
@@ -421,58 +421,18 @@ This experiment is only enabled when the CI/CD variable `RSPEC_FAIL_FAST_ENABLED
The test files related to the Merge Request are determined using the [`test_file_finder`](https://gitlab.com/gitlab-org/ci-cd/test_file_finder) gem.
We are using a custom mapping between source file to test files, maintained in the `tests.yml` file.
-### RSpec minimal job experiment
+### RSpec minimal jobs
-As part of the objective to improve overall pipeline duration, we are experimenting with a minimal set of RSpec tests.
-The purpose of this experiment is to verify if we are able to run a minimal set of RSpec tests in a Merge Request pipeline,
-without resulting in increased number of broken main branch.
+Before a merge request is approved, the pipeline will run a minimal set of RSpec tests that are related to the merge request changes.
+This is to reduce the pipeline cost and shorten the job duration.
To identify the minimal set of tests needed, we use [Crystalball gem](https://github.com/toptal/crystalball) to create a test mapping.
The test mapping contains a map of each source files to a list of test files which is dependent of the source file.
This mapping is currently generated using a combination of test coverage tracing and a static mapping.
In the `detect-tests` job, we use this mapping to identify the minimal tests needed for the current Merge Request.
-In this experiment, each `rspec` job is accompanied with a `minimal` version.
-For example, `rspec unit` job has a corresponding `rspec unit minimal` job.
-During the experiment, each Merge Request pipeline will contain both versions of the job, running in parallel.
-
-To illustrate this:
-
-```mermaid
-graph LR
- A --"artifact: list of test files"--> C1 & D1 & E1 & F1
-
- subgraph "prepare stage";
- A["detect-tests"];
- end
-
- subgraph "test stage";
- C["rspec migration"];
- C1["rspec migration minimal"];
- D["rspec unit"];
- D1["rspec unit minimal"];
- E["rspec integration"];
- E1["rspec integration minimal"];
- F["rspec system"];
- F1["rspec system minimal"];
- end
-```
-
-The result of both set of jobs in the pipeline is then compared to identify any false positive.
-A list of such pipeline can be found in [Sisense](https://app.periscopedata.com/app/gitlab/496118/Engineering-Productivity-Sandbox?widget=10492739&udv=833427).
-
-A false positive is defined as a pipeline where the `minimal` jobs passed, but the non-`minimal` jobs failed.
-This indicates that the changeset resulted in a test failure, which was not detected by the `minimal` jobs.
-Consequently, this signifies a gap in the test mapping used, which would need to be rectified.
-
-#### Findings
-
-After a round of the experiment done in December 2020,
-we discovered that it was challenging to achieve a mapping that gives high confidence at the moment,
-because of 2 reasons:
-
-- Each identified gap in the test mapping is unique, each needing its own investigation and improvement to the creation of the test mapping.
-- There is a large number of flaky tests which added a lot of noise in the data, slowing down the investigation process.
+After a merge request has been approved, the pipeline would contain the full RSpec tests. This will ensure that all tests
+have been run before a merge request is merged.
### PostgreSQL versions testing
@@ -508,8 +468,9 @@ for more information.
We have dedicated jobs for each [testing level](testing_guide/testing_levels.md) and each job runs depending on the
changes made in your merge request.
-If you want to force all the RSpec jobs to run regardless of your changes, you can include `RUN ALL RSPEC` in your merge
-request title.
+If you want to force all the RSpec jobs to run regardless of your changes, you can add the `pipeline:run-all-rspec` label to the merge request.
+
+> Forcing all jobs on docs only related MRs would not have the prerequisite jobs and would lead to errors
### Review app jobs
@@ -521,7 +482,7 @@ The `* as-if-foss` jobs allows the GitLab test suite "as-if-FOSS", meaning as if
of the `gitlab-org/gitlab-foss` project. These jobs are only created in the following cases:
- `gitlab-org/security/gitlab` merge requests.
-- Merge requests which include `RUN AS-IF-FOSS` in their title.
+- Merge requests with the `pipeline:run-as-if-foss` label
- Merge requests that changes the CI configuration.
The `* as-if-foss` jobs are run in addition to the regular EE-context jobs. They have the `FOSS_ONLY='1'` variable
@@ -566,7 +527,7 @@ request, be sure to start the `dont-interrupt-me` job before pushing.
- `update-assets-compile-test-cache`, defined in [`.gitlab/ci/frontend.gitlab-ci.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab/ci/frontend.gitlab-ci.yml).
- `update-yarn-cache`, defined in [`.gitlab/ci/frontend.gitlab-ci.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab/ci/frontend.gitlab-ci.yml).
- `update-storybook-yarn-cache`, defined in [`.gitlab/ci/frontend.gitlab-ci.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab/ci/frontend.gitlab-ci.yml).
-1. These jobs can also be forced to run in merge requests whose title include `UPDATE CACHE` (this can be useful to warm the caches in a MR that updates the cache keys).
+1. These jobs can also be forced to run in merge requests with the `pipeline:update-cache` label (this can be useful to warm the caches in a MR that updates the cache keys).
### Artifacts strategy
@@ -676,7 +637,9 @@ that is deployed in stage `review`.
The default image is defined in [`.gitlab-ci.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab-ci.yml).
<!-- vale gitlab.Spelling = NO -->
+
It includes Ruby, Go, Git, Git LFS, Chrome, Node, Yarn, PostgreSQL, and Graphics Magick.
+
<!-- vale gitlab.Spelling = YES -->
The images used in our pipelines are configured in the
@@ -767,9 +730,9 @@ and included in `rules` definitions via [YAML anchors](../ci/yaml/index.md#ancho
| `if-auto-deploy-branches` | Matches if the current branch is an auto-deploy one. | |
| `if-master-or-tag` | Matches if the pipeline is for the `master` or `main` branch or for a tag. | |
| `if-merge-request` | Matches if the pipeline is for a merge request. | |
-| `if-merge-request-title-as-if-foss` | Matches if the pipeline is for a merge request and the MR title includes "RUN AS-IF-FOSS". | |
-| `if-merge-request-title-update-caches` | Matches if the pipeline is for a merge request and the MR title includes "UPDATE CACHE". | |
-| `if-merge-request-title-run-all-rspec` | Matches if the pipeline is for a merge request and the MR title includes "RUN ALL RSPEC". | |
+| `if-merge-request-title-as-if-foss` | Matches if the pipeline is for a merge request and the MR has label ~"pipeline:run-as-if-foss" | |
+| `if-merge-request-title-update-caches` | Matches if the pipeline is for a merge request and the MR has label ~"pipeline:update-cache". | |
+| `if-merge-request-title-run-all-rspec` | Matches if the pipeline is for a merge request and the MR has label ~"pipeline:run-all-rspec". | |
| `if-security-merge-request` | Matches if the pipeline is for a security merge request. | |
| `if-security-schedule` | Matches if the pipeline is for a security scheduled pipeline. | |
| `if-nightly-master-schedule` | Matches if the pipeline is for a `master` scheduled pipeline with `$NIGHTLY` set. | |
@@ -782,7 +745,7 @@ and included in `rules` definitions via [YAML anchors](../ci/yaml/index.md#ancho
| `if-dot-com-ee-schedule` | Limits jobs to scheduled pipelines for the `gitlab-org/gitlab` project on GitLab.com. | |
| `if-cache-credentials-schedule` | Limits jobs to scheduled pipelines with the `$CI_REPO_CACHE_CREDENTIALS` variable set. | |
| `if-rspec-fail-fast-disabled` | Limits jobs to pipelines with `$RSPEC_FAIL_FAST_ENABLED` CI/CD variable not set to `"true"`. | |
-| `if-rspec-fail-fast-skipped` | Matches if the pipeline is for a merge request and the MR title includes "SKIP RSPEC FAIL-FAST". | |
+| `if-rspec-fail-fast-skipped` | Matches if the pipeline is for a merge request and the MR has label ~"pipeline:skip-rspec-fail-fast". | |
| `if-security-pipeline-merge-result` | Matches if the pipeline is for a security merge request triggered by `@gitlab-release-tools-bot`. | |
<!-- vale gitlab.Substitutions = YES -->
diff --git a/doc/development/projections.md b/doc/development/projections.md
index c112ec6f119..e1dc37a7ce8 100644
--- a/doc/development/projections.md
+++ b/doc/development/projections.md
@@ -36,7 +36,9 @@ You can find a basic list of projection options in
## History
<!-- vale gitlab.Spelling = NO -->
+
This started as a
[plugin for vim by tpope](https://github.com/tpope/vim-projectionist)
It has since become editor-agnostic and ported to most modern editors.
+
<!-- vale gitlab.Spelling = YES --> \ No newline at end of file
diff --git a/doc/development/query_performance.md b/doc/development/query_performance.md
index 318d9f46aff..bc1f753c012 100644
--- a/doc/development/query_performance.md
+++ b/doc/development/query_performance.md
@@ -18,10 +18,10 @@ When you are optimizing your SQL queries, there are two dimensions to pay attent
| Query Type | Maximum Query Time | Notes |
|----|----|---|
| General queries | `100ms` | This is not a hard limit, but if a query is getting above it, it is important to spend time understanding why it can or cannot be optimized. |
-| Queries in a migration | `100ms` | This is different than the total [migration time](database_review.md#timing-guidelines-for-migrations). |
+| Queries in a migration | `100ms` | This is different than the total [migration time](migration_style_guide.md#how-long-a-migration-should-take). |
| Concurrent operations in a migration | `5min` | Concurrent operations do not block the database, but they block the GitLab update. This includes operations such as `add_concurrent_index` and `add_concurrent_foreign_key`. |
| Background migrations | `1s` | |
-| Service Ping | `1s` | See the [Service Ping docs](service_ping/index.md#developing-and-testing-service-ping) for more details. |
+| Service Ping | `1s` | See the [Service Ping docs](service_ping/implement.md) for more details. |
- When analyzing your query's performance, pay attention to if the time you are seeing is on a [cold or warm cache](#cold-and-warm-cache). These guidelines apply for both cache types.
- When working with batched queries, change the range and batch size to see how it effects the query timing and caching.
diff --git a/doc/development/reference_processing.md b/doc/development/reference_processing.md
index 2fd0ce51b39..ad6552e88fe 100644
--- a/doc/development/reference_processing.md
+++ b/doc/development/reference_processing.md
@@ -152,7 +152,8 @@ a resource that some subsequent readers should not be able to see.
For example, you might create an issue, and refer to a confidential issue `#1234`,
which you have access to. This is rendered in the cached HTML as a link to
-that confidential issue, with data attributes containing its ID, the ID of the
+that [confidential issue](../user/project/issues/confidential_issues.md),
+with data attributes containing its ID, the ID of the
project and other confidential data. A later reader, who has access to your issue
might not have permission to read issue `#1234`, and so we need to redact
these sensitive pieces of data. This is what `ReferenceParser` classes do.
diff --git a/doc/development/service_ping/dictionary.md b/doc/development/service_ping/dictionary.md
index 153c385c4bb..e7e8464ff7a 100644
--- a/doc/development/service_ping/dictionary.md
+++ b/doc/development/service_ping/dictionary.md
@@ -1,23249 +1,4 @@
---
-stage: Growth
-group: Product Intelligence
-info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
+redirect_to: 'https://gitlab-org.gitlab.io/growth/product-intelligence/metric-dictionary'
+remove_date: '2021-11-10'
---
-
-<!---
- This documentation is auto generated by a script.
-
- Please do not edit this file directly, check generate_metrics_dictionary task on lib/tasks/gitlab/usage_data.rake.
---->
-
-# Metrics Dictionary
-
-This file is autogenerated, please do not edit directly.
-
-To generate these files from the GitLab repository, run:
-
-```shell
-bundle exec rake gitlab:usage_data:generate_metrics_dictionary
-```
-
-The Metrics Dictionary is based on the following metrics definition YAML files:
-
-- [`config/metrics`](https://gitlab.com/gitlab-org/gitlab/-/tree/master/config/metrics)
-- [`ee/config/metrics`](https://gitlab.com/gitlab-org/gitlab/-/tree/master/ee/config/metrics)
-
-Each table includes a `milestone`, which corresponds to the GitLab version when the metric
-was released.
-
-<!-- vale off -->
-<!-- Docs linting disabled after this line. -->
-<!-- See https://docs.gitlab.com/ee/development/documentation/testing.html#disable-vale-tests -->
-
-## Metrics Definitions
-
-### `active_user_count`
-
-The number of active users existing in the instance. This is named the instance_user_count in the Versions application.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/license/20210204124829_active_user_count.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Subscription`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `analytics_unique_visits.analytics_unique_visits_for_any_target`
-
-Unique visitors to any analytics feature by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216174908_analytics_unique_visits_for_any_target.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.analytics_unique_visits_for_any_target_monthly`
-
-Unique visitors to any analytics feature by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216174910_analytics_unique_visits_for_any_target_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.g_analytics_contribution`
-
-Unique visitors to /groups/:group/-/contribution_analytics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216174836_g_analytics_contribution.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.g_analytics_insights`
-
-Unique visitors to /groups/:group/-/insights
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216174838_g_analytics_insights.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.g_analytics_issues`
-
-Unique visitors to /groups/:group/-/issues_analytics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216174840_g_analytics_issues.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.g_analytics_merge_request`
-
-Unique visitors to /groups/:group/-/analytics/merge_request_analytics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216174902_g_analytics_merge_request.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`
-
-### `analytics_unique_visits.g_analytics_productivity`
-
-Unique visitors to /groups/:group/-/analytics/productivity_analytics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216174842_g_analytics_productivity.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.g_analytics_valuestream`
-
-Unique visitors to /groups/:group/-/analytics/value_stream_analytics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216174844_g_analytics_valuestream.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.i_analytics_cohorts`
-
-Unique visitors to /-/instance_statistics/cohorts
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216174858_i_analytics_cohorts.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.i_analytics_dev_ops_adoption`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210423005644_i_analytics_dev_ops_adoption.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `analytics_unique_visits.i_analytics_dev_ops_score`
-
-Unique visitors to /-/instance_statistics/dev_ops_score
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216174900_i_analytics_dev_ops_score.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.i_analytics_instance_statistics`
-
-Unique visitors to/admin/usage_trends
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216174906_i_analytics_instance_statistics.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.p_analytics_code_reviews`
-
-Unique visitors to /:group/:project/-/analytics/code_reviews
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216174848_p_analytics_code_reviews.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.p_analytics_insights`
-
-Unique visitors to /:group/:project/insights
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216174852_p_analytics_insights.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.p_analytics_issues`
-
-Unique visitors to /:group/:project/-/analytics/issues_analytics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216174854_p_analytics_issues.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.p_analytics_merge_request`
-
-Unique visitors to /:group/:project/-/analytics/merge_request_analytics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216174904_p_analytics_merge_request.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.p_analytics_pipelines`
-
-Unique visitors to /:group/:project/pipelines/charts
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216174846_p_analytics_pipelines.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.p_analytics_repo`
-
-Unique visitors to /:group/:project/-/graphs/master/charts
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216174856_p_analytics_repo.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.p_analytics_valuestream`
-
-Unique visitors to /:group/:project/-/value_stream_analytics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216174850_p_analytics_valuestream.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.users_viewing_analytics_group_devops_adoption`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210428142406_users_viewing_analytics_group_devops_adoption.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `compliance_unique_visits.a_compliance_audit_events_api`
-
-Unique users that have used the Audit Events API.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216183912_a_compliance_audit_events_api.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `compliance_unique_visits.compliance_unique_visits_for_any_target`
-
-Number of unique visits to any compliance page
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216183914_compliance_unique_visits_for_any_target.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `compliance_unique_visits.compliance_unique_visits_for_any_target_monthly`
-
-Number of unique visits to any compliance page over a given month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216183916_compliance_unique_visits_for_any_target_monthly.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `compliance_unique_visits.g_compliance_audit_events`
-
-Unique users who have viewed audit events
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216183906_g_compliance_audit_events.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `compliance_unique_visits.g_compliance_dashboard`
-
-Number of unique visitors to the compliance dashboard.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216183904_g_compliance_dashboard.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `compliance_unique_visits.i_compliance_audit_events`
-
-Unique users that have viewed the instance-level audit events screen
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216183908_i_compliance_audit_events.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `compliance_unique_visits.i_compliance_credential_inventory`
-
-Unique users who have viewed the credential inventory
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216183910_i_compliance_credential_inventory.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `container_registry_enabled`
-
-A count of projects where the container registry is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210204124858_container_registry_enabled.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `container_registry_server.vendor`
-
-Identifies if a user is using an external container registry and what type
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181051_vendor.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `container_registry_server.version`
-
-Identifies the version of the external registry being used
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/license/20210216181053_version.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.alert_bot_incident_issues`
-
-Count of issues created by the alert bot automatically
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180449_alert_bot_incident_issues.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.all_searches`
-
-Total Searches for All Basic Search and Advanced Search in self-managed and SaaS
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180413_all_searches.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.api_fuzzing_dnd_jobs`
-
-Count of API Fuzzing `docker-in-docker` jobs run by job name
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180346_api_fuzzing_dnd_jobs.yml)
-
-Group: `group::fuzz testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.api_fuzzing_jobs`
-
-Count of API Fuzzing jobs run by job name
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180344_api_fuzzing_jobs.yml)
-
-Group: `group::fuzz testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.assignee_lists`
-
-Count of assignee lists created on Boards
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216181100_assignee_lists.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.auto_devops_disabled`
-
-Projects with Auto DevOps template disabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175231_auto_devops_disabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.auto_devops_enabled`
-
-Projects with Auto DevOps template enabled (excluding implicit Auto DevOps enabled and Auto DevOps template includes)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175229_auto_devops_enabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.boards`
-
-Count of Boards created
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181252_boards.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ci_builds`
-
-Unique builds in project
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175510_ci_builds.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ci_external_pipelines`
-
-Total pipelines in external repositories
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175514_ci_external_pipelines.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.ci_internal_pipelines`
-
-Total pipelines in GitLab repositories
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175512_ci_internal_pipelines.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ci_pipeline_config_auto_devops`
-
-Total pipelines from an Auto DevOps template
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175516_ci_pipeline_config_auto_devops.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ci_pipeline_config_repository`
-
-Total Pipelines from templates in repository
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175518_ci_pipeline_config_repository.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ci_pipeline_schedules`
-
-Pipeline schedules in GitLab
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175523_ci_pipeline_schedules.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ci_runners`
-
-Total configured Runners in project
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175520_ci_runners.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ci_runners_group_type_active`
-
-Total active instance Runners
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210502050341_ci_runners_group_type_active.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ci_runners_group_type_active_online`
-
-Total active and online group Runners
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210502051922_ci_runners_group_type_active_online.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ci_runners_instance_type_active`
-
-Total active group Runners
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210502045402_ci_runners_instance_type_active.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ci_runners_instance_type_active_online`
-
-Total active and online instance Runners
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210502051651_ci_runners_instance_type_active_online.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ci_runners_online`
-
-Total online Runners
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210502050942_ci_runners_online.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ci_runners_project_type_active`
-
-Total active project Runners
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210502050834_ci_runners_project_type_active.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ci_runners_project_type_active_online`
-
-Total active and online project Runners
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210502052036_ci_runners_project_type_active_online.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ci_triggers`
-
-Total configured Triggers in project
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175521_ci_triggers.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters`
-
-Total GitLab Managed clusters both enabled and disabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175232_clusters.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_applications_cert_managers`
-
-Total GitLab Managed clusters with GitLab Managed App:Cert Manager installed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175259_clusters_applications_cert_managers.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_applications_cilium`
-
-Total GitLab Managed clusters with GitLab Managed App:Cilium installed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175312_clusters_applications_cilium.yml)
-
-Group: `group::configure`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_applications_crossplane`
-
-Total GitLab Managed clusters with GitLab Managed App:Crossplane installed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175301_clusters_applications_crossplane.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_applications_elastic_stack`
-
-Total GitLab Managed clusters with GitLab Managed App:Elastic Stack installed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175309_clusters_applications_elastic_stack.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_applications_helm`
-
-Total GitLab Managed clusters with GitLab Managed App:Helm enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175255_clusters_applications_helm.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_applications_ingress`
-
-Total GitLab Managed clusters with GitLab Managed App:Ingress installed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175257_clusters_applications_ingress.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_applications_jupyter`
-
-Total GitLab Managed clusters with GitLab Managed App:Jupyter installed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175310_clusters_applications_jupyter.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_applications_knative`
-
-Total GitLab Managed clusters with GitLab Managed App:Knative installed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175307_clusters_applications_knative.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_applications_prometheus`
-
-Total GitLab Managed clusters with GitLab Managed App:Prometheus installed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175303_clusters_applications_prometheus.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_applications_runner`
-
-Total GitLab Managed clusters with GitLab Managed App:Runner installed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175305_clusters_applications_runner.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_disabled`
-
-Number of Kubernetes clusters attached to GitLab currently disabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175242_clusters_disabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_enabled`
-
-Number of Kubernetes clusters attached to GitLab currently enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175234_clusters_enabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_management_project`
-
-Total GitLab Managed clusters with defined cluster management project
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175314_clusters_management_project.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_platforms_eks`
-
-Total GitLab Managed clusters provisioned with GitLab on AWS EKS
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175250_clusters_platforms_eks.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_platforms_gke`
-
-Total GitLab Managed clusters provisioned with GitLab on GCE GKE
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175251_clusters_platforms_gke.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_platforms_user`
-
-Total GitLab Managed clusters that are user provisioned
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175253_clusters_platforms_user.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.commit_comment`
-
-Count of total unique commit comments. Does not include MR diff comments
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182004_commit_comment.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.confidential_epics`
-
-Count of confidential epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216181205_confidential_epics.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.container_scanning_jobs`
-
-Count of Container Scanning jobs run
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175458_container_scanning_jobs.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.coverage_fuzzing_jobs`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183146_coverage_fuzzing_jobs.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.cycle_analytics_views`
-
-Total visits to VSA (both group- and project-level) all time
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216174832_cycle_analytics_views.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.dast_jobs`
-
-Count of DAST jobs run
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175612_dast_jobs.yml)
-
-Group: `group::dynamic analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.dast_on_demand_pipelines`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183149_dast_on_demand_pipelines.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.dependency_list_usages_total`
-
-Count to Dependency List page views
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175211_dependency_list_usages_total.yml)
-
-Group: `group::composition analysis`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.dependency_scanning_jobs`
-
-Count of Dependency Scanning jobs run
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175213_dependency_scanning_jobs.yml)
-
-Group: `group::composition analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.deploy_keys`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181908_deploy_keys.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.deployments`
-
-Total deployments count
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210201124934_deployments.yml)
-
-Group: `group::ops release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.design_management_designs_create`
-
-Number of designs that were created
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180740_design_management_designs_create.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.design_management_designs_delete`
-
-Number of designs that were deleted
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180743_design_management_designs_delete.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.design_management_designs_update`
-
-Number of updates to designs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180741_design_management_designs_update.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.environments`
-
-Total available and stopped environments
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181914_environments.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.epic_issues`
-
-Count of issues that are assigned to an epic
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216181208_epic_issues.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.epics`
-
-Count of all epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216181206_epics.yml)
-
-Group: `group::product planning`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.epics_deepest_relationship_level`
-
-Count of the deepest relationship level for epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216181212_epics_deepest_relationship_level.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.failed_deployments`
-
-Total failed deployments
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181912_failed_deployments.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.feature_flags`
-
-Number of feature flag toggles
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181249_feature_flags.yml)
-
-Group: `group::progressive delivery`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.geo_event_log_max_id`
-
-Number of replication events on a Geo primary
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180405_geo_event_log_max_id.yml)
-
-Group: `group::geo`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.geo_nodes`
-
-Total number of sites in a Geo deployment
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210201124936_geo_nodes.yml)
-
-Group: `group::geo`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.grafana_integrated_projects`
-
-Total Grafana integrations attached to projects
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180927_grafana_integrated_projects.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.group_clusters_disabled`
-
-Total GitLab Managed disabled clusters previously attached to groups
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175246_group_clusters_disabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.group_clusters_enabled`
-
-Total GitLab Managed clusters attached to groups
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175238_group_clusters_enabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups`
-
-Total count of groups as of usage ping snapshot
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180750_groups.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_asana_active`
-
-Count of groups with active integrations for Asana
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175625_groups_asana_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_assembla_active`
-
-Count of groups with active integrations for Assembla
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175636_groups_assembla_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_bamboo_active`
-
-Count of groups with active integrations for Bamboo CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175647_groups_bamboo_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_bugzilla_active`
-
-Count of groups with active integrations for Bugzilla
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175659_groups_bugzilla_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_buildkite_active`
-
-Count of groups with active integrations for Buildkite
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175710_groups_buildkite_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_campfire_active`
-
-Count of groups with active integrations for Campfire
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175721_groups_campfire_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_confluence_active`
-
-Count of groups with active integrations for Confluence
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175733_groups_confluence_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_custom_issue_tracker_active`
-
-Count of groups with active integrations for a Custom Issue Tracker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175744_groups_custom_issue_tracker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_datadog_active`
-
-Count of groups with active integrations for Datadog
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182549_groups_datadog_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_discord_active`
-
-Count of groups with active integrations for Discord
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175755_groups_discord_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_drone_ci_active`
-
-Count of groups with active integrations for Drone CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175806_groups_drone_ci_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_emails_on_push_active`
-
-Count of groups with active integrations for Emails on Push
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175817_groups_emails_on_push_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_ewm_active`
-
-Count of groups with active integrations for EWM
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182616_groups_ewm_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_external_wiki_active`
-
-Count of groups with active integrations for External Wiki
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175828_groups_external_wiki_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_flowdock_active`
-
-Count of groups with active integrations for Flowdock
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175839_groups_flowdock_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_github_active`
-
-Count of groups with active integrations for GitHub
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175850_groups_github_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.groups_hangouts_chat_active`
-
-Count of groups with active integrations for Hangouts Chat
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175901_groups_hangouts_chat_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_hipchat_active`
-
-Count of groups with active integrations for HipChat
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175912_groups_hipchat_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_asana_active`
-
-Count of active groups inheriting integrations for Asana
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175632_groups_inheriting_asana_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_assembla_active`
-
-Count of active groups inheriting integrations for Assembla
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175644_groups_inheriting_assembla_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_bamboo_active`
-
-Count of active groups inheriting integrations for Bamboo CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175655_groups_inheriting_bamboo_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_bugzilla_active`
-
-Count of active groups inheriting integrations for Bugzilla
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175706_groups_inheriting_bugzilla_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_buildkite_active`
-
-Count of active groups inheriting integrations for Buildkite
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175717_groups_inheriting_buildkite_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_campfire_active`
-
-Count of active groups inheriting integrations for Campfire
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175729_groups_inheriting_campfire_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_confluence_active`
-
-Count of active groups inheriting integrations for Confluence
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175740_groups_inheriting_confluence_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_custom_issue_tracker_active`
-
-Count of active groups inheriting integrations for a Custom Issue Tracker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175751_groups_inheriting_custom_issue_tracker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_datadog_active`
-
-Count of active groups inheriting integrations for Datadog
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182557_groups_inheriting_datadog_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_discord_active`
-
-Count of active groups inheriting integrations for Discord
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175802_groups_inheriting_discord_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_drone_ci_active`
-
-Count of active groups inheriting integrations for Drone CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175813_groups_inheriting_drone_ci_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_emails_on_push_active`
-
-Count of active groups inheriting integrations for Emails on Push
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175824_groups_inheriting_emails_on_push_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_ewm_active`
-
-Count of active groups inheriting integrations for EWM
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182623_groups_inheriting_ewm_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_external_wiki_active`
-
-Count of active groups inheriting integrations for External Wiki
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175835_groups_inheriting_external_wiki_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_flowdock_active`
-
-Count of active groups inheriting integrations for Flowdock
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175846_groups_inheriting_flowdock_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_github_active`
-
-Count of active groups inheriting integrations for GitHub
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175857_groups_inheriting_github_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.groups_inheriting_hangouts_chat_active`
-
-Count of active groups inheriting integrations for Hangouts Chat
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175908_groups_inheriting_hangouts_chat_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_hipchat_active`
-
-Count of active groups inheriting integrations for HipChat
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175919_groups_inheriting_hipchat_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_irker_active`
-
-Count of active groups inheriting integrations for Irker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175930_groups_inheriting_irker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_jenkins_active`
-
-Count of active groups inheriting integrations for Jenkins
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175941_groups_inheriting_jenkins_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_jira_active`
-
-Count of active groups inheriting integrations for Jira
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175952_groups_inheriting_jira_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_mattermost_active`
-
-Count of active groups inheriting integrations for Mattermost
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180003_groups_inheriting_mattermost_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_mattermost_slash_commands_active`
-
-Count of active groups inheriting integrations for Mattermost (slash commands)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180014_groups_inheriting_mattermost_slash_commands_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_microsoft_teams_active`
-
-Count of active groups inheriting integrations for Microsoft Teams
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180025_groups_inheriting_microsoft_teams_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_mock_ci_active`
-
-Count of active groups inheriting integrations for Mock CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182732_groups_inheriting_mock_ci_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_mock_monitoring_active`
-
-Count of active groups inheriting integrations for Mock Monitoring
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182743_groups_inheriting_mock_monitoring_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_packagist_active`
-
-Count of active groups inheriting integrations for Packagist
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180036_groups_inheriting_packagist_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_pipelines_email_active`
-
-Count of active groups inheriting integrations for Pipeline Emails
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180047_groups_inheriting_pipelines_email_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_pivotaltracker_active`
-
-Count of active groups inheriting integrations for Pivotal Tracker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180058_groups_inheriting_pivotaltracker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_prometheus_active`
-
-Count of active groups inheriting integrations for Prometheus
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180940_groups_inheriting_prometheus_active.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_pushover_active`
-
-Count of active groups inheriting integrations for Pushover
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180109_groups_inheriting_pushover_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_redmine_active`
-
-Count of active groups inheriting integrations for Redmine
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180120_groups_inheriting_redmine_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_slack_active`
-
-Count of active groups inheriting integrations for Slack
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180131_groups_inheriting_slack_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_slack_slash_commands_active`
-
-Count of active groups inheriting integrations for Slack (slash commands)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180142_groups_inheriting_slack_slash_commands_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_teamcity_active`
-
-Count of active groups inheriting integrations for Teamcity CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180153_groups_inheriting_teamcity_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_unify_circuit_active`
-
-Count of active groups inheriting integrations for Unifiy Circuit
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180204_groups_inheriting_unify_circuit_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_webex_teams_active`
-
-Count of active groups inheriting integrations for Webex Teams
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180215_groups_inheriting_webex_teams_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_youtrack_active`
-
-Count of active groups inheriting integrations for YouTrack
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180226_groups_inheriting_youtrack_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_irker_active`
-
-Count of groups with active integrations for Irker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175923_groups_irker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_jenkins_active`
-
-Count of groups with active integrations for Jenkins
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175934_groups_jenkins_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_jira_active`
-
-Count of groups with active integrations for Jira
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175945_groups_jira_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_mattermost_active`
-
-Count of groups with active integrations for Mattermost
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175956_groups_mattermost_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_mattermost_slash_commands_active`
-
-Count of groups with active integrations for Mattermost (slash commands)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180006_groups_mattermost_slash_commands_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_microsoft_teams_active`
-
-Count of groups with active integrations for Microsoft Teams
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180018_groups_microsoft_teams_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_mock_ci_active`
-
-Count of groups with active integrations for Mock CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182724_groups_mock_ci_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_mock_monitoring_active`
-
-Count of groups with active integrations for Mock Monitoring
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182736_groups_mock_monitoring_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_packagist_active`
-
-Count of groups with active integrations for Packagist
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180029_groups_packagist_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_pipelines_email_active`
-
-Count of groups with active integrations for Pipeline Emails
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180040_groups_pipelines_email_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_pivotaltracker_active`
-
-Count of groups with active integrations for Pivotal Tracker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180051_groups_pivotaltracker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_prometheus_active`
-
-Count of groups with active integrations for Prometheus
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180933_groups_prometheus_active.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_pushover_active`
-
-Count of groups with active integrations for Pushover
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180102_groups_pushover_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_redmine_active`
-
-Count of groups with active integrations for Redmine
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180113_groups_redmine_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_slack_active`
-
-Count of groups with active integrations for Slack
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180124_groups_slack_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_slack_slash_commands_active`
-
-Count of groups with active integrations for Slack (slash commands)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180135_groups_slack_slash_commands_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_teamcity_active`
-
-Count of groups with active integrations for Teamcity CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180146_groups_teamcity_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_unify_circuit_active`
-
-Count of groups with active integrations for Unifiy Circuit
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180157_groups_unify_circuit_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_webex_teams_active`
-
-Count of groups with active integrations for Webex Teams
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180208_groups_webex_teams_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_youtrack_active`
-
-Count of groups with active integrations for YouTrack
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180219_groups_youtrack_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_create_0_cta_clicked`
-
-Total clicks on the create track's first email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510201919_in_product_marketing_email_create_0_cta_clicked.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_create_0_sent`
-
-Total sent emails of the create track's first email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510201537_in_product_marketing_email_create_0_sent.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_create_1_cta_clicked`
-
-Total clicks on the create track's second email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510202356_in_product_marketing_email_create_1_cta_clicked.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_create_1_sent`
-
-Total sent emails of the create track's second email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510202148_in_product_marketing_email_create_1_sent.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_create_2_cta_clicked`
-
-Total clicks on the create track's third email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510202724_in_product_marketing_email_create_2_cta_clicked.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_create_2_sent`
-
-Total sent emails of the create track's third email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510202604_in_product_marketing_email_create_2_sent.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_experience_0_sent`
-
-Total sent emails of the experience track's first email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210518081225_in_product_marketing_email_experience_0_sent.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_team_0_cta_clicked`
-
-Total clicks on the team track's first email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510203143_in_product_marketing_email_team_0_cta_clicked.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_team_0_sent`
-
-Total sent emails of the team track's first email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510203134_in_product_marketing_email_team_0_sent.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_team_1_cta_clicked`
-
-Total clicks on the team track's second email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510203203_in_product_marketing_email_team_1_cta_clicked.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_team_1_sent`
-
-Total sent emails of the team track's second email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510203153_in_product_marketing_email_team_1_sent.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_team_2_cta_clicked`
-
-Total clicks on the team track's third email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510203223_in_product_marketing_email_team_2_cta_clicked.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_team_2_sent`
-
-Total sent emails of the team track's third email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510203213_in_product_marketing_email_team_2_sent.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_trial_0_cta_clicked`
-
-Total clicks on the verify trial's first email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510203044_in_product_marketing_email_trial_0_cta_clicked.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_trial_0_sent`
-
-Total sent emails of the trial track's first email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510203035_in_product_marketing_email_trial_0_sent.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_trial_1_cta_clicked`
-
-Total clicks on the trial track's second email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510203104_in_product_marketing_email_trial_1_cta_clicked.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_trial_1_sent`
-
-Total sent emails of the trial track's second email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510203054_in_product_marketing_email_trial_1_sent.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_trial_2_cta_clicked`
-
-Total clicks on the trial track's third email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510203124_in_product_marketing_email_trial_2_cta_clicked.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_trial_2_sent`
-
-Total sent emails of the trial track's third email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510203114_in_product_marketing_email_trial_2_sent.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_verify_0_cta_clicked`
-
-Total clicks on the verify track's first email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510202943_in_product_marketing_email_verify_0_cta_clicked.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_verify_0_sent`
-
-Total sent emails of the verify track's first email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510202807_in_product_marketing_email_verify_0_sent.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_verify_1_cta_clicked`
-
-Total clicks on the verify track's second email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510203005_in_product_marketing_email_verify_1_cta_clicked.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_verify_1_sent`
-
-Total sent emails of the verify track's second email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510202955_in_product_marketing_email_verify_1_sent.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_verify_2_cta_clicked`
-
-Total clicks on the verify track's third email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510203025_in_product_marketing_email_verify_2_cta_clicked.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_verify_2_sent`
-
-Total sent emails of the verify track's third email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510203015_in_product_marketing_email_verify_2_sent.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_review_folder`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181916_in_review_folder.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.incident_issues`
-
-Count of incidents (issues where issue_type=incident)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180447_incident_issues.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.incident_labeled_issues`
-
-Count of all issues with the label=incident
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180451_incident_labeled_issues.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ingress_modsecurity_blocking`
-
-Whether or not ModSecurity is set to blocking mode
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175452_ingress_modsecurity_blocking.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ingress_modsecurity_disabled`
-
-Whether or not ModSecurity is disabled within Ingress
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175454_ingress_modsecurity_disabled.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ingress_modsecurity_logging`
-
-Whether or not ModSecurity is set to logging mode
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175450_ingress_modsecurity_logging.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ingress_modsecurity_not_installed`
-
-Whether or not ModSecurity has not been installed into the cluster
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175456_ingress_modsecurity_not_installed.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ingress_modsecurity_packets_anomalous`
-
-Cumulative count of packets identified as anomalous by ModSecurity since Usage Ping was last reported
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175444_ingress_modsecurity_packets_anomalous.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ingress_modsecurity_packets_processed`
-
-Cumulative count of packets processed by ModSecurity since Usage Ping was last reported
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175442_ingress_modsecurity_packets_processed.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ingress_modsecurity_statistics_unavailable`
-
-Whether or not ModSecurity statistics are unavailable
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175441_ingress_modsecurity_statistics_unavailable.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `removed`
-
-Tiers: `ultimate`
-
-### `counts.instance_clusters_disabled`
-
-Total GitLab Managed disabled clusters previously attached to the instance
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175248_instance_clusters_disabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instance_clusters_enabled`
-
-Total GitLab Managed clusters attached to the instance
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175240_instance_clusters_enabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_asana_active`
-
-Count of active instance-level integrations for Asana
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175628_instances_asana_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_assembla_active`
-
-Count of active instance-level integrations for Assembla
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175640_instances_assembla_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_bamboo_active`
-
-Count of active instance-level integrations for Bamboo CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175651_instances_bamboo_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_bugzilla_active`
-
-Count of active instance-level integrations for Bugzilla
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175702_instances_bugzilla_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_buildkite_active`
-
-Count of active instance-level integrations for Buildkite
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175714_instances_buildkite_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_campfire_active`
-
-Count of active instance-level integrations for Campfire
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175725_instances_campfire_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_confluence_active`
-
-Count of active instance-level integrations for Confluence
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175736_instances_confluence_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_custom_issue_tracker_active`
-
-Count of active instance-level integrations for a Custom Issue Tracker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175747_instances_custom_issue_tracker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_datadog_active`
-
-Count of active instance-level integrations for Datadog
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182553_instances_datadog_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_discord_active`
-
-Count of active instance-level integrations for Discord
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175758_instances_discord_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_drone_ci_active`
-
-Count of active instance-level integrations for Drone CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175809_instances_drone_ci_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_emails_on_push_active`
-
-Count of active instance-level integrations for Emails on Push
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175820_instances_emails_on_push_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_ewm_active`
-
-Count of active instance-level integrations for EWM
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182620_instances_ewm_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_external_wiki_active`
-
-Count of active instance-level integrations for External Wiki
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175831_instances_external_wiki_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_flowdock_active`
-
-Count of active instance-level integrations for Flowdock
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175842_instances_flowdock_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_github_active`
-
-Count of active instance-level integrations for GitHub
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175853_instances_github_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.instances_hangouts_chat_active`
-
-Count of active instance-level integrations for Hangouts Chat
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175904_instances_hangouts_chat_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_hipchat_active`
-
-Count of active instance-level integrations for HipChat
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175915_instances_hipchat_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_irker_active`
-
-Count of active instance-level integrations for Irker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175926_instances_irker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_jenkins_active`
-
-Count of active instance-level integrations for Jenkins
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175937_instances_jenkins_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_jira_active`
-
-Count of active instance-level integrations for Jira
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175948_instances_jira_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_mattermost_active`
-
-Count of active instance-level integrations for Mattermost
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175959_instances_mattermost_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_mattermost_slash_commands_active`
-
-Count of active instance-level integrations for Mattermost (slash commands)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180010_instances_mattermost_slash_commands_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_microsoft_teams_active`
-
-Count of active instance-level integrations for Microsoft Teams
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180021_instances_microsoft_teams_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_mock_ci_active`
-
-Count of active instance-level integrations for Mock CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182728_instances_mock_ci_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_mock_monitoring_active`
-
-Count of active instance-level integrations for Mock Monitoring
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182739_instances_mock_monitoring_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_packagist_active`
-
-Count of active instance-level integrations for Packagist
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180032_instances_packagist_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_pipelines_email_active`
-
-Count of active instance-level integrations for Pipeline Emails
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180043_instances_pipelines_email_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_pivotaltracker_active`
-
-Count of active instance-level integrations for Pivotal Tracker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180054_instances_pivotaltracker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_prometheus_active`
-
-Count of active instance-level integrations for Prometheus
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180936_instances_prometheus_active.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_pushover_active`
-
-Count of active instance-level integrations for Pushover
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180105_instances_pushover_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_redmine_active`
-
-Count of active instance-level integrations for Redmine
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180116_instances_redmine_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_slack_active`
-
-Count of active instance-level integrations for Slack
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180127_instances_slack_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_slack_slash_commands_active`
-
-Count of active instance-level integrations for Slack (slash commands)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180138_instances_slack_slash_commands_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_teamcity_active`
-
-Count of active instance-level integrations for Teamcity CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180149_instances_teamcity_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_unify_circuit_active`
-
-Count of active instance-level integrations for Unifiy Circuit
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180201_instances_unify_circuit_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_webex_teams_active`
-
-Count of active instance-level integrations for Webex Teams
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180212_instances_webex_teams_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_youtrack_active`
-
-Count of active instance-level integrations for YouTrack
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180223_instances_youtrack_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.issues`
-
-Count of Issues created
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181102_issues.yml)
-
-Group: `group::plan`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.issues_created_from_alerts`
-
-Count of issues created automatically on alerts from GitLab-Managed Prometheus
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180441_issues_created_from_alerts.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.issues_created_from_gitlab_error_tracking_ui`
-
-Count of issues manually created from the GitLab UI on Sentry errors
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180434_issues_created_from_gitlab_error_tracking_ui.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.issues_created_gitlab_alerts`
-
-Count of all issues created from GitLab alerts (bot and non-bot)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180443_issues_created_gitlab_alerts.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.issues_created_manually_from_alerts`
-
-Count of issues created manually by non-bot users from GitLab alerts
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180445_issues_created_manually_from_alerts.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.issues_using_zoom_quick_actions`
-
-Count of issues where a user have added AND removed a zoom meeting using slash commands
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180438_issues_using_zoom_quick_actions.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.issues_with_associated_zoom_link`
-
-Count of issues where a user has linked a Zoom meeting
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180436_issues_with_associated_zoom_link.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.issues_with_embedded_grafana_charts_approx`
-
-Count of issues where a user has embedded a Grafana chart
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180440_issues_with_embedded_grafana_charts_approx.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.issues_with_health_status`
-
-Count of issues with health status
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216181210_issues_with_health_status.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.jira_imports_projects_count`
-
-Count of Projects that imported Issues from Jira
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181259_jira_imports_projects_count.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.jira_imports_total_imported_count`
-
-Count of Jira imports completed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181258_jira_imports_total_imported_count.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.jira_imports_total_imported_issues_count`
-
-Count of total issues imported via the Jira Importer
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181301_jira_imports_total_imported_issues_count.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.keys`
-
-Number of keys.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180752_keys.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.kubernetes_agent_gitops_sync`
-
-Count of events when an Agent is asked to synchronize the manifests or its configuration
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175328_kubernetes_agent_gitops_sync.yml)
-
-Group: `group::configure`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.kubernetes_agent_k8s_api_proxy_request`
-
-Count of Kubernetes API proxy requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210505015532_kubernetes_agent_k8s_api_proxy_request.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.kubernetes_agents`
-
-Count of Kubernetes registered agents
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175316_kubernetes_agents.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.kubernetes_agents_with_token`
-
-Count of Kubernetes agents with at least one token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175318_kubernetes_agents_with_token.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.label_lists`
-
-Count of label lists created on Boards
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181104_label_lists.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.labels`
-
-Count of Labels
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181111_labels.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ldap_group_links`
-
-Number of groups that are synced via LDAP group sync `https://docs.gitlab.com/ee/user/group/index.html#manage-group-memberships-via-ldap`
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216174822_ldap_group_links.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.ldap_keys`
-
-Number of keys synced as part of LDAP `https://docs.gitlab.com/ee/administration/auth/ldap/#ldap-sync-configuration-settings`
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216174824_ldap_keys.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.ldap_users`
-
-Number of users that are linked to LDAP
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216174826_ldap_users.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.lfs_objects`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181009_lfs_objects.yml)
-
-Group: `group::create`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.license_management_jobs`
-
-Count of License Scanning jobs run
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210204124854_license_management_jobs.yml)
-
-Group: `group::composition analysis`
-
-Data Category: `Subscription`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.licenses_list_views`
-
-Count to License List page views
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210216175210_licenses_list_views.yml)
-
-Group: `group::composition analysis`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.merge_request_comment`
-
-Count of the number of merge request comments
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175041_merge_request_comment.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.merge_request_create`
-
-Count of the number of merge requests created
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175043_merge_request_create.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.merge_requests`
-
-Count of the number of merge requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175039_merge_requests.yml)
-
-Group: `group::code review`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.merged_merge_requests_using_approval_rules`
-
-Count of merge requests merged using approval rules
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175206_merged_merge_requests_using_approval_rules.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.milestone_lists`
-
-Count of milestone lists created on Boards
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216181106_milestone_lists.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.milestones`
-
-Count of milestones created
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181108_milestones.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.navbar_searches`
-
-Total Searches using the navbar for All Basic Search and Advanced Search in self-managed and SaaS
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180414_navbar_searches.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.network_policy_drops`
-
-Cumulative count of packets dropped by Cilium (Container Network Security) since Usage Ping was last reported
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175448_network_policy_drops.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.network_policy_forwards`
-
-Cumulative count of packets forwarded by Cilium (Container Network Security) since Usage Ping was last reported
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175446_network_policy_forwards.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.notes`
-
-Count of Notes across all objects that use them
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181113_notes.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.operations_dashboard_default_dashboard`
-
-Active users with enabled operations dashboard
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180942_operations_dashboard_default_dashboard.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.operations_dashboard_users_with_projects_added`
-
-Active users with projects on operations dashboard
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180944_operations_dashboard_users_with_projects_added.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_composer_delete_package`
-
-A count of Composer packages that have been deleted
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182855_package_events_i_package_composer_delete_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_composer_pull_package`
-
-A count of Composer packages that have been downloaded
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182857_package_events_i_package_composer_pull_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_composer_push_package`
-
-A count of Composer packages that have been published
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182859_package_events_i_package_composer_push_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_conan_delete_package`
-
-A count of Conan packages that have been deleted
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182901_package_events_i_package_conan_delete_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_conan_pull_package`
-
-A count of Conan packages that have been downloaded
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182903_package_events_i_package_conan_pull_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_conan_push_package`
-
-A count of Conan packages that have been published
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182905_package_events_i_package_conan_push_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_container_delete_package`
-
-A count of container images that have been deleted
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182907_package_events_i_package_container_delete_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_container_pull_package`
-
-A count of container images that have been downloaded
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182909_package_events_i_package_container_pull_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_container_push_package`
-
-A count of container images that have been published
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182911_package_events_i_package_container_push_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_debian_delete_package`
-
-A count of Debian packages that have been deleted
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182913_package_events_i_package_debian_delete_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_debian_pull_package`
-
-A count of Debian packages that have been downloaded
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182915_package_events_i_package_debian_pull_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_debian_push_package`
-
-A count of Debian packages that have been published
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182917_package_events_i_package_debian_push_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_delete_package`
-
-A count of packages that have been deleted
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182919_package_events_i_package_delete_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_delete_package_by_deploy_token`
-
-A count of packages that have been deleted using a Deploy Token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182921_package_events_i_package_delete_package_by_deploy_token.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_delete_package_by_guest`
-
-A count of packages that have been deleted using a Guest
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182923_package_events_i_package_delete_package_by_guest.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_delete_package_by_user`
-
-A count of packages that have been deleted using a logged in user
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182925_package_events_i_package_delete_package_by_user.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_generic_delete_package`
-
-A count of generic packages that have been deleted
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182927_package_events_i_package_generic_delete_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_generic_pull_package`
-
-A count of generic packages that have been downloaded
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182929_package_events_i_package_generic_pull_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_generic_push_package`
-
-A count of generic packages that have been published
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182931_package_events_i_package_generic_push_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_golang_delete_package`
-
-A count of Go modules that have been deleted
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182933_package_events_i_package_golang_delete_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_golang_pull_package`
-
-A count of Go modules that have been downloaded
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182934_package_events_i_package_golang_pull_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_golang_push_package`
-
-A count of Go modules that have been published
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182936_package_events_i_package_golang_push_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_helm_pull_package`
-
-Total count of pull Helm packages events
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210517073546_package_events_i_package_helm_pull_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_helm_push_package`
-
-The total count of Helm packages that have been published.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210625095025_package_events_i_package_helm_push_package.yml)
-
-Group: `group::package`
-
-Status: `implemented`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_maven_delete_package`
-
-A count of Maven packages that have been deleted
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182938_package_events_i_package_maven_delete_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_maven_pull_package`
-
-A count of Maven packages that have been downloaded
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182940_package_events_i_package_maven_pull_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_maven_push_package`
-
-A count of Maven packages that have been published
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182942_package_events_i_package_maven_push_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_npm_delete_package`
-
-A count of npm packages that have been deleted
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182944_package_events_i_package_npm_delete_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_npm_pull_package`
-
-A count of npm packages that have been downloaded
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182946_package_events_i_package_npm_pull_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_npm_push_package`
-
-A count of npm packages that have been published
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182948_package_events_i_package_npm_push_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_nuget_delete_package`
-
-A count of NuGet packages that have been deleted
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182950_package_events_i_package_nuget_delete_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_nuget_pull_package`
-
-A count of NuGet packages that have been downloaded
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182952_package_events_i_package_nuget_pull_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_nuget_push_package`
-
-A count of NuGet packages that have been published
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182954_package_events_i_package_nuget_push_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_pull_package`
-
-A count of packages that have been downloaded from the package registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182956_package_events_i_package_pull_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_pull_package_by_deploy_token`
-
-A count of packages that have been downloaded from the package registry using a Deploy Token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182958_package_events_i_package_pull_package_by_deploy_token.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_pull_package_by_guest`
-
-A count of packages that have been downloaded from the package registry by a guest
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183000_package_events_i_package_pull_package_by_guest.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_pull_package_by_user`
-
-A count of packages that have been downloaded from the package registry by a user
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183002_package_events_i_package_pull_package_by_user.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_push_package`
-
-A count of packages that have been published to the package registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183004_package_events_i_package_push_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_push_package_by_deploy_token`
-
-A count of packages that have been published to the package registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183005_package_events_i_package_push_package_by_deploy_token.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_push_package_by_guest`
-
-A count of packages that have been published to the package registry by a Guest
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183007_package_events_i_package_push_package_by_guest.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_push_package_by_user`
-
-A count of packages that have been published to the package registry by a user
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183009_package_events_i_package_push_package_by_user.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_pypi_delete_package`
-
-A count of Python packages that have been deleted from the package registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183011_package_events_i_package_pypi_delete_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_pypi_pull_package`
-
-A count of Python packages that have been downloaded from the package registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183013_package_events_i_package_pypi_pull_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_pypi_push_package`
-
-A count of Python packages that have been published to the package registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183015_package_events_i_package_pypi_push_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_rubygems_delete_package`
-
-Total count of RubyGems packages delete events
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210303153000_package_events_i_package_rubygems_delete_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_rubygems_pull_package`
-
-Total count of pull RubyGems packages events
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210303153002_package_events_i_package_rubygems_pull_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_rubygems_push_package`
-
-Total count of push RubyGems packages events
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210303153004_package_events_i_package_rubygems_push_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_tag_delete_package`
-
-A count of package tags that have been deleted from the package registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183017_package_events_i_package_tag_delete_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_tag_pull_package`
-
-A count of package tags that have been downloaded from the package registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183019_package_events_i_package_tag_pull_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_tag_push_package`
-
-A count of package tags that have been published to the package registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183021_package_events_i_package_tag_push_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_terraform_module_delete_package`
-
-Total count of Terraform Module packages delete events
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210410012200_package_events_i_package_terraform_module_delete_package.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_terraform_module_pull_package`
-
-Total count of pull Terraform Module packages events
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210410012202_package_events_i_package_terraform_module_pull_package.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_terraform_module_push_package`
-
-Total count of push Terraform Module packages events
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210410012204_package_events_i_package_terraform_module_push_package.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.packages`
-
-The total number of packages published to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181012_packages.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.pages_domains`
-
-Total GitLab Pages domains
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181946_pages_domains.yml)
-
-Group: `group::release management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.personal_snippets`
-
-Count of personal Snippets
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180239_personal_snippets.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.pod_logs_usages_total`
-
-Count the total number of log views
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175021_pod_logs_usages_total.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`
-
-### `counts.pool_repositories`
-
-Count of unique object pool repositories for fork deduplication
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180410_pool_repositories.yml)
-
-Group: `group::gitaly`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.productivity_analytics_views`
-
-Total visits to /groups/:group/-/analytics/productivity_analytics all time
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216174834_productivity_analytics_views.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.project_clusters_disabled`
-
-Total GitLab Managed disabled clusters previously attached to projects
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175244_project_clusters_disabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.project_clusters_enabled`
-
-Total GitLab Managed clusters attached to projects
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175236_project_clusters_enabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.project_snippets`
-
-Count of project Snippets
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180241_project_snippets.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects`
-
-Count of Projects created
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181254_projects.yml)
-
-Group: `group::project management`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_asana_active`
-
-Count of projects with active integrations for Asana
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175623_projects_asana_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_assembla_active`
-
-Count of projects with active integrations for Assembla
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175634_projects_assembla_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_bamboo_active`
-
-Count of projects with active integrations for Bamboo CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175645_projects_bamboo_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_bugzilla_active`
-
-Count of projects with active integrations for Bugzilla
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175657_projects_bugzilla_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_buildkite_active`
-
-Count of projects with active integrations for Buildkite
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175708_projects_buildkite_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_campfire_active`
-
-Count of projects with active integrations for Campfire
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175719_projects_campfire_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_confluence_active`
-
-Count of projects with active integrations for Confluence
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175731_projects_confluence_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_creating_incidents`
-
-Counts of Projects that have incident issues, regardless of status.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180453_projects_creating_incidents.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_custom_issue_tracker_active`
-
-Count of projects with active integrations for a Custom Issue Tracker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175742_projects_custom_issue_tracker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_datadog_active`
-
-Count of projects with active integrations for Datadog
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182547_projects_datadog_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_discord_active`
-
-Count of projects with active integrations for Discord
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175753_projects_discord_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_drone_ci_active`
-
-Count of projects with active integrations for Drone CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175804_projects_drone_ci_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_emails_on_push_active`
-
-Count of projects with active integrations for Emails on Push
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175815_projects_emails_on_push_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_ewm_active`
-
-Count of projects with active integrations for EWM
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182614_projects_ewm_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_external_wiki_active`
-
-Count of projects with active integrations for External Wiki
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175826_projects_external_wiki_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_flowdock_active`
-
-Count of projects with active integrations for Flowdock
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175837_projects_flowdock_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_github_active`
-
-Count of projects with active integrations for GitHub
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175848_projects_github_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.projects_hangouts_chat_active`
-
-Count of projects with active integrations for Hangouts Chat
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175859_projects_hangouts_chat_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_hipchat_active`
-
-Count of projects with active integrations for HipChat
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175910_projects_hipchat_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_imported_from_github`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180628_projects_imported_from_github.yml)
-
-Group: `group::import`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.projects_inheriting_asana_active`
-
-Count of active projects inheriting integrations for Asana
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175630_projects_inheriting_asana_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_assembla_active`
-
-Count of active projects inheriting integrations for Assembla
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175642_projects_inheriting_assembla_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_bamboo_active`
-
-Count of active projects inheriting integrations for Bamboo CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175653_projects_inheriting_bamboo_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_bugzilla_active`
-
-Count of active projects inheriting integrations for Bugzilla
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175704_projects_inheriting_bugzilla_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_buildkite_active`
-
-Count of active projects inheriting integrations for Buildkite
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175716_projects_inheriting_buildkite_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_campfire_active`
-
-Count of active projects inheriting integrations for Campfire
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175727_projects_inheriting_campfire_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_confluence_active`
-
-Count of active projects inheriting integrations for Confluence
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175738_projects_inheriting_confluence_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_custom_issue_tracker_active`
-
-Count of active projects inheriting integrations for a Custom Issue Tracker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175749_projects_inheriting_custom_issue_tracker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_datadog_active`
-
-Count of active projects inheriting integrations for Datadog
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182555_projects_inheriting_datadog_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_discord_active`
-
-Count of active projects inheriting integrations for Discord
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175800_projects_inheriting_discord_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_drone_ci_active`
-
-Count of active projects inheriting integrations for Drone CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175811_projects_inheriting_drone_ci_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_emails_on_push_active`
-
-Count of active projects inheriting integrations for Emails on Push
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175822_projects_inheriting_emails_on_push_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_ewm_active`
-
-Count of active projects inheriting integrations for EWM
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182622_projects_inheriting_ewm_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_external_wiki_active`
-
-Count of active projects inheriting integrations for External Wiki
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175833_projects_inheriting_external_wiki_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_flowdock_active`
-
-Count of active projects inheriting integrations for Flowdock
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175844_projects_inheriting_flowdock_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_github_active`
-
-Count of active projects inheriting integrations for GitHub
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175855_projects_inheriting_github_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.projects_inheriting_hangouts_chat_active`
-
-Count of active projects inheriting integrations for Hangouts Chat
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175906_projects_inheriting_hangouts_chat_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_hipchat_active`
-
-Count of active projects inheriting integrations for HipChat
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175917_projects_inheriting_hipchat_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_irker_active`
-
-Count of active projects inheriting integrations for Irker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175928_projects_inheriting_irker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_jenkins_active`
-
-Count of active projects inheriting integrations for Jenkins
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175939_projects_inheriting_jenkins_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_jira_active`
-
-Count of active projects inheriting integrations for Jira
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175950_projects_inheriting_jira_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_mattermost_active`
-
-Count of active projects inheriting integrations for Mattermost
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180001_projects_inheriting_mattermost_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_mattermost_slash_commands_active`
-
-Count of active projects inheriting integrations for Mattermost (slash commands)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180012_projects_inheriting_mattermost_slash_commands_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_microsoft_teams_active`
-
-Count of active projects inheriting integrations for Microsoft Teams
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180023_projects_inheriting_microsoft_teams_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_mock_ci_active`
-
-Count of active projects inheriting integrations for Mock CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182730_projects_inheriting_mock_ci_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_mock_monitoring_active`
-
-Count of active projects inheriting integrations for Mock Monitoring
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182741_projects_inheriting_mock_monitoring_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_packagist_active`
-
-Count of active projects inheriting integrations for Packagist
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180034_projects_inheriting_packagist_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_pipelines_email_active`
-
-Count of active projects inheriting integrations for Pipeline Emails
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180045_projects_inheriting_pipelines_email_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_pivotaltracker_active`
-
-Count of active projects inheriting integrations for Pivotal Tracker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180056_projects_inheriting_pivotaltracker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_prometheus_active`
-
-Count of active projects inheriting integrations for Prometheus
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180938_projects_inheriting_prometheus_active.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_pushover_active`
-
-Count of active projects inheriting integrations for Pushover
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180107_projects_inheriting_pushover_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_redmine_active`
-
-Count of active projects inheriting integrations for Redmine
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180118_projects_inheriting_redmine_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_slack_active`
-
-Count of active projects inheriting integrations for Slack
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180129_projects_inheriting_slack_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_slack_slash_commands_active`
-
-Count of active projects inheriting integrations for Slack (slash commands)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180140_projects_inheriting_slack_slash_commands_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_teamcity_active`
-
-Count of active projects inheriting integrations for Teamcity CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180151_projects_inheriting_teamcity_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_unify_circuit_active`
-
-Count of active projects inheriting integrations for Unifiy Circuit
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180203_projects_inheriting_unify_circuit_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_webex_teams_active`
-
-Count of active projects inheriting integrations for Webex Teams
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180214_projects_inheriting_webex_teams_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_youtrack_active`
-
-Count of active projects inheriting integrations for YouTrack
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180225_projects_inheriting_youtrack_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_irker_active`
-
-Count of projects with active integrations for Irker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175921_projects_irker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_jenkins_active`
-
-Count of projects with active integrations for Jenkins
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175932_projects_jenkins_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_jira_active`
-
-Count of projects with active integrations for Jira
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175943_projects_jira_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_jira_cloud_active`
-
-Count of active integrations with Jira Cloud (Saas)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180230_projects_jira_cloud_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_jira_dvcs_cloud_active`
-
-Count of active integrations with Jira Cloud (DVCS Connector)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180232_projects_jira_dvcs_cloud_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_jira_dvcs_server_active`
-
-Count of active integrations with Jira Software (DVCS connector)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180234_projects_jira_dvcs_server_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_jira_issuelist_active`
-
-Total Jira Issue feature enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180236_projects_jira_issuelist_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.projects_jira_server_active`
-
-Count of active integrations with Jira Software (server)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180228_projects_jira_server_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_mattermost_active`
-
-Count of projects with active integrations for Mattermost
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175954_projects_mattermost_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_mattermost_slash_commands_active`
-
-Count of projects with active integrations for Mattermost (slash commands)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180005_projects_mattermost_slash_commands_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_microsoft_teams_active`
-
-Count of projects with active integrations for Microsoft Teams
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180016_projects_microsoft_teams_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_mirrored_with_pipelines_enabled`
-
-Projects with repository mirroring enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216181920_projects_mirrored_with_pipelines_enabled.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.projects_mock_ci_active`
-
-Count of projects with active integrations for Mock CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182722_projects_mock_ci_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_mock_monitoring_active`
-
-Count of projects with active integrations for Mock Monitoring
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182734_projects_mock_monitoring_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_packagist_active`
-
-Count of projects with active integrations for Packagist
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180027_projects_packagist_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_pipelines_email_active`
-
-Count of projects with active integrations for Pipeline Emails
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180038_projects_pipelines_email_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_pivotaltracker_active`
-
-Count of projects with active integrations for Pivotal Tracker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180049_projects_pivotaltracker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_prometheus_active`
-
-Count of projects with active integrations for Prometheus
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180931_projects_prometheus_active.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_pushover_active`
-
-Count of projects with active integrations for Pushover
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180100_projects_pushover_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_redmine_active`
-
-Count of projects with active integrations for Redmine
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180111_projects_redmine_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_reporting_ci_cd_back_to_github`
-
-Projects with a GitHub service pipeline enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182212_projects_reporting_ci_cd_back_to_github.yml)
-
-Group: `group::continuous_integration`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.projects_slack_active`
-
-Count of projects with active integrations for Slack
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180122_projects_slack_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_slack_slash_commands_active`
-
-Count of projects with active integrations for Slack (slash commands)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180133_projects_slack_slash_commands_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_teamcity_active`
-
-Count of projects with active integrations for Teamcity CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180144_projects_teamcity_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_unify_circuit_active`
-
-Count of projects with active integrations for Unifiy Circuit
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180155_projects_unify_circuit_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_webex_teams_active`
-
-Count of projects with active integrations for Webex Teams
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180206_projects_webex_teams_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_alerts_created`
-
-Count of projects with alerts created in given time period
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180458_projects_with_alerts_created.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_alerts_service_enabled`
-
-Count of projects that have enabled the Alerts service
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180456_projects_with_alerts_service_enabled.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_enabled_alert_integrations`
-
-Count of projects with at least 1 enabled integration
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180500_projects_with_enabled_alert_integrations.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_error_tracking_enabled`
-
-Count of projects that have enabled Error tracking via Sentry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180454_projects_with_error_tracking_enabled.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_disabled`
-
-The number of projects with cleanup policy for tags turned off
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181014_projects_with_expiration_policy_disabled.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled`
-
-A count of projects with the cleanup policy for tags turned on
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181016_projects_with_expiration_policy_enabled.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_cadence_set_to_14d`
-
-A count of projects with the cleanup policy set to run every 14 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181033_projects_with_expiration_policy_enabled_with_cadence_set_to_14d.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_cadence_set_to_1d`
-
-A count of projects with the cleanup policy set to run every day
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181029_projects_with_expiration_policy_enabled_with_cadence_set_to_1d.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_cadence_set_to_1month`
-
-A count of projects with the cleanup policy set to run monthly
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181035_projects_with_expiration_policy_enabled_with_cadence_set_to_1month.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_cadence_set_to_3month`
-
-A count of projects with the cleanup policy set to run every 3 months
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181037_projects_with_expiration_policy_enabled_with_cadence_set_to_3month.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_cadence_set_to_7d`
-
-A count of projects with the cleanup policy set to run every 7 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181031_projects_with_expiration_policy_enabled_with_cadence_set_to_7d.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_keep_n_set_to_1`
-
-A count of projects with the cleanup policy set to keep 1 tag
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181018_projects_with_expiration_policy_enabled_with_keep_n_set_to_1.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_keep_n_set_to_10`
-
-A count of projects with the cleanup policy set to keep 10 tags
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181022_projects_with_expiration_policy_enabled_with_keep_n_set_to_10.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_keep_n_set_to_100`
-
-A count of projects with the cleanup policy set to keep 100 tags
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181027_projects_with_expiration_policy_enabled_with_keep_n_set_to_100.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_keep_n_set_to_25`
-
-A count of projects with the cleanup policy set to keep 25 tags
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181024_projects_with_expiration_policy_enabled_with_keep_n_set_to_25.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_keep_n_set_to_5`
-
-A count of projects with the cleanup policy set to keep 5 tags
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181020_projects_with_expiration_policy_enabled_with_keep_n_set_to_5.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_keep_n_set_to_50`
-
-A count of projects with the cleanup policy set to keep 50 tags
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181025_projects_with_expiration_policy_enabled_with_keep_n_set_to_50.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_keep_n_unset`
-
-A count of projects with the cleanup policy with the number of tags to keep unset
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181046_projects_with_expiration_policy_enabled_with_keep_n_unset.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_older_than_set_to_14d`
-
-A count of projects with the cleanup policy set delete tags older than 14 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181040_projects_with_expiration_policy_enabled_with_older_than_set_to_14d.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_older_than_set_to_30d`
-
-A count of projects with the cleanup policy set delete tags older than 30 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181042_projects_with_expiration_policy_enabled_with_older_than_set_to_30d.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_older_than_set_to_7d`
-
-A count of projects with the cleanup policy set delete tags older than 7 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181038_projects_with_expiration_policy_enabled_with_older_than_set_to_7d.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_older_than_set_to_90d`
-
-A count of projects with the cleanup policy set delete tags older than 90 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181044_projects_with_expiration_policy_enabled_with_older_than_set_to_90d.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_older_than_unset`
-
-A count of projects with the cleanup policy with the number of tags to delete unset
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181048_projects_with_expiration_policy_enabled_with_older_than_unset.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_packages`
-
-Projects with package registry enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181011_projects_with_packages.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_prometheus_alerts`
-
-Projects with Prometheus alerting enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175019_projects_with_prometheus_alerts.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`
-
-### `counts.projects_with_repositories_enabled`
-
-Count of users creating projects that have a matching Git repository, result of a Git push action.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216181959_projects_with_repositories_enabled.yml)
-
-Group: `group::source code`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.projects_with_terraform_reports`
-
-Count of projects with Terraform MR reports
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175320_projects_with_terraform_reports.yml)
-
-Group: `group::configure`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_terraform_states`
-
-Count of projects with GitLab Managed Terraform State
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175322_projects_with_terraform_states.yml)
-
-Group: `group::configure`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_tracing_enabled`
-
-Projects with tracing enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180929_projects_with_tracing_enabled.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_youtrack_active`
-
-Count of projects with active integrations for YouTrack
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180217_projects_youtrack_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.protected_branches`
-
-Count of total protected branches
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182001_protected_branches.yml)
-
-Group: `group::source code`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.protected_branches_except_default`
-
-Count of branches that have been protected and are not the default branch
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182454_protected_branches_except_default.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.releases`
-
-Unique release tags
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181918_releases.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.remote_mirrors`
-
-Count of total remote mirrors. Includes both push and pull mirrors
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182002_remote_mirrors.yml)
-
-Group: `group::source code`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.requirement_test_reports_ci`
-
-Count of requirement test reports created from CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175032_requirement_test_reports_ci.yml)
-
-Group: `group::certify`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.requirement_test_reports_manual`
-
-Count of requirement test reports created manually
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175030_requirement_test_reports_manual.yml)
-
-Group: `group::certify`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.requirements_created`
-
-Count of requirements created
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175028_requirements_created.yml)
-
-Group: `group::certify`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.requirements_with_test_report`
-
-Count of requirements having a test report
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175034_requirements_with_test_report.yml)
-
-Group: `group::certify`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.sast_jobs`
-
-Count of SAST CI jobs for the month. Job names ending in '-sast'
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182112_sast_jobs.yml)
-
-Group: `group::static analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.secret_detection_jobs`
-
-Count of all 'secret-detection' CI jobs.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182114_secret_detection_jobs.yml)
-
-Group: `group::static analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.service_desk_enabled_projects`
-
-Count of service desk enabled projects
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175024_service_desk_enabled_projects.yml)
-
-Group: `group::certify`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.service_desk_issues`
-
-Count of service desk issues
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175026_service_desk_issues.yml)
-
-Group: `group::certify`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.snippet_comment`
-
-Count of comments on Snippets
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180253_snippet_comment.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.snippet_create`
-
-Count of newly created Snippets
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180255_snippet_create.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.snippet_update`
-
-Count of updates to existing Snippets
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180257_snippet_update.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.snippets`
-
-Count of all Snippets
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180306_snippets.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.source_code_pushes`
-
-Count of total Git push operations
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182006_source_code_pushes.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.static_site_editor_commits`
-
-Count of commits created from the Static Site Editor
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180301_static_site_editor_commits.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.static_site_editor_merge_requests`
-
-Count of merge requests created via Static Site Editor
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180303_static_site_editor_merge_requests.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.static_site_editor_views`
-
-Count of Static Site Editor views
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180259_static_site_editor_views.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.status_page_incident_publishes`
-
-Cumulative count of usages of publish operation
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180502_status_page_incident_publishes.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.status_page_incident_unpublishes`
-
-Cumulative count of usages of unpublish operation
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180504_status_page_incident_unpublishes.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.status_page_issues`
-
-Issues published to a Status Page
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180507_status_page_issues.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.status_page_projects`
-
-Projects with status page enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180506_status_page_projects.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.successful_deployments`
-
-Total successful deployments
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181911_successful_deployments.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.suggestions`
-
-Count of all comments that contain suggested changes
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175037_suggestions.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.template_repositories`
-
-Count of total repo templates used to aggregate all file templates
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182008_template_repositories.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.templates_asana_active`
-
-Count of active service templates for Asana
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175627_templates_asana_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_assembla_active`
-
-Count of active service templates for Assembla
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175638_templates_assembla_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_bamboo_active`
-
-Count of active service templates for Bamboo CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175649_templates_bamboo_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_bugzilla_active`
-
-Count of active service templates for Bugzilla
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175701_templates_bugzilla_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_buildkite_active`
-
-Count of active service templates for Buildkite
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175712_templates_buildkite_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_campfire_active`
-
-Count of active service templates for Campfire
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175723_templates_campfire_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_confluence_active`
-
-Count of active service templates for Confluence
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175734_templates_confluence_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_custom_issue_tracker_active`
-
-Count of active service templates for a Custom Issue Tracker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175745_templates_custom_issue_tracker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_datadog_active`
-
-Count of active service templates for Datadog
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182551_templates_datadog_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_discord_active`
-
-Count of active service templates for Discord
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175756_templates_discord_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_drone_ci_active`
-
-Count of active service templates for Drone CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175807_templates_drone_ci_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_emails_on_push_active`
-
-Count of active service templates for Emails on Push
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175818_templates_emails_on_push_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_ewm_active`
-
-Count of active service templates for EWM
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182618_templates_ewm_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_external_wiki_active`
-
-Count of active service templates for External Wiki
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175829_templates_external_wiki_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_flowdock_active`
-
-Count of active service templates for Flowdock
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175840_templates_flowdock_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_github_active`
-
-Count of active service templates for GitHub
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175851_templates_github_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.templates_hangouts_chat_active`
-
-Count of active service templates for Hangouts Chat
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175902_templates_hangouts_chat_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_hipchat_active`
-
-Count of active service templates for HipChat
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175913_templates_hipchat_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_irker_active`
-
-Count of active service templates for Irker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175924_templates_irker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_jenkins_active`
-
-Count of active service templates for Jenkins
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175935_templates_jenkins_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_jira_active`
-
-Count of active service templates for Jira
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175946_templates_jira_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_mattermost_active`
-
-Count of active service templates for Mattermost
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175957_templates_mattermost_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_mattermost_slash_commands_active`
-
-Count of active service templates for Mattermost (slash commands)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180008_templates_mattermost_slash_commands_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_microsoft_teams_active`
-
-Count of active service templates for Microsoft Teams
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180019_templates_microsoft_teams_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_mock_ci_active`
-
-Count of active service templates for Mock CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182726_templates_mock_ci_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_mock_monitoring_active`
-
-Count of active service templates for Mock Monitoring
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182738_templates_mock_monitoring_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_packagist_active`
-
-Count of active service templates for Packagist
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180030_templates_packagist_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_pipelines_email_active`
-
-Count of active service templates for Pipeline Emails
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180041_templates_pipelines_email_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_pivotaltracker_active`
-
-Count of active service templates for Pivotal Tracker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180052_templates_pivotaltracker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_prometheus_active`
-
-Count of active service templates for Prometheus
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180934_templates_prometheus_active.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_pushover_active`
-
-Count of active service templates for Pushover
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180104_templates_pushover_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_redmine_active`
-
-Count of active service templates for Redmine
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180115_templates_redmine_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_slack_active`
-
-Count of active service templates for Slack
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180126_templates_slack_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_slack_slash_commands_active`
-
-Count of active service templates for Slack (slash commands)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180137_templates_slack_slash_commands_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_teamcity_active`
-
-Count of active service templates for Teamcity CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180148_templates_teamcity_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_unify_circuit_active`
-
-Count of active service templates for Unifiy Circuit
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180159_templates_unify_circuit_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_webex_teams_active`
-
-Count of active service templates for Webex Teams
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180210_templates_webex_teams_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_youtrack_active`
-
-Count of active service templates for YouTrack
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180221_templates_youtrack_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.terraform_reports`
-
-Count of Terraform MR reports generated
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175324_terraform_reports.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.terraform_states`
-
-Count of GitLab Managed Terraform States
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175326_terraform_states.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.todos`
-
-Count of todos created
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181256_todos.yml)
-
-Group: `group::project management`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.uploads`
-
-Count of Uploads via Notes and Descriptions
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181109_uploads.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.user_preferences_group_overview_details`
-
-Count of users who set personal preference to see Details on Group information page
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182203_user_preferences_group_overview_details.yml)
-
-Group: `group::threat insights`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.user_preferences_group_overview_security_dashboard`
-
-Count of users who set personal preference to see Security Dashboard on Group information page
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182205_user_preferences_group_overview_security_dashboard.yml)
-
-Group: `group::threat insights`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.user_preferences_user_gitpod_enabled`
-
-Count of users with the GitPod integration enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180304_user_preferences_user_gitpod_enabled.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.web_hooks`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175621_web_hooks.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.web_ide_commits`
-
-Count of commits made from the Web IDE
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180242_web_ide_commits.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.web_ide_merge_requests`
-
-Count of merge requests created from the Web IDE
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180246_web_ide_merge_requests.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.web_ide_pipelines`
-
-Count of Pipeline tab views in the Web IDE
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180252_web_ide_pipelines.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.web_ide_previews`
-
-Count of Live Preview tab views in the Web IDE
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180248_web_ide_previews.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.web_ide_terminals`
-
-Count of Web Terminal tab views in the Web IDE
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180250_web_ide_terminals.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.web_ide_views`
-
-Count of views of the Web IDE
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180244_web_ide_views.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.wiki_pages_create`
-
-Count of all Wiki pages created
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180734_wiki_pages_create.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.wiki_pages_delete`
-
-Count of all Wiki pages deleted
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180738_wiki_pages_delete.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.wiki_pages_update`
-
-Count of all Wiki page updates
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180736_wiki_pages_update.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.wiki_pages_view`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183023_wiki_pages_view.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts_monthly.aggregated_metrics.code_review_category_monthly_active_users`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210427102618_code_review_category_monthly_active_users.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_monthly.aggregated_metrics.code_review_extension_category_monthly_active_users`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210427103010_code_review_extension_category_monthly_active_users.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_monthly.aggregated_metrics.code_review_group_monthly_active_users`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210427103119_code_review_group_monthly_active_users.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_monthly.aggregated_metrics.compliance_features_track_unique_visits_union`
-
-Unique users that have used audit event screen, audit event API, compliance dashboard, or credential inventory
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216183201_compliance_features_track_unique_visits_union.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts_monthly.aggregated_metrics.i_testing_paid_monthly_active_user_total`
-
-Aggregated count of users who have engaged with a Premium or Ultimate tier testing feature per month.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216183209_i_testing_paid_monthly_active_user_total.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts_monthly.aggregated_metrics.incident_management_alerts_total_unique_counts`
-
-Count of unique users per month to take an action on an alert
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180509_incident_management_alerts_total_unique_counts.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_monthly.aggregated_metrics.incident_management_incidents_total_unique_counts`
-
-Count of unique users per month to take an action on an incident
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180511_incident_management_incidents_total_unique_counts.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_monthly.aggregated_metrics.product_analytics_test_metrics_intersection`
-
-This was test metric used for purpose of assuring correct implementation of aggregated metrics feature
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183205_product_analytics_test_metrics_intersection.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_monthly.aggregated_metrics.product_analytics_test_metrics_union`
-
-This was test metric used for purpose of assuring correct implementation of aggregated metrics feature
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183203_product_analytics_test_metrics_union.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_monthly.deployments`
-
-Total deployments count for recent 28 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210201124930_deployments.yml)
-
-Group: `group::ops release`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_monthly.failed_deployments`
-
-Total failed deployments
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181924_failed_deployments.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts_monthly.packages`
-
-A monthly count of packages published to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181050_packages.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_monthly.personal_snippets`
-
-Monthly count of personal Snippets
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180308_personal_snippets.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_monthly.project_snippets`
-
-Monthly count of project Snippets
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180310_project_snippets.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_monthly.projects`
-
-Count number of projects created monthly
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210514141518_monthly_projects_creation.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_monthly.projects_with_alerts_created`
-
-Monthly count of unique projects with HTTP alerting enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183159_projects_with_alerts_created.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_monthly.snippets`
-
-Monthly count of All Snippets
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180312_snippets.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_monthly.successful_deployments`
-
-Total successful deployments
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181923_successful_deployments.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts_weekly.aggregated_metrics.code_review_category_monthly_active_users`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210427103407_code_review_category_monthly_active_users.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_weekly.aggregated_metrics.code_review_extension_category_monthly_active_users`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210427103452_code_review_extension_category_monthly_active_users.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_weekly.aggregated_metrics.code_review_group_monthly_active_users`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210427103328_code_review_group_monthly_active_users.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_weekly.aggregated_metrics.compliance_features_track_unique_visits_union`
-
-Unique users that have used audit event screen, audit event API, compliance dashboard, or credential inventory
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216183211_compliance_features_track_unique_visits_union.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts_weekly.aggregated_metrics.i_testing_paid_monthly_active_user_total`
-
-Aggregated count of users who have engaged with a Premium or Ultimate tier testing feature per week.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216183219_i_testing_paid_monthly_active_user_total.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts_weekly.aggregated_metrics.incident_management_alerts_total_unique_counts`
-
-Count of unique users per week to take an action on an alert
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180513_incident_management_alerts_total_unique_counts.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_weekly.aggregated_metrics.incident_management_incidents_total_unique_counts`
-
-Count of unique users per week to take an action on an incident
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180515_incident_management_incidents_total_unique_counts.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_weekly.aggregated_metrics.product_analytics_test_metrics_intersection`
-
-This was test metric used for purpose of assuring correct implementation of aggregated metrics feature
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216183215_product_analytics_test_metrics_intersection.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_weekly.aggregated_metrics.product_analytics_test_metrics_union`
-
-This was test metric used for purpose of assuring correct implementation of aggregated metrics feature
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216183213_product_analytics_test_metrics_union.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `database.adapter`
-
-This metric only returns a value of PostgreSQL in supported versions of GitLab. It could be removed from the usage ping. Historically MySQL was also supported.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210201124935_database_adapter.yml)
-
-Group: `group::enablement distribution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `database.pg_system_id`
-
-TBD
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216183248_pg_system_id.yml)
-
-Group: `group::distribution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `database.version`
-
-The version of the PostgreSQL database.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216175609_version.yml)
-
-Group: `group::distribution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `dependency_proxy_enabled`
-
-A count of projects where the dependency proxy is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210204124900_dependency_proxy_enabled.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `edition`
-
-Edition of GitLab such as EE or CE
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216175604_edition.yml)
-
-Group: `group::distribution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `elasticsearch_enabled`
-
-Whether Elasticsearch is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/settings/20210204124924_elasticsearch_enabled.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `geo_enabled`
-
-Is Geo enabled?
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/settings/20210216180406_geo_enabled.yml)
-
-Group: `group::geo`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `git.version`
-
-Information about Git version
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/license/20210216183237_version.yml)
-
-Group: `group::distribution`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `gitaly.clusters`
-
-Total GitLab Managed clusters both enabled and disabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210204124932_clusters.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `gitaly.filesystems`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216183241_filesystems.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `gitaly.servers`
-
-Total Gitalty Servers
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210204124930_servers.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `gitaly.version`
-
-Version of Gitaly
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/license/20210204124928_version.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `gitlab_pages.enabled`
-
-Whether GitLab Pages is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210204124934_enabled.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `gitlab_pages.version`
-
-The version number of GitLab Pages
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/license/20210204124936_version.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `gitlab_shared_runners_enabled`
-
-Whether shared runners is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210204124902_gitlab_shared_runners_enabled.yml)
-
-Group: `group::runner`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `gitpod_enabled`
-
-Whether Gitpod is enabled in the instance
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180314_gitpod_enabled.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `grafana_link_enabled`
-
-Whether Grafana is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210204124922_grafana_link_enabled.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `gravatar_enabled`
-
-Whether gravatar is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210204124904_gravatar_enabled.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `historical_max_users`
-
-The peak active user count. Active is defined in UsersStatistics model.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210204124835_historical_max_users.yml)
-
-Group: `group::license`
-
-Data Category: `Subscription`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `hostname`
-
-Host name of GitLab instance
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/license/20210204124827_hostname.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Standard`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `ingress_modsecurity_enabled`
-
-Whether or not ModSecurity is enabled within Ingress
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216175459_ingress_modsecurity_enabled.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `installation_type`
-
-The installation method used to install GitLab (Omnibus, Helm, etc)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/license/20210216175602_installation_type.yml)
-
-Group: `group::distribution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `instance_auto_devops_enabled`
-
-Whether auto DevOps is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210204124856_instance_auto_devops_enabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `ldap_enabled`
-
-Whether LDAP is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210204124906_ldap_enabled.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `license_billable_users`
-
-Number of all billable users (active users excluding bots and guests).
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210531204603_license_billable_users.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `premium`, `ultimate`
-
-### `license_expires_at`
-
-The date the license ends
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210204124847_license_expires_at.yml)
-
-Group: `group::license`
-
-Data Category: `Subscription`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `license_id`
-
-The ID of the license
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210204124833_license_id.yml)
-
-Group: `group::license`
-
-Data Category: `Subscription`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `license_md5`
-
-The MD5 hash of license key of the GitLab instance
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210204124831_license_md5.yml)
-
-Group: `group::license`
-
-Data Category: `Standard`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `license_plan`
-
-The plan of the GitLab license
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210204124849_license_plan.yml)
-
-Group: `group::license`
-
-Data Category: `Subscription`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `license_starts_at`
-
-The date the license starts
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210204124845_license_starts_at.yml)
-
-Group: `group::license`
-
-Data Category: `Subscription`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `license_subscription_id`
-
-Licese zuora_subscription_id
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210204124852_license_subscription_id.yml)
-
-Group: `group::license`
-
-Data Category: `Standard`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `license_trial`
-
-Whether this is a trial license or not
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210204124851_license_trial.yml)
-
-Group: `group::license`
-
-Data Category: `Subscription`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `license_trial_ends_on`
-
-Date the trial license ends on
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210204124926_license_trial_ends_on.yml)
-
-Group: `group::license`
-
-Data Category: `Subscription`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `license_user_count`
-
-The number of seats included in the license
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210204124843_license_user_count.yml)
-
-Group: `group::license`
-
-Data Category: `Subscription`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `licensee.Company`
-
-Company on the GitLab license
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210204124841_company.yml)
-
-Group: `group::license`
-
-Data Category: `Subscription`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `licensee.Email`
-
-Email on the GitLab license
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210204124839_email.yml)
-
-Group: `group::license`
-
-Data Category: `Subscription`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `licensee.Name`
-
-Name on the GitLab license
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210204124837_name.yml)
-
-Group: `group::license`
-
-Data Category: `Subscription`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `mail.smtp_server`
-
-The value of the SMTP server that is used
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216174829_smtp_server.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `mattermost_enabled`
-
-Whether Mattermost is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210204124908_mattermost_enabled.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.artifacts.enabled`
-
-Whether Object Storage is enabled for Artifacts
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180836_enabled.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.artifacts.object_store.background_upload`
-
-Whether Background Upload for Object Storage is enabled for Artifacts
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180841_background_upload.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.artifacts.object_store.direct_upload`
-
-Whether Direct Upload for Object Storage is enabled for Artifacts
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180840_direct_upload.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.artifacts.object_store.enabled`
-
-Whether Object Storage is enabled for Artifacts
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180838_enabled.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.artifacts.object_store.provider`
-
-What Object Storage provider has been configured for Artifacts
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180843_provider.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.external_diffs.enabled`
-
-Whether Object Storage is enabled for External Diffs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180845_enabled.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.external_diffs.object_store.background_upload`
-
-Whether Background Upload for Object Storage is enabled for External Diffs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180851_background_upload.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.external_diffs.object_store.direct_upload`
-
-Whether Direct Upload for Object Storage is enabled for External Diffs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180849_direct_upload.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.external_diffs.object_store.enabled`
-
-Whether Object Storage is enabled for External Diffs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180847_enabled.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.external_diffs.object_store.provider`
-
-What Object Storage provider has been configured for External Diffs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180852_provider.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.lfs.enabled`
-
-Whether Object Storage is enabled for LFS
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180854_enabled.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.lfs.object_store.background_upload`
-
-Whether Background Upload for Object Storage is enabled for LFS
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180900_background_upload.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.lfs.object_store.direct_upload`
-
-Whether Direct Upload for Object Storage is enabled for LFS
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180858_direct_upload.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.lfs.object_store.enabled`
-
-Whether Object Storage is enabled for LFS
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180856_enabled.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.lfs.object_store.provider`
-
-What Object Storage provider has been configured for LFS
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180902_provider.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.packages.enabled`
-
-Whether Object Storage is enabled for Uploads
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180913_enabled.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.packages.object_store.background_upload`
-
-Whether Background Upload for Object Storage is enabled for Packages
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180918_background_upload.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.packages.object_store.direct_upload`
-
-Whether Direct Upload for Object Storage is enabled for Packages
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180916_direct_upload.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.packages.object_store.enabled`
-
-Whether Object Storage is enabled for Packages
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180915_enabled.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.packages.object_store.provider`
-
-What Object Storage provider has been configured for Packages
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180920_provider.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.uploads.enabled`
-
-Whether Object Storage is enabled for Uploads
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180903_enabled.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.uploads.object_store.background_upload`
-
-Whether Background Upload for Object Storage is enabled for Uploads
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180909_background_upload.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.uploads.object_store.direct_upload`
-
-Whether Direct Upload for Object Storage is enabled for Uploads
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180907_direct_upload.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.uploads.object_store.enabled`
-
-Whether Object Storage is enabled for Uploads
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180905_enabled.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.uploads.object_store.provider`
-
-What Object Storage provider has been configured for Uploads
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180911_provider.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `omniauth_enabled`
-
-Whether OmniAuth is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210204124910_omniauth_enabled.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `prometheus_enabled`
-
-Whether the bundled Prometheus is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210204124912_prometheus_enabled.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `prometheus_metrics_enabled`
-
-Whether Prometheus Metrics endpoint is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210204124914_prometheus_metrics_enabled.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `recorded_at`
-
-When the Usage Ping computation was started
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/license/20210201124932_recorded_at.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Standard`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `recording_ce_finished_at`
-
-When the core features were computed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/license/20210204124938_recording_ce_finished_at.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Standard`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `recording_ee_finished_at`
-
-When the EE-specific features were computed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210204124940_recording_ee_finished_at.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Standard`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.analytics.analytics_total_unique_counts_monthly`
-
-The number of unique users who visited any analytics feature by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175016_analytics_total_unique_counts_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.analytics_total_unique_counts_weekly`
-
-The number of unique users who visited any analytics feature by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175014_analytics_total_unique_counts_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.g_analytics_contribution_monthly`
-
-Unique visitors to /groups/:group/-/contribution_analytics by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216174914_g_analytics_contribution_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.g_analytics_contribution_weekly`
-
-Unique visitors to /groups/:group/-/contribution_analytics by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216174912_g_analytics_contribution_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.g_analytics_insights_monthly`
-
-Unique visitors to /groups/:group/-/insights/ by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216174918_g_analytics_insights_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.g_analytics_insights_weekly`
-
-Unique visitors to /groups/:group/-/insights/ by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216174916_g_analytics_insights_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.g_analytics_issues_monthly`
-
-Unique visitors to /groups/:group/-/issues_analytics by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216174921_g_analytics_issues_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.g_analytics_issues_weekly`
-
-Unique visitors to /groups/:group/-/issues_analytics by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216174919_g_analytics_issues_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.g_analytics_merge_request_monthly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175004_g_analytics_merge_request_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.g_analytics_merge_request_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216175002_g_analytics_merge_request_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers:
-
-### `redis_hll_counters.analytics.g_analytics_productivity_monthly`
-
-Unique visitors to /groups/:group/-/analytics/productivity_analytics by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216174926_g_analytics_productivity_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.g_analytics_productivity_weekly`
-
-Unique visitors to /groups/:group/-/analytics/productivity_analytics by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216174923_g_analytics_productivity_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.g_analytics_valuestream_monthly`
-
-Unique visitors to /groups/:group/-/analytics/value_stream_analytics by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216174929_g_analytics_valuestream_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.g_analytics_valuestream_weekly`
-
-Unique visitors to /groups/:group/-/analytics/value_stream_analytics by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216174927_g_analytics_valuestream_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.i_analytics_cohorts_monthly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216174956_i_analytics_cohorts_monthly.yml)
-
-Group: `group::utilization`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.i_analytics_cohorts_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216174955_i_analytics_cohorts_weekly.yml)
-
-Group: `group::utilization`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.i_analytics_dev_ops_adoption_monthly`
-
-Counts visits to DevOps Adoption page per month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210401092244_i_analytics_dev_ops_adoption_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.analytics.i_analytics_dev_ops_adoption_weekly`
-
-Counts visits to DevOps Adoption page per week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210401092244_i_analytics_dev_ops_adoption_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.analytics.i_analytics_dev_ops_score_monthly`
-
-Unique visitors to /admin/dev_ops_report by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175000_i_analytics_dev_ops_score_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.i_analytics_dev_ops_score_weekly`
-
-Unique visitors to /admin/dev_ops_report by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216174958_i_analytics_dev_ops_score_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.i_analytics_instance_statistics_monthly`
-
-Unique visitors to /admin/usage_trends by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175012_i_analytics_instance_statistics_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.i_analytics_instance_statistics_weekly`
-
-Unique visitors to /admin/usage_trends by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175010_i_analytics_instance_statistics_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.p_analytics_code_reviews_monthly`
-
-Unique visitors to /:group/:project/-/analytics/code_reviews by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216174937_p_analytics_code_reviews_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.p_analytics_code_reviews_weekly`
-
-Unique visitors to /:group/:project/-/analytics/code_reviews by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216174935_p_analytics_code_reviews_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.p_analytics_insights_monthly`
-
-Unique visitors to /:group/:project/insights/ by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216174945_p_analytics_insights_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.p_analytics_insights_weekly`
-
-Unique visitors to /:group/:project/insights/ by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216174943_p_analytics_insights_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.p_analytics_issues_monthly`
-
-Unique visitors to /:group/:project/-/analytics/issues_analytics by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216174949_p_analytics_issues_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.p_analytics_issues_weekly`
-
-Unique visitors to /:group/:project/-/analytics/issues_analytics by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216174947_p_analytics_issues_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.p_analytics_merge_request_monthly`
-
-Unique visitors to /:group/:project/-/analytics/merge_request_analytics by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216175008_p_analytics_merge_request_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.p_analytics_merge_request_weekly`
-
-Unique visitors to /:group/:project/-/analytics/merge_request_analytics by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216175006_p_analytics_merge_request_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.p_analytics_pipelines_monthly`
-
-Unique visitors to /groups/:group/-/analytics/ci_cd by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216174933_p_analytics_pipelines_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.p_analytics_pipelines_weekly`
-
-Unique visitors to /groups/:group/-/analytics/ci_cd by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216174931_p_analytics_pipelines_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.p_analytics_repo_monthly`
-
-Unique visitors to /:group/:project/-/graphs/master/charts by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216174953_p_analytics_repo_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.p_analytics_repo_weekly`
-
-Unique visitors to /:group/:project/-/graphs/master/charts by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216174951_p_analytics_repo_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.p_analytics_valuestream_monthly`
-
-Unique visitors to /:group/:project/-/value_stream_analytics by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216174941_p_analytics_valuestream_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.p_analytics_valuestream_weekly`
-
-Unique visitors to /:group/:project/-/value_stream_analytics by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216174939_p_analytics_valuestream_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.users_viewing_analytics_group_devops_adoption_monthly`
-
-Counts visits to DevOps Adoption page per month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210419105414_users_viewing_analytics_group_devops_adoption_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.analytics.users_viewing_analytics_group_devops_adoption_weekly`
-
-Counts visits to DevOps Adoption page per week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210419105408_users_viewing_analytics_group_devops_adoption_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.ci_secrets_management.i_ci_secrets_management_vault_build_created_monthly`
-
-Monthly active users creating pipelines that that have the Vault JWT with it.'
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216184251_i_ci_secrets_management_vault_build_created_monthly.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.ci_secrets_management.i_ci_secrets_management_vault_build_created_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184249_i_ci_secrets_management_vault_build_created_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.ci_templates.ci_templates_total_unique_counts_monthly`
-
-Total count of pipelines runs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184559_ci_templates_total_unique_counts_monthly.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `broken`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.ci_templates_total_unique_counts_weekly`
-
-Total count of pipelines runs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184557_ci_templates_total_unique_counts_weekly.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `broken`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_5_min_production_app_monthly`
-
-Number of projects using 5 min production app CI template in last 7 days.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184517_p_ci_templates_5_min_production_app_monthly.yml)
-
-Group: `group::5-min-app`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_5_min_production_app_weekly`
-
-Number of projects using 5 min production app CI template in last 7 days.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184515_p_ci_templates_5_min_production_app_weekly.yml)
-
-Group: `group::5-min-app`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_auto_devops_build_monthly`
-
-Count of pipelines using the Auto Build template
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184534_p_ci_templates_auto_devops_build_monthly.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_auto_devops_build_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184532_p_ci_templates_auto_devops_build_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.ci_templates.p_ci_templates_auto_devops_deploy_latest_monthly`
-
-Count of pipelines using the latest Auto Deploy template
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184542_p_ci_templates_auto_devops_deploy_latest_monthly.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_auto_devops_deploy_latest_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184540_p_ci_templates_auto_devops_deploy_latest_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.ci_templates.p_ci_templates_auto_devops_deploy_monthly`
-
-Count of pipelines using the stable Auto Deploy template
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184538_p_ci_templates_auto_devops_deploy_monthly.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_auto_devops_deploy_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184536_p_ci_templates_auto_devops_deploy_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.ci_templates.p_ci_templates_auto_devops_monthly`
-
-Count of pipelines using the Auto DevOps template
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184523_p_ci_templates_auto_devops_monthly.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_auto_devops_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184520_p_ci_templates_auto_devops_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.ci_templates.p_ci_templates_aws_cf_deploy_ec2_monthly`
-
-Count of projects using `AWS/CF-Provision-and-Deploy-EC2.gitlab-ci.yml` template in last 28 days.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184526_p_ci_templates_aws_cf_deploy_ec2_monthly.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_aws_cf_deploy_ec2_weekly`
-
-Count of projects using `AWS/CF-Provision-and-Deploy-EC2.gitlab-ci.yml` template in last 7 days.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184524_p_ci_templates_aws_cf_deploy_ec2_weekly.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_aws_deploy_ecs_monthly`
-
-Count of projects using `AWS/Deploy-ECS.gitlab-ci.yml` template in last 28 days.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184530_p_ci_templates_aws_deploy_ecs_monthly.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_aws_deploy_ecs_weekly`
-
-Count of projects using `AWS/Deploy-ECS.gitlab-ci.yml` template in last 7 days.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184528_p_ci_templates_aws_deploy_ecs_weekly.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_implicit_auto_devops_build_monthly`
-
-Count of pipelines with implicit Auto Build runs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184502_p_ci_templates_implicit_auto_devops_build_monthly.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_implicit_auto_devops_build_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184500_p_ci_templates_implicit_auto_devops_build_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.ci_templates.p_ci_templates_implicit_auto_devops_deploy_monthly`
-
-Count of pipelines with implicit Auto Deploy runs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184506_p_ci_templates_implicit_auto_devops_deploy_monthly.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_implicit_auto_devops_deploy_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184504_p_ci_templates_implicit_auto_devops_deploy_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.ci_templates.p_ci_templates_implicit_auto_devops_monthly`
-
-Count of pipelines with implicit Auto DevOps runs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184458_p_ci_templates_implicit_auto_devops_monthly.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_implicit_auto_devops_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184456_p_ci_templates_implicit_auto_devops_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.ci_templates.p_ci_templates_implicit_security_sast_monthly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184510_p_ci_templates_implicit_security_sast_monthly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_implicit_security_sast_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184508_p_ci_templates_implicit_security_sast_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.ci_templates.p_ci_templates_implicit_security_secret_detection_monthly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184513_p_ci_templates_implicit_security_secret_detection_monthly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_implicit_security_secret_detection_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184512_p_ci_templates_implicit_security_secret_detection_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.ci_templates.p_ci_templates_security_sast_monthly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184546_p_ci_templates_security_sast_monthly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_security_sast_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184544_p_ci_templates_security_sast_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.ci_templates.p_ci_templates_security_secret_detection_monthly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184551_p_ci_templates_security_secret_detection_monthly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_security_secret_detection_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184549_p_ci_templates_security_secret_detection_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.ci_templates.p_ci_templates_terraform_base_latest_monthly`
-
-Count of pipelines that include the terraform base template from GitLab
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184555_p_ci_templates_terraform_base_latest_monthly.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_terraform_base_latest_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184553_p_ci_templates_terraform_base_latest_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.code_review.code_review_total_unique_counts_monthly`
-
-Count of unique users per month who interact with a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184454_code_review_total_unique_counts_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.code_review_total_unique_counts_weekly`
-
-Count of unique users per week who interact with a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184452_code_review_total_unique_counts_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_click_diff_view_setting_monthly`
-
-Count of users clicking diff view setting
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210607113556_i_code_review_click_diff_view_setting_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_click_diff_view_setting_weekly`
-
-Count of users clicking diff view setting
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210607113552_i_code_review_click_diff_view_setting_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_click_file_browser_setting_monthly`
-
-Count of users clicking merge request file browser setting
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210421145818_i_code_review_click_file_browser_setting_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_click_file_browser_setting_weekly`
-
-Count of users with merge request file list setting
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210421145814_i_code_review_click_file_browser_setting_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_click_single_file_mode_setting_monthly`
-
-Count of users clicking single file mode setting
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210421144352_i_code_review_click_single_file_mode_setting_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_click_single_file_mode_setting_weekly`
-
-Count of users clicking single file mode setting
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210421144349_i_code_review_click_single_file_mode_setting_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_click_whitespace_setting_monthly`
-
-Count of users clicking merge request whitespae setting
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210421145945_i_code_review_click_whitespace_setting_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_click_whitespace_setting_weekly`
-
-Count of users clicking merge request whitespae setting
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210421145942_i_code_review_click_whitespace_setting_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_diff_hide_whitespace_monthly`
-
-Count of users with show whitespace disabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210422102010_i_code_review_diff_hide_whitespace_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_diff_hide_whitespace_weekly`
-
-Count of users with show whitespace disabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210422102007_i_code_review_diff_hide_whitespace_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_diff_multiple_files_monthly`
-
-Count of users with single mode disabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210422102202_i_code_review_diff_multiple_files_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_diff_multiple_files_weekly`
-
-Count of users with single mode disabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210422102159_i_code_review_diff_multiple_files_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_diff_show_whitespace_monthly`
-
-Count of users with show whitespace enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210422101928_i_code_review_diff_show_whitespace_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_diff_show_whitespace_weekly`
-
-Count of users with show whitespace enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210422101925_i_code_review_diff_show_whitespace_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_diff_single_file_monthly`
-
-Count of users with single file mode enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210422102121_i_code_review_diff_single_file_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_diff_single_file_weekly`
-
-Count of users with single file mode enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210422102118_i_code_review_diff_single_file_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_diff_view_inline_monthly`
-
-Count of users with merge request view type as inline
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210422101516_i_code_review_diff_view_inline_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_diff_view_inline_weekly`
-
-Count of users with merge request view type as inline
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210422101512_i_code_review_diff_view_inline_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_diff_view_parallel_monthly`
-
-Count of users with merge request view type as parallel
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210422101613_i_code_review_diff_view_parallel_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_diff_view_parallel_weekly`
-
-Count of users with merge request view type as parallel
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210422101609_i_code_review_diff_view_parallel_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_edit_mr_desc_monthly`
-
-Count of unique users per month who edit the description of a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184342_i_code_review_edit_mr_desc_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_edit_mr_desc_weekly`
-
-Count of unique users per week who edit the description of a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184340_i_code_review_edit_mr_desc_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_edit_mr_title_monthly`
-
-Count of unique users per month who edit the title of a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184338_i_code_review_edit_mr_title_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_edit_mr_title_weekly`
-
-Count of unique users per week who edit the title of a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184336_i_code_review_edit_mr_title_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_file_browser_list_view_monthly`
-
-Count of users with merge request file list setting
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210422101852_i_code_review_file_browser_list_view_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_file_browser_list_view_weekly`
-
-Count of users with merge request file list setting
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210422101849_i_code_review_file_browser_list_view_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_file_browser_tree_view_monthly`
-
-Count of users with merge request file tree setting
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210422101753_i_code_review_file_browser_tree_view_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_file_browser_tree_view_weekly`
-
-Count of users with merge request file tree setting
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210422101750_i_code_review_file_browser_tree_view_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_mr_diffs_monthly`
-
-Count of unique merge requests per month with diffs viewed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175120_i_code_review_mr_diffs_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_mr_diffs_weekly`
-
-Count of unique merge requests per week with diffs viewed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175118_i_code_review_mr_diffs_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_mr_single_file_diffs_monthly`
-
-Count of unique merge requests per month with diffs viewed file by file
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175128_i_code_review_mr_single_file_diffs_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_mr_single_file_diffs_weekly`
-
-Count of unique merge requests per week with diffs viewed file by file
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175126_i_code_review_mr_single_file_diffs_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_add_suggestion_monthly`
-
-Count of unique users per month who added a suggestion
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175159_i_code_review_user_add_suggestion_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_add_suggestion_weekly`
-
-Count of unique users per week who added a suggestion
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175158_i_code_review_user_add_suggestion_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_apply_suggestion_monthly`
-
-Count of unique users per month who applied a suggestion
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175203_i_code_review_user_apply_suggestion_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_apply_suggestion_weekly`
-
-Count of unique users per week who applied a suggestion
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175201_i_code_review_user_apply_suggestion_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_approval_rule_added_monthly`
-
-Count of unique users per month who add an approval rule to a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184434_i_code_review_user_approval_rule_added_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_approval_rule_added_weekly`
-
-Count of unique users per week who add an approval rule to a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184432_i_code_review_user_approval_rule_added_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_approval_rule_deleted_monthly`
-
-Count of unique users per month who delete an approval rule to a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184438_i_code_review_user_approval_rule_deleted_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_approval_rule_deleted_weekly`
-
-Count of unique users per week who delete an approval rule to a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184436_i_code_review_user_approval_rule_deleted_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_approval_rule_edited_monthly`
-
-Count of unique users per month who delete an approval rule to a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184442_i_code_review_user_approval_rule_edited_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_approval_rule_edited_weekly`
-
-Count of unique users per week who edit an approval rule to a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184440_i_code_review_user_approval_rule_edited_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_approve_mr_monthly`
-
-Count of unique users per month who approve a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184322_i_code_review_user_approve_mr_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_approve_mr_weekly`
-
-Count of unique users per week who approve a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184320_i_code_review_user_approve_mr_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_assigned_monthly`
-
-Count of unique users per month who are assigned to a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184418_i_code_review_user_assigned_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_assigned_weekly`
-
-Count of unique users per week who are assigned to a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184416_i_code_review_user_assigned_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_assignees_changed_monthly`
-
-Count of unique users per month who changed assignees of a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210302114145_i_code_review_user_assignees_changed_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_assignees_changed_weekly`
-
-Count of unique users per week who changed assignees of a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302114202_i_code_review_user_assignees_changed_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_close_mr_monthly`
-
-Count of unique users per month who closed a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175136_i_code_review_user_close_mr_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_close_mr_weekly`
-
-Count of unique users per week who closed a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175134_i_code_review_user_close_mr_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_create_mr_comment_monthly`
-
-Count of unique users per month who commented on a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175148_i_code_review_user_create_mr_comment_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_create_mr_comment_weekly`
-
-Count of unique users per week who commented on a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175146_i_code_review_user_create_mr_comment_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_create_mr_from_issue_monthly`
-
-Count of unique users per month who create a merge request from an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184450_i_code_review_user_create_mr_from_issue_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_create_mr_from_issue_weekly`
-
-Count of unique users per week who create a merge request from an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184448_i_code_review_user_create_mr_from_issue_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_create_mr_monthly`
-
-Count of unique users per month who created a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175132_i_code_review_user_create_mr_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_create_mr_weekly`
-
-Count of unique users per week who created a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175130_i_code_review_user_create_mr_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_create_multiline_mr_comment_monthly`
-
-Count of unique users per month who create a multiline comment in a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184401_i_code_review_user_create_multiline_mr_comment_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_create_multiline_mr_comment_weekly`
-
-Count of unique users per week who create a multiline comment in a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184359_i_code_review_user_create_multiline_mr_comment_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_create_review_note_monthly`
-
-Count of unique users per month who create a note as part of a merge request review
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184353_i_code_review_user_create_review_note_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_create_review_note_weekly`
-
-Count of unique users per week who create a note as part of a merge request review
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184351_i_code_review_user_create_review_note_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_edit_mr_comment_monthly`
-
-Count of unique users per month who edited a comment on a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175152_i_code_review_user_edit_mr_comment_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_edit_mr_comment_weekly`
-
-Count of unique users per week who edited a comment on a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175150_i_code_review_user_edit_mr_comment_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_edit_multiline_mr_comment_monthly`
-
-Count of unique users per week who edit a multiline comment in a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184405_i_code_review_user_edit_multiline_mr_comment_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_edit_multiline_mr_comment_weekly`
-
-Count of unique users per week who edit a multiline comment in a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184403_i_code_review_user_edit_multiline_mr_comment_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_labels_changed_monthly`
-
-Count of unique users per month who changed labels of a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210302110607_i_code_review_user_labels_changed_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_labels_changed_weekly`
-
-Count of unique users per week who changed labels of a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302110548_i_code_review_user_labels_changed_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_load_conflict_ui_monthly`
-
-Count of unique users per week who load the conflict resolution page
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210514013549_i_code_review_user_load_conflict_ui_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_load_conflict_ui_weekly`
-
-Count of unique users per week who load the conflict resolution page
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210514013544_i_code_review_user_load_conflict_ui_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_marked_as_draft_monthly`
-
-Count of unique users per month who mark a merge request as a draft
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184422_i_code_review_user_marked_as_draft_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_marked_as_draft_weekly`
-
-Count of unique users per week who mark a merge request as a draft
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184420_i_code_review_user_marked_as_draft_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_merge_mr_monthly`
-
-Count of unique users per month who merged a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175144_i_code_review_user_merge_mr_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_merge_mr_weekly`
-
-Count of unique users per week who merged a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175142_i_code_review_user_merge_mr_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_milestone_changed_monthly`
-
-Count of unique users per month who changed milestone of a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210302110520_i_code_review_user_milestone_changed_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_milestone_changed_weekly`
-
-Count of unique users per week who changed milestone of a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302110403_i_code_review_user_milestone_changed_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_mr_discussion_locked_monthly`
-
-Count of unique users per month who locked a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210301103859_i_code_review_user_mr_discussion_locked_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_mr_discussion_locked_weekly`
-
-Count of unique users per week who locked a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302105318_i_code_review_user_mr_discussion_locked_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_mr_discussion_unlocked_monthly`
-
-Count of unique users per month who unlocked a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210301103925_i_code_review_user_mr_discussion_unlocked_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_mr_discussion_unlocked_weekly`
-
-Count of unique users per week who unlocked a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302105258_i_code_review_user_mr_discussion_unlocked_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_publish_review_monthly`
-
-Count of unique users per month who publish their review as part of a merge request review
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184357_i_code_review_user_publish_review_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_publish_review_weekly`
-
-Count of unique users per week who publish their review as part of a merge request review
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184355_i_code_review_user_publish_review_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_remove_mr_comment_monthly`
-
-Count of unique users per month who removed a comment on a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175156_i_code_review_user_remove_mr_comment_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_remove_mr_comment_weekly`
-
-Count of unique users per month who removed a comment on a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175154_i_code_review_user_remove_mr_comment_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_remove_multiline_mr_comment_monthly`
-
-Count of unique users per month who remove a multiline comment in a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184409_i_code_review_user_remove_multiline_mr_comment_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_remove_multiline_mr_comment_weekly`
-
-Count of unique users per week who remove a multiline comment in a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184407_i_code_review_user_remove_multiline_mr_comment_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_reopen_mr_monthly`
-
-Count of unique users per month who reopened a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175140_i_code_review_user_reopen_mr_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_reopen_mr_weekly`
-
-Count of unique users per week who reopened a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175138_i_code_review_user_reopen_mr_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_resolve_conflict_monthly`
-
-Count of unique users per week who attempt to resolve a conflict through the ui
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210514013545_i_code_review_user_resolve_conflict_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_resolve_conflict_weekly`
-
-Count of unique users per week who attempt to resolve a conflict through the ui
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210514013545_i_code_review_user_resolve_conflict_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_resolve_thread_monthly`
-
-Count of unique users per month who resolve a thread in a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184330_i_code_review_user_resolve_thread_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_resolve_thread_weekly`
-
-Count of unique users per week who resolve a thread in a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184328_i_code_review_user_resolve_thread_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_review_requested_monthly`
-
-Count of unique users per month who request a review of a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184430_i_code_review_user_review_requested_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_review_requested_weekly`
-
-Count of unique users per week who request a review of a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184428_i_code_review_user_review_requested_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_reviewers_changed_monthly`
-
-Count of unique users per month who changed reviewers of a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210302114219_i_code_review_user_reviewers_changed_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_reviewers_changed_weekly`
-
-Count of unique users per week who changed reviewers of a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302114235_i_code_review_user_reviewers_changed_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_single_file_diffs_monthly`
-
-Count of unique users per month with diffs viewed file by file
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175124_i_code_review_user_single_file_diffs_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_single_file_diffs_weekly`
-
-Count of unique users per week with diffs viewed file by file
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175122_i_code_review_user_single_file_diffs_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_time_estimate_changed_monthly`
-
-Count of unique users per month who changed time estimate of a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210301102134_i_code_review_user_time_estimate_changed_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_time_estimate_changed_weekly`
-
-Count of unique users per week who changed time estimate of a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302103539_i_code_review_user_time_estimate_changed_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_time_spent_changed_monthly`
-
-Count of unique users per month who changed time spent on a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210301102204_i_code_review_user_time_spent_changed_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_time_spent_changed_weekly`
-
-Count of unique users per week who changed time spent on a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302103615_i_code_review_user_time_spent_changed_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_toggled_task_item_status_monthly`
-
-Count of unique users per month who toggled a task item in a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184312_i_code_review_user_toggled_task_item_status_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_toggled_task_item_status_weekly`
-
-Count of unique users per week who toggled a task item in a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184310_i_code_review_user_toggled_task_item_status_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_unapprove_mr_monthly`
-
-Count of unique users per month who unapprove a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184326_i_code_review_user_unapprove_mr_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_unapprove_mr_weekly`
-
-Count of unique users per week who unapprove a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184324_i_code_review_user_unapprove_mr_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_unmarked_as_draft_monthly`
-
-Count of unique users per month who unmark a merge request as a draft
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184426_i_code_review_user_unmarked_as_draft_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_unmarked_as_draft_weekly`
-
-Count of unique users per week who unmark a merge request as a draft
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184424_i_code_review_user_unmarked_as_draft_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_unresolve_thread_monthly`
-
-Count of unique users per month who unresolve a thread in a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184334_i_code_review_user_unresolve_thread_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_unresolve_thread_weekly`
-
-Count of unique users per week who unresolve a thread in a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184332_i_code_review_user_unresolve_thread_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_vs_code_api_request_monthly`
-
-Count of unique users per month who use GitLab Workflow for VS Code
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184446_i_code_review_user_vs_code_api_request_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_vs_code_api_request_weekly`
-
-Count of unique users per week who use GitLab Workflow for VS Code
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184444_i_code_review_user_vs_code_api_request_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.compliance.a_compliance_audit_events_api_monthly`
-
-Unique users that have used the Audit Events API in a given month.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216183942_a_compliance_audit_events_api_monthly.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.compliance.a_compliance_audit_events_api_weekly`
-
-Unique users that have used the Audit Events API in a given week.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216183940_a_compliance_audit_events_api_weekly.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.compliance.compliance_total_unique_counts_monthly`
-
-Unique count of compliance actions in a given month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216183946_compliance_total_unique_counts_monthly.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.compliance.compliance_total_unique_counts_weekly`
-
-Unique count of compliance actions in a given week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216183944_compliance_total_unique_counts_weekly.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.compliance.g_compliance_audit_events_monthly`
-
-Unique users who have viewed the audit event screen in a given month.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216183930_g_compliance_audit_events_monthly.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.compliance.g_compliance_audit_events_weekly`
-
-Number of unique visitors to group-level audit events screen in a given week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216183928_g_compliance_audit_events_weekly.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.compliance.g_compliance_dashboard_monthly`
-
-Unique users who have viewed the compliance dashboard in a given month.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216183926_g_compliance_dashboard_monthly.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.compliance.g_compliance_dashboard_weekly`
-
-Unique users who have looked at the compliance dashboard in a given week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216183924_g_compliance_dashboard_weekly.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.compliance.i_compliance_audit_events_monthly`
-
-Unique users that have viewed the instance-level audit events screen
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216183934_i_compliance_audit_events_monthly.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.compliance.i_compliance_audit_events_weekly`
-
-Unique users that have viewed the instance-level audit events screen
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216183932_i_compliance_audit_events_weekly.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.compliance.i_compliance_credential_inventory_monthly`
-
-Unique users who have viewed the credential inventory in a given month.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216183938_i_compliance_credential_inventory_monthly.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.compliance.i_compliance_credential_inventory_weekly`
-
-Unique visitors to the credential inventory screen in a given week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216183936_i_compliance_credential_inventory_weekly.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.deploy_token_packages_total_unique_counts_monthly`
-
-A monthly count of packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184850_deploy_token_packages_total_unique_counts_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.deploy_token_packages_total_unique_counts_weekly`
-
-A weekly count of packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184848_deploy_token_packages_total_unique_counts_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_composer_deploy_token_monthly`
-
-A monthly count of Composer packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184806_i_package_composer_deploy_token_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_composer_deploy_token_weekly`
-
-A weekly count of Composer packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184805_i_package_composer_deploy_token_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_conan_deploy_token_monthly`
-
-A monthly count of Conan packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184810_i_package_conan_deploy_token_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_conan_deploy_token_weekly`
-
-A weekly count of Conan packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184808_i_package_conan_deploy_token_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_container_deploy_token_monthly`
-
-A monthly count of container images published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184814_i_package_container_deploy_token_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_container_deploy_token_weekly`
-
-A weekly count of container images published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184812_i_package_container_deploy_token_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_debian_deploy_token_monthly`
-
-A monthly count of Debian packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184818_i_package_debian_deploy_token_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_debian_deploy_token_weekly`
-
-A weekly count of Debian packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184816_i_package_debian_deploy_token_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_generic_deploy_token_monthly`
-
-A monthly count of generic packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184822_i_package_generic_deploy_token_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `broken`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_generic_deploy_token_weekly`
-
-A weekly count of generic packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184820_i_package_generic_deploy_token_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_golang_deploy_token_monthly`
-
-A monthly count of Go modules published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184826_i_package_golang_deploy_token_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_golang_deploy_token_weekly`
-
-A weekly count of Go modules published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184824_i_package_golang_deploy_token_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_helm_deploy_token_monthly`
-
-Distinct Helm pakages deployed in recent 28 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210517074859_i_package_helm_deploy_token_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_helm_deploy_token_weekly`
-
-Distinct Helm pakages deployed in recent 7 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210517074851_i_package_helm_deploy_token_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_maven_deploy_token_monthly`
-
-A monthly count of Maven packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184830_i_package_maven_deploy_token_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_maven_deploy_token_weekly`
-
-A weekly count of Maven packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184828_i_package_maven_deploy_token_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_npm_deploy_token_monthly`
-
-A monthly count of npm packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184834_i_package_npm_deploy_token_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_npm_deploy_token_weekly`
-
-A weekly count of npm packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184832_i_package_npm_deploy_token_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_nuget_deploy_token_monthly`
-
-A monthly count of NuGet packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184838_i_package_nuget_deploy_token_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_nuget_deploy_token_weekly`
-
-A weekly count of NuGet packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184836_i_package_nuget_deploy_token_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_pypi_deploy_token_monthly`
-
-A monthly count of PyPI packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184842_i_package_pypi_deploy_token_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_pypi_deploy_token_weekly`
-
-A weekly count of Python packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184840_i_package_pypi_deploy_token_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_rubygems_deploy_token_monthly`
-
-Distinct count events for RubyGems packages published using a Deploy token in recent 28 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210303154626_i_package_rubygems_deploy_token_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_rubygems_deploy_token_weekly`
-
-A weekly count of distinct RubyGems packages published using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210303154624_i_package_rubygems_deploy_token_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_tag_deploy_token_monthly`
-
-A monthly count of package tags published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184846_i_package_tag_deploy_token_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_tag_deploy_token_weekly`
-
-A weekly count of users that have published a package tag to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184844_i_package_tag_deploy_token_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_terraform_module_deploy_token_monthly`
-
-Number of distinct users authorized via deploy token creating Terraform Module packages in recent 28 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210410012206_i_package_terraform_module_deploy_token_monthly.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_terraform_module_deploy_token_weekly`
-
-Number of distinct users authorized via deploy token creating Terraform Module packages in recent 7 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210410012207_i_package_terraform_module_deploy_token_weekly.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.ecosystem_total_unique_counts_monthly`
-
-Number of users performing actions on Jira issues by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184957_ecosystem_total_unique_counts_monthly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.ecosystem_total_unique_counts_weekly`
-
-Number of users performing actions on Jira issues by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184955_ecosystem_total_unique_counts_weekly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_jira_service_close_issue_monthly`
-
-Number of users closing Jira issues by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184941_i_ecosystem_jira_service_close_issue_monthly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_jira_service_close_issue_weekly`
-
-Number of users closing Jira issues by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184939_i_ecosystem_jira_service_close_issue_weekly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_jira_service_create_issue_monthly`
-
-Number of users creating Jira issues by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216184953_i_ecosystem_jira_service_create_issue_monthly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_jira_service_create_issue_weekly`
-
-Number of users creating Jira issues by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184951_i_ecosystem_jira_service_create_issue_weekly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_jira_service_cross_reference_monthly`
-
-Number of users that cross-referenced Jira issues by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184945_i_ecosystem_jira_service_cross_reference_monthly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_jira_service_cross_reference_weekly`
-
-Number of users that cross-referenced Jira issues by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184943_i_ecosystem_jira_service_cross_reference_weekly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_jira_service_list_issues_monthly`
-
-Count of Jira Issue List visits by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216184949_i_ecosystem_jira_service_list_issues_monthly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_jira_service_list_issues_weekly`
-
-Count of Jira Issue List visits by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184947_i_ecosystem_jira_service_list_issues_weekly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_confidential_issue_notification_monthly`
-
-Calculated unique users to trigger a Slack message by performing an action on a confidential issue by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210303152233_i_ecosystem_slack_service_confidential_issue_notification_monthly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_confidential_issue_notification_weekly`
-
-Calculated unique users to trigger a Slack message by performing an action on a confidential issue by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302104814_i_ecosystem_slack_service_confidential_issue_notification_weekly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_confidential_note_notification_monthly`
-
-Calculated unique users to trigger a Slack message by creating a confidential note by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210303152144_i_ecosystem_slack_service_confidential_note_notification_monthly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_confidential_note_notification_weekly`
-
-Calculated unique users to trigger a Slack message by creating a confidential note by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302104556_i_ecosystem_slack_service_confidential_note_notification_weekly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_deployment_notification_monthly`
-
-Calculated unique users to trigger a Slack message by performing a deployment by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210303150912_i_ecosystem_slack_service_deployment_notification_monthly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_deployment_notification_weekly`
-
-Calculated unique users to trigger a Slack message by performing a deployment by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302103755_i_ecosystem_slack_service_deployment_notification_weekly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_issue_notification_monthly`
-
-Calculated unique users to trigger a Slack message by performing an action on an issue by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210303150507_i_ecosystem_slack_service_issue_notification_monthly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_issue_notification_weekly`
-
-Calculated unique users to trigger a Slack message by performing an action on an issue by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302103002_i_ecosystem_slack_service_issue_notification_weekly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_merge_request_notification_monthly`
-
-Calculated unique users to trigger a Slack message by performing an action on a merge request by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210303151831_i_ecosystem_slack_service_merge_request_notification_monthly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_merge_request_notification_weekly`
-
-Calculated unique users to trigger a Slack message by performing an action on a merge request by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302104007_i_ecosystem_slack_service_merge_request_notification_weekly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_note_notification_monthly`
-
-Calculated unique users to trigger a Slack message by creating a note by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210303151946_i_ecosystem_slack_service_note_notification_monthly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_note_notification_weekly`
-
-Calculated unique users to trigger a Slack message by creating a note by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302104047_i_ecosystem_slack_service_note_notification_weekly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_push_notification_monthly`
-
-Calculated unique users to trigger a Slack message by performing a Git push by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210303150654_i_ecosystem_slack_service_push_notification_monthly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_push_notification_weekly`
-
-Calculated unique users to trigger a Slack message by performing a Git push by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302103629_i_ecosystem_slack_service_push_notification_weekly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_tag_push_notification_monthly`
-
-Calculated unique users to trigger a Slack message by performing a tag push by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210303152049_i_ecosystem_slack_service_tag_push_notification_monthly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_tag_push_notification_weekly`
-
-Calculated unique users to trigger a Slack message by performing a tag push by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302104144_i_ecosystem_slack_service_tag_push_notification_weekly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_wiki_page_notification_monthly`
-
-Calculated unique users to trigger a Slack message by performing an action on a wiki page by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210303151609_i_ecosystem_slack_service_wiki_page_notification_monthly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_wiki_page_notification_weekly`
-
-Calculated unique users to trigger a Slack message by performing an action on a wiki page by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302103907_i_ecosystem_slack_service_wiki_page_notification_weekly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.epic_boards_usage.epic_boards_usage_total_unique_counts_monthly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210507171840_epic_boards_usage_total_unique_counts_monthly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.epic_boards_usage.epic_boards_usage_total_unique_counts_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210507171838_epic_boards_usage_total_unique_counts_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.epic_boards_usage.g_project_management_users_creating_epic_boards_monthly`
-
-Count of MAU creating epic boards
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210428072511_g_project_management_users_creating_epic_boards_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epic_boards_usage.g_project_management_users_creating_epic_boards_weekly`
-
-Count of WAU creating epic boards
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210428072508_g_project_management_users_creating_epic_boards_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epic_boards_usage.g_project_management_users_updating_epic_board_names_monthly`
-
-Count of MAU updating epic board names
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210428073607_g_project_management_users_updating_epic_board_names_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epic_boards_usage.g_project_management_users_updating_epic_board_names_weekly`
-
-Count of WAU updating epic board names
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210428073604_g_project_management_users_updating_epic_board_names_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epic_boards_usage.g_project_management_users_viewing_epic_boards_monthly`
-
-Count of MAU viewing epic boards
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210428073329_g_project_management_users_viewing_epic_boards_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epic_boards_usage.g_project_management_users_viewing_epic_boards_weekly`
-
-Count of WAU viewing epic boards
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210428073327_g_project_management_users_viewing_epic_boards_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.epics_usage_total_unique_counts_monthly`
-
-Total monthly users count for epics_usage
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210318183733_epics_usage_total_unique_counts_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.epics_usage_total_unique_counts_weekly`
-
-Total weekly users count for epics_usage
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210318183220_epics_usage_total_unique_counts_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_closed_monthly`
-
-Counts of MAU closing epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210310163213_g_project_management_epic_closed_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_closed_weekly`
-
-Counts of WAU closing epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210310162703_g_project_management_epic_closed_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_created_monthly`
-
-Count of MAU creating epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210305144719_g_product_planning_epic_created_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_created_weekly`
-
-Count of WAU creating epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210305145820_g_product_planning_epic_created_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_cross_referenced_monthly`
-
-Count of MAU cross referencing epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210430174100_g_project_management_epic_cross_referenced_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_cross_referenced_weekly`
-
-Counts of WAU cross referencing epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210430173650_g_project_management_epic_cross_referenced_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_destroyed_monthly`
-
-Count of MAU destroying epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210413174710_g_project_management_epic_destroyed_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_destroyed_weekly`
-
-Count of WAU destroying epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210413174449_g_project_management_epic_destroyed_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_issue_added_monthly`
-
-Count of MAU adding issues to epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210312144719_g_product_planning_epic_issue_added_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_issue_added_weekly`
-
-Count of WAU adding issues to epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210312181918_g_product_planning_epic_issue_added_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_issue_moved_from_project_monthly`
-
-Counts of MAU moving epic issues between projects
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210405190240_g_project_management_epic_issue_moved_from_project_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_issue_moved_from_project_weekly`
-
-Counts of WAU moving epic issues between projects
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210405185814_g_project_management_epic_issue_moved_from_project_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_issue_removed_monthly`
-
-Count of MAU removing issues from epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210401183230_g_project_management_epic_issue_removed_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_issue_removed_weekly`
-
-Counts of WAU removing issues from epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210401182457_g_project_management_g_project_management_epic_issue_removed_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_reopened_monthly`
-
-Counts of MAU closing epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210310164247_g_project_management_epic_reopened_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_reopened_weekly`
-
-Counts of WAU re-opening epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210310164112_g_project_management_epic_reopened_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_users_changing_labels_monthly`
-
-Count of MAU chaging the epic lables
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210312195730_g_project_management_epic_labels_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_users_changing_labels_weekly`
-
-Count of WAU chaging the epic lables
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210312195849_g_project_management_epic_labels_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_issue_promoted_to_epic_monthly`
-
-Count of MAU promoting issues to epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210331193236_g_project_management_issue_promoted_to_epic_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_issue_promoted_to_epic_weekly`
-
-Counts of WAU promoting issues to epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210331192332_g_project_management_issue_promoted_to_epic_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_awarding_epic_emoji_monthly`
-
-Counts of MAU awarding emoji on epic
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210503011217_g_project_management_users_awarding_epic_emoji_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_awarding_epic_emoji_weekly`
-
-Counts of WAU awarding emoji on epic
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210503011355_g_project_management_users_awarding_epic_emoji_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_creating_epic_notes_monthly`
-
-Counts of MAU adding epic notes
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210314215451_g_project_management_users_creating_epic_notes_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_creating_epic_notes_weekly`
-
-Counts of WAU adding epic notes
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210314231518_g_project_management_users_creating_epic_notes_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_destroying_epic_notes_monthly`
-
-Counts of MAU destroying epic notes
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210315034808_g_project_management_users_destroying_epic_notes_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_destroying_epic_notes_weekly`
-
-Counts of WAU destroying epic notes
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210315034846_g_project_management_users_destroying_epic_notes_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_epic_issue_added_from_epic_monthly`
-
-Number of users creating an issue from an epic
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210608191652_g_project_management_users_epic_issue_added_from_epic_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_epic_issue_added_from_epic_weekly`
-
-Number of users creating an issue from an epic
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210608191647_g_project_management_users_epic_issue_added_from_epic_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_removing_epic_emoji_monthly`
-
-Counts of MAU removing emoji on epic
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210505071850_g_project_management_users_removing_epic_emoji_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_removing_epic_emoji_weekly`
-
-Counts of WAU removing emoji on epic
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210505071932_g_project_management_users_removing_epic_emoji_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_setting_epic_confidential_monthly`
-
-Count of MAU making epics confidential
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210310203049_g_project_management_epic_confidential_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_setting_epic_confidential_weekly`
-
-Count of WAU making epics confidential
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210310203225_g_project_management_epic_confidential_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_setting_epic_due_date_as_fixed_monthly`
-
-Counts of MAU setting epic due date as inherited
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210325060507_g_project_management_users_setting_epic_due_date_as_fixed_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_setting_epic_due_date_as_fixed_weekly`
-
-Counts of WAU setting epic due date as fixed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210325060623_g_project_management_users_setting_epic_due_date_as_fixed_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_setting_epic_due_date_as_inherited_monthly`
-
-Counts of MAU setting epic due date as inherited
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210325060315_g_project_management_users_setting_epic_due_date_as_inherited_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_setting_epic_due_date_as_inherited_weekly`
-
-Counts of WAU setting epic due date as inherited
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210325060903_g_project_management_users_setting_epic_due_date_as_inherited_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_setting_epic_start_date_as_fixed_monthly`
-
-Counts of MAU setting epic start date as fixed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210315055624_g_project_management_users_setting_epic_start_date_as_fixed_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_setting_epic_start_date_as_fixed_weekly`
-
-Counts of WAU setting epic start date as fixed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210315054905_g_project_management_users_setting_epic_start_date_as_fixed_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_setting_epic_start_date_as_inherited_monthly`
-
-Counts of MAU setting epic start date as inherited
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210315055439_g_project_management_users_setting_epic_start_date_as_inherited_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_setting_epic_start_date_as_inherited_weekly`
-
-Counts of WAU setting epic start date as inherited
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210315055342_g_project_management_users_setting_epic_start_date_as_inherited_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_setting_epic_visible_monthly`
-
-Count of MAU making epics visible
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210312093611_g_project_management_epic_visible_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_setting_epic_visible_weekly`
-
-Count of WAU making epics visible
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210312093243_g_poject_management_epic_visible_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_updating_epic_descriptions_monthly`
-
-Counts of MAU changing epic descriptions
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210312102051_g_project_management_users_updating_epic_descriptions_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_updating_epic_descriptions_weekly`
-
-Counts of WAU changing epic descriptions
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210312101753_g_project_management_users_updating_epic_descriptions_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_updating_epic_notes_monthly`
-
-Counts of MAU updating epic notes
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210314234202_g_project_management_users_updating_epic_notes_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_updating_epic_notes_weekly`
-
-Counts of WAU updating epic notes
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210314234041_g_project_management_users_updating_epic_notes_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_updating_epic_parent_monthly`
-
-Counts of MAU updating parent on epic
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210423011841_g_project_management_users_updating_epic_parent_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_updating_epic_parent_weekly`
-
-Counts of WAU updating parent on epic
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210423012053_g_project_management_users_updating_epic_parent_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_updating_epic_titles_monthly`
-
-Counts of MAU changing epic titles
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210312101935_g_project_management_users_updating_epic_titles_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_updating_epic_titles_weekly`
-
-Counts of WAU changing epic titles
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210312101826_g_project_management_users_updating_epic_titles_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_updating_fixed_epic_due_date_monthly`
-
-Counts of MAU manually updating fixed due date
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210329043548_g_project_management_users_updating_fixed_epic_due_date_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_updating_fixed_epic_due_date_weekly`
-
-Counts of WAU manually updating fixed due date
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210329042536_g_project_management_users_updating_fixed_epic_due_date_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_updating_fixed_epic_start_date_monthly`
-
-Counts of MAU manually updating fixed start date
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210329043509_g_project_management_users_updating_fixed_epic_start_date_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_updating_fixed_epic_start_date_weekly`
-
-Counts of WAU manually updating fixed start date
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210329043402_g_project_management_users_updating_fixed_epic_start_date_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.project_management_users_checking_epic_task_monthly`
-
-Counts of MAU checking epic task
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210421080207_g_project_management_users_checking_epic_task_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.project_management_users_checking_epic_task_weekly`
-
-Counts of WAU checking epic task
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210421075943_g_project_management_users_checking_epic_task_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.project_management_users_unchecking_epic_task_monthly`
-
-Counts of MAU unchecking epic task
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210421102516_g_project_management_users_unchecking_epic_task_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.project_management_users_unchecking_epic_task_weekly`
-
-Counts of WAU unchecking epic task
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210421102812_g_project_management_users_unchecking_epic_task_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.ide_edit.g_edit_by_sfe_monthly`
-
-Number of users editing a file from the single file editor
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180334_g_edit_by_sfe_monthly.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ide_edit.g_edit_by_sfe_weekly`
-
-Weekly number of users editing from the single file editor
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180332_g_edit_by_sfe_weekly.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ide_edit.g_edit_by_snippet_ide_monthly`
-
-Count of monthly edits to a snippet
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180338_g_edit_by_snippet_ide_monthly.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ide_edit.g_edit_by_snippet_ide_weekly`
-
-Weekly number of users editing Snippets
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180336_g_edit_by_snippet_ide_weekly.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ide_edit.g_edit_by_sse_monthly`
-
-Number of user editing files using the Static Site Editor
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184024_g_edit_by_sse_monthly.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ide_edit.g_edit_by_sse_weekly`
-
-Weekly number of users editing using the Static Site Editor
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184022_g_edit_by_sse_weekly.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ide_edit.g_edit_by_web_ide_monthly`
-
-Number of users editing a file from the Web IDE
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180330_g_edit_by_web_ide_monthly.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ide_edit.g_edit_by_web_ide_weekly`
-
-Weekly number of users editing using the Web IDE
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180328_g_edit_by_web_ide_weekly.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ide_edit.ide_edit_total_unique_counts_monthly`
-
-Count of unique users per month who edited a file from the Web IDE
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180341_ide_edit_total_unique_counts_monthly.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ide_edit.ide_edit_total_unique_counts_weekly`
-
-Weekly number of users editing a file using the Web IDE
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180339_ide_edit_total_unique_counts_weekly.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_alert_assigned_monthly`
-
-Count of unique users assigning an alert per month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180533_incident_management_alert_assigned_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_alert_assigned_weekly`
-
-Count of unique users assigning an alert per week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180532_incident_management_alert_assigned_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_alert_status_changed_monthly`
-
-Count of unique users changing alert's status changes per month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180530_incident_management_alert_status_changed_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_alert_status_changed_weekly`
-
-Count of unique users changing alert's status per week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180528_incident_management_alert_status_changed_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_alert_todo_monthly`
-
-Count of unique users adding alerts to the TODO list per month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180537_incident_management_alert_todo_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_alert_todo_weekly`
-
-Count of unique users adding alerts to the TODO list per week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180535_incident_management_alert_todo_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_assigned_monthly`
-
-Count of users assigning incidents per month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180552_incident_management_incident_assigned_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_assigned_weekly`
-
-Count of unique users assiging incidents per week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180550_incident_management_incident_assigned_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_change_confidential_monthly`
-
-Count of users changing incidents to confidential per month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180618_incident_management_incident_change_confidential_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_change_confidential_weekly`
-
-Count of unique users changing incidents to confidential per week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180616_incident_management_incident_change_confidential_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_closed_monthly`
-
-Count of users closing incidents per month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180548_incident_management_incident_closed_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_closed_weekly`
-
-Count of users closing incidents per week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180546_incident_management_incident_closed_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_comment_monthly`
-
-Count of unique users adding comments per month on incidents
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180559_incident_management_incident_comment_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_comment_weekly`
-
-Count of unique users adding comments on incidents per week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180558_incident_management_incident_comment_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_created_monthly`
-
-Count of unique users creating incidents per month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180541_incident_management_incident_created_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_created_weekly`
-
-Count of unique users creating incidents per week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180539_incident_management_incident_created_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_published_monthly`
-
-Count of unique users that published incidents per month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216180607_incident_management_incident_published_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_published_weekly`
-
-Count of unique users that published incidents per week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216180605_incident_management_incident_published_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_relate_monthly`
-
-Count of unique users adding issues per month that are related to an incident
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180611_incident_management_incident_relate_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_relate_weekly`
-
-Count of unique users adding issues per that are related to an incident week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180609_incident_management_incident_relate_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_reopened_monthly`
-
-Count of unique users reopening incidents per month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180545_incident_management_incident_reopened_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_reopened_weekly`
-
-Count of unique users reopening incidents per week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180543_incident_management_incident_reopened_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_todo_monthly`
-
-Count of unique users adding incidents to the TODO list per month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180556_incident_management_incident_todo_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_todo_weekly`
-
-Count of unique users adding incidents to the TODO list per week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180554_incident_management_incident_todo_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_unrelate_monthly`
-
-Count of users removing issues that are related to an incident per month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180614_incident_management_incident_unrelate_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_unrelate_weekly`
-
-Count of unique users removing issue that are related to an incident per week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180612_incident_management_incident_unrelate_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_zoom_meeting_monthly`
-
-Count of users creating Zoom meetings about incidents per month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180603_incident_management_incident_zoom_meeting_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_zoom_meeting_weekly`
-
-Count of unique users creating Zoom meetings about incidents per week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180601_incident_management_incident_zoom_meeting_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_total_unique_counts_monthly`
-
-Count of unique users performing events related with incidents per month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180622_incident_management_total_unique_counts_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_total_unique_counts_weekly`
-
-Count of unique users performing events related to the incident management
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180620_incident_management_total_unique_counts_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management_alerts.incident_management_alert_create_incident_monthly`
-
-Count of unique users per month to create an incident corresponding to an alert
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180625_incident_management_alert_create_incident_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management_alerts.incident_management_alert_create_incident_weekly`
-
-Count of unique users per week to create an incident corresponding to an alert
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180623_incident_management_alert_create_incident_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management_oncall.i_incident_management_oncall_notification_sent_monthly`
-
-Count of unique users to receive a notification while on-call
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210405222005_i_incident_management_oncall_notification_sent_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management_oncall.i_incident_management_oncall_notification_sent_weekly`
-
-Count of unique users to receive a notification while on-call
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210405220139_i_incident_management_oncall_notification_sent_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_added_to_epic_monthly`
-
-Count of MAU adding an issue to an epic
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181414_g_project_management_issue_added_to_epic_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_added_to_epic_weekly`
-
-Count of WAU adding an issue to an epic
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181413_g_project_management_issue_added_to_epic_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_assignee_changed_monthly`
-
-Count of MAU changing issue assignees
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181311_g_project_management_issue_assignee_changed_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_assignee_changed_weekly`
-
-Count of WAU changing issue assignees
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181310_g_project_management_issue_assignee_changed_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_changed_epic_monthly`
-
-Count of MAU changing the epic on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181420_g_project_management_issue_changed_epic_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_changed_epic_weekly`
-
-Count of WAU changing the epic on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181418_g_project_management_issue_changed_epic_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_cloned_monthly`
-
-Count of MAU cloning an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181501_g_project_management_issue_cloned_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_cloned_weekly`
-
-Count of WAU cloning an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181459_g_project_management_issue_cloned_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_closed_monthly`
-
-Count of MAU closing an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181326_g_project_management_issue_closed_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_closed_weekly`
-
-Count of WAU closing an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181324_g_project_management_issue_closed_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_comment_added_monthly`
-
-Count of MAU commenting on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181446_g_project_management_issue_comment_added_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_comment_added_weekly`
-
-Count of WAU commenting on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181444_g_project_management_issue_comment_added_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_comment_edited_monthly`
-
-Count of MAU editing a comment on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181450_g_project_management_issue_comment_edited_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_comment_edited_weekly`
-
-Count of WAU editing a comment on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181448_g_project_management_issue_comment_edited_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_comment_removed_monthly`
-
-Count of MAU deleting a comment from an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181453_g_project_management_issue_comment_removed_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_comment_removed_weekly`
-
-Count of WAU deleting a comment from an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181451_g_project_management_issue_comment_removed_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_created_monthly`
-
-Count of MAU creating new issues
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181323_g_project_management_issue_created_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_created_weekly`
-
-Count of WAU creating issues
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181321_g_project_management_issue_created_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_cross_referenced_monthly`
-
-Count of MAU referencing an issue from somewhere else
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181348_g_project_management_issue_cross_referenced_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_cross_referenced_weekly`
-
-Count of WAU referencing an issue from somewhere else
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181347_g_project_management_issue_cross_referenced_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_description_changed_monthly`
-
-Count of MAU editing an issue description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181308_g_project_management_issue_description_changed_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_description_changed_weekly`
-
-Count of WAU editing an issue description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181306_g_project_management_issue_description_changed_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_designs_added_monthly`
-
-Count of MAU adding a design to an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181424_g_project_management_issue_designs_added_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_designs_added_weekly`
-
-Count of WAU adding a design to an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181422_g_project_management_issue_designs_added_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_designs_modified_monthly`
-
-Count of MAU modifying a design on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181427_g_project_management_issue_designs_modified_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_designs_modified_weekly`
-
-Count of WAU modifying a design on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181425_g_project_management_issue_designs_modified_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_designs_removed_monthly`
-
-Count of MAU removing a design from an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181431_g_project_management_issue_designs_removed_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_designs_removed_weekly`
-
-Count of WAU removing a design from an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181429_g_project_management_issue_designs_removed_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_due_date_changed_monthly`
-
-Count of MAU changing an issue due date
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181435_g_project_management_issue_due_date_changed_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_due_date_changed_weekly`
-
-Count of WAU changing an issue due date
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181433_g_project_management_issue_due_date_changed_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_health_status_changed_monthly`
-
-Count of MAU changing the health status on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181457_g_project_management_issue_health_status_changed_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_health_status_changed_weekly`
-
-Count of WAU changing the health status on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181455_g_project_management_issue_health_status_changed_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_iteration_changed_monthly`
-
-Count of MAU changing an issue's iteration
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181341_g_project_management_issue_iteration_changed_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_iteration_changed_weekly`
-
-Count of WAU changing an issue's iteration
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181339_g_project_management_issue_iteration_changed_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_label_changed_monthly`
-
-Count of MAU changing an issue's label
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181334_g_project_management_issue_label_changed_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_label_changed_weekly`
-
-Count of WAU changing an issue's label
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181332_g_project_management_issue_label_changed_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_locked_monthly`
-
-Count of MAU locking an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181407_g_project_management_issue_locked_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_locked_weekly`
-
-Count of WAU locking an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181405_g_project_management_issue_locked_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_made_confidential_monthly`
-
-Count of MAU making an issue confidential
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181315_g_project_management_issue_made_confidential_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_made_confidential_weekly`
-
-Count of WAU making an issue confidential
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181313_g_project_management_issue_made_confidential_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_made_visible_monthly`
-
-Count of MAU making an issue not confidential
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181319_g_project_management_issue_made_visible_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_made_visible_weekly`
-
-Count of WAU making an issue not confidential
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181317_g_project_management_issue_made_visible_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_marked_as_duplicate_monthly`
-
-Count of MAU marking an issue as a duplicate
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181403_g_project_management_issue_marked_as_duplicate_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_marked_as_duplicate_weekly`
-
-Count of WAU marking an issue as a duplicate
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181401_g_project_management_issue_marked_as_duplicate_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_milestone_changed_monthly`
-
-Count of MAU changing an issue's milestone
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181337_g_project_management_issue_milestone_changed_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_milestone_changed_weekly`
-
-Count of WAU changing an issue's milestone
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181336_g_project_management_issue_milestone_changed_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_moved_monthly`
-
-Count of MAU moving an issue to another project
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181352_g_project_management_issue_moved_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_moved_weekly`
-
-Count of WAU moving an issue to another project
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181350_g_project_management_issue_moved_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_related_monthly`
-
-Count of MAU relating an issue to another issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181356_g_project_management_issue_related_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_related_weekly`
-
-Count of WAU relating an issue to another issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181354_g_project_management_issue_related_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_removed_from_epic_monthly`
-
-Count of MAU removing an issue from an epic
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181416_g_project_management_issue_removed_from_epic_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_removed_from_epic_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184221_g_project_management_issue_removed_from_epic_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_reopened_monthly`
-
-Count of MAU re-opening a closed issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181330_g_project_management_issue_reopened_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_reopened_weekly`
-
-Count of WAU re-opening a closed issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181328_g_project_management_issue_reopened_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_time_estimate_changed_monthly`
-
-Count of MAU changing an issue time estimate
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181438_g_project_management_issue_time_estimate_changed_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_time_estimate_changed_weekly`
-
-Count of WAU changing an issue time estimate
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181437_g_project_management_issue_time_estimate_changed_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_time_spent_changed_monthly`
-
-Count of MAU recording time spent on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181442_g_project_management_issue_time_spent_changed_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_time_spent_changed_weekly`
-
-Count of WAU recording time spent on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181440_g_project_management_issue_time_spent_changed_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_title_changed_monthly`
-
-Count of MAU editing an issue title
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181304_g_project_management_issue_title_changed_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_title_changed_weekly`
-
-Count of WAU editing an issue title
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210201124931_g_project_management_issue_title_changed_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_unlocked_monthly`
-
-Count of MAU unlocking an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181411_g_project_management_issue_unlocked_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_unlocked_weekly`
-
-Count of WAU unlocking an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181409_g_project_management_issue_unlocked_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_unrelated_monthly`
-
-Count of MAU unrelating an issue to another issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181400_g_project_management_issue_unrelated_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_unrelated_weekly`
-
-Count of WAU unrelating an issue to another issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181358_g_project_management_issue_unrelated_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_weight_changed_monthly`
-
-Count of MAU changing an issue's weight
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181345_g_project_management_issue_weight_changed_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_weight_changed_weekly`
-
-Count of WAU changing an issue's weight
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181343_g_project_management_issue_weight_changed_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.issues_edit_total_unique_counts_monthly`
-
-Aggregate count of MAU taking an action related to an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181504_issues_edit_total_unique_counts_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.issues_edit_total_unique_counts_weekly`
-
-Aggregate count of WAU taking an action related to an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181503_issues_edit_total_unique_counts_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.network_policies.clusters_using_network_policies_ui_monthly`
-
-Monthly number of distinct clusters with network policies using the network policies UI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210623202402_clusters_using_network_policies_ui_monthly.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `implemented`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.network_policies.clusters_using_network_policies_ui_weekly`
-
-Weekly number of distinct clusters with network policies using the network policies UI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210623202358_clusters_using_network_policies_ui_weekly.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `implemented`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.pipeline_authoring.o_pipeline_authoring_unique_users_committing_ciconfigfile_monthly`
-
-Monthly unique user count doing commits which contains the CI config file
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184303_o_pipeline_authoring_unique_users_committing_ciconfigfile_monthly.yml)
-
-Group: `group::pipeline authoring`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.pipeline_authoring.o_pipeline_authoring_unique_users_committing_ciconfigfile_weekly`
-
-Weekly unique user count doing commits which contains the CI config file
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184301_o_pipeline_authoring_unique_users_committing_ciconfigfile_weekly.yml)
-
-Group: `group::pipeline authoring`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.pipeline_authoring.o_pipeline_authoring_unique_users_pushing_mr_ciconfigfile_monthly`
-
-Monthly unique user count having merge requests which contains the CI config file
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210301144228_o_pipeline_authoring_unique_users_pushing_mr_ciconfigfile_monthly.yml)
-
-Group: `group::pipeline authoring`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.pipeline_authoring.o_pipeline_authoring_unique_users_pushing_mr_ciconfigfile_weekly`
-
-Weekly unique user count having merge requests which contains the CI config file
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210301144209_o_pipeline_authoring_unique_users_pushing_mr_ciconfigfile_weekly.yml)
-
-Group: `group::pipeline authoring`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.pipeline_authoring.pipeline_authoring_total_unique_counts_monthly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210427105033_pipeline_authoring_total_unique_counts_monthly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.pipeline_authoring.pipeline_authoring_total_unique_counts_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210427105030_pipeline_authoring_total_unique_counts_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_approve_monthly`
-
-Count of MAU using the `/approve` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181508_i_quickactions_approve_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_approve_weekly`
-
-Count of WAU using the `/approve` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181506_i_quickactions_approve_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_assign_multiple_monthly`
-
-Count of MAU using the `/assign @user1 @user2` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181516_i_quickactions_assign_multiple_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_assign_multiple_weekly`
-
-Count of WAU using the `/assign @user1 @user2` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181514_i_quickactions_assign_multiple_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_assign_reviewer_monthly`
-
-Count of MAU using the `/assign_reviewer` or `request_reviewer` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181523_i_quickactions_assign_reviewer_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_assign_reviewer_weekly`
-
-Count of WAU using the `/assign_reviewer` or `request_reviewer` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181521_i_quickactions_assign_reviewer_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_assign_self_monthly`
-
-Count of MAU using the `/assign me` quick action to assign self to an issuable
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181519_i_quickactions_assign_self_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_assign_self_weekly`
-
-Count of WAU using the `/assign me` quick action to assign self to an issuable
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181517_i_quickactions_assign_self_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_assign_single_monthly`
-
-Count of MAU using the `/assign @user1` quick action to assign a single individual to an issuable
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181512_i_quickactions_assign_single_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_assign_single_weekly`
-
-Count of WAU using the `/assign @user1` quick action to assign a single individual to an issuable
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181510_i_quickactions_assign_single_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_award_monthly`
-
-Count of MAU using the `/award` quick action to set an award emoji on an issuable
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181527_i_quickactions_award_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_award_weekly`
-
-Count of WAU using the `/award` quick action to set an award emoji on an issuable
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181525_i_quickactions_award_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_board_move_monthly`
-
-Count of MAU using the `/board_move` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181530_i_quickactions_board_move_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_board_move_weekly`
-
-Count of WAU using the `/board_move` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181529_i_quickactions_board_move_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_child_epic_monthly`
-
-Count of MAU using the `/child_epic` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181534_i_quickactions_child_epic_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_child_epic_weekly`
-
-Count of WAU using the `/child_epic` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181532_i_quickactions_child_epic_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_clear_weight_monthly`
-
-Count of MAU using the `/clear_weight` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181538_i_quickactions_clear_weight_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_clear_weight_weekly`
-
-Count of WAU using the `/clear_weight` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181536_i_quickactions_clear_weight_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_clone_monthly`
-
-Count of MAU using the `/clone` quick action to clone an issue.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181541_i_quickactions_clone_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_clone_weekly`
-
-Count of WAU using the `/clone` quick action to clone an issue.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181540_i_quickactions_clone_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_close_monthly`
-
-Count of MAU using the `/close` quick action to close an issuable
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181545_i_quickactions_close_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_close_weekly`
-
-Count of WAU using the `/close` quick action to close an issuable
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181543_i_quickactions_close_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_confidential_monthly`
-
-Count of MAU using the `/confidential` quick action to set an issue as confidential
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181549_i_quickactions_confidential_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_confidential_weekly`
-
-Count of WAU using the `/confidential` quick action to set an issue as confidential
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181547_i_quickactions_confidential_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_copy_metadata_issue_monthly`
-
-Count of MAU using the `/copy_metadata` quick action on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181556_i_quickactions_copy_metadata_issue_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_copy_metadata_issue_weekly`
-
-Count of WAU using the `/copy_metadata` quick action on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181554_i_quickactions_copy_metadata_issue_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_copy_metadata_merge_request_monthly`
-
-Count of MAU using the `/copy_metadata` quick action on a Merge Request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181553_i_quickactions_copy_metadata_merge_request_monthly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_copy_metadata_merge_request_weekly`
-
-Count of WAU using the `/copy_metadata` quick action on a Merge Request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181551_i_quickactions_copy_metadata_merge_request_weekly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_create_merge_request_monthly`
-
-Count of MAU using the `/create_merge_request` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181600_i_quickactions_create_merge_request_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_create_merge_request_weekly`
-
-Count of WAU using the `/create_merge_request` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181558_i_quickactions_create_merge_request_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_done_monthly`
-
-Count of MAU using the `/done` quick action to mark a todo as done
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181604_i_quickactions_done_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_done_weekly`
-
-Count of WAU using the `/done` quick action to mark a todo as done
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181602_i_quickactions_done_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_draft_monthly`
-
-Count of MAU using the `/draft` quick action on a Merge Request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181607_i_quickactions_draft_monthly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_draft_weekly`
-
-Count of WAU using the `/draft` quick action on a Merge Request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181605_i_quickactions_draft_weekly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_due_monthly`
-
-Count of MAU using the `/due` quick action to change the due date on an issuable
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181611_i_quickactions_due_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_due_weekly`
-
-Count of WAU using the `/due` quick action to change the due date on an issuable
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181609_i_quickactions_due_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_duplicate_monthly`
-
-Count of MAU using the `/duplicate` quick action to mark an issue as a duplicate of another
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181615_i_quickactions_duplicate_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_duplicate_weekly`
-
-Count of WAU using the `/duplicate` quick action to mark an issue as a duplicate of another
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181613_i_quickactions_duplicate_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_epic_monthly`
-
-Count of MAU using the `/epic` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181618_i_quickactions_epic_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_epic_weekly`
-
-Count of WAU using the `/epic` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181617_i_quickactions_epic_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_estimate_monthly`
-
-Count of MAU using the `/estimate` quick action to set a time estimate on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181622_i_quickactions_estimate_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_estimate_weekly`
-
-Count of WAU using the `/estimate` quick action to set a time estimate on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181620_i_quickactions_estimate_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_invite_email_multiple_monthly`
-
-Unique users using the /invite_email quick action to add a multiple email participants to an issue within 28 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210222041235_i_quickactions_invite_email_multiple_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_invite_email_multiple_weekly`
-
-Unique users using the /invite_email quick action to add a multiple email participants to an issue within 7 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210303154600_i_quickactions_invite_email_multiple_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_invite_email_single_monthly`
-
-Unique users using the /invite_email quick action to add a single email participant to an issue within 28 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210222041219_i_quickactions_invite_email_single_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_invite_email_single_weekly`
-
-Unique users using the /invite_email quick action to add a single email participant to an issue within 7 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210303154557_i_quickactions_invite_email_single_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_iteration_monthly`
-
-Count of MAU using the `/iteration` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181626_i_quickactions_iteration_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_iteration_weekly`
-
-Count of WAU using the `/iteration` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181624_i_quickactions_iteration_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_label_monthly`
-
-Count of MAU using the `/label` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181629_i_quickactions_label_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_label_weekly`
-
-Count of WAU using the `/label` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181628_i_quickactions_label_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_lock_monthly`
-
-Count of MAU using the `/lock` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181633_i_quickactions_lock_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_lock_weekly`
-
-Count of WAU using the `/lock` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181631_i_quickactions_lock_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_merge_monthly`
-
-Count of MAU using the `/merge` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181637_i_quickactions_merge_monthly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_merge_weekly`
-
-Count of WAU using the `/merge` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181635_i_quickactions_merge_weekly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_milestone_monthly`
-
-Count of MAU using the `/milestone` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181641_i_quickactions_milestone_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_milestone_weekly`
-
-Count of WAU using the `/milestone` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181639_i_quickactions_milestone_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_move_monthly`
-
-Count of MAU using the `/move` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181644_i_quickactions_move_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_move_weekly`
-
-Count of WAU using the `/move` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181642_i_quickactions_move_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_parent_epic_monthly`
-
-Count of MAU using the `/parent_epic` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181648_i_quickactions_parent_epic_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_parent_epic_weekly`
-
-Count of WAU using the `/parent_epic` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181646_i_quickactions_parent_epic_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_promote_monthly`
-
-Count of MAU using the `/promote` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181652_i_quickactions_promote_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_promote_weekly`
-
-Count of WAU using the `/promote` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181650_i_quickactions_promote_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_publish_monthly`
-
-Count of MAU using the `/publish` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181655_i_quickactions_publish_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_publish_weekly`
-
-Count of WAU using the `/publish` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181654_i_quickactions_publish_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_reassign_monthly`
-
-Count of MAU using the `/reassign @user1` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181659_i_quickactions_reassign_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_reassign_reviewer_monthly`
-
-Count of MAU using the `/reassign_reviewer` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181703_i_quickactions_reassign_reviewer_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_reassign_reviewer_weekly`
-
-Count of WAU using the `/reassign_reviewer` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181701_i_quickactions_reassign_reviewer_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_reassign_weekly`
-
-Count of WAU using the `/reassign @user1` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181657_i_quickactions_reassign_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_rebase_monthly`
-
-Count of MAU using the `/rebase` quick action on a Merge Request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181707_i_quickactions_rebase_monthly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_rebase_weekly`
-
-Count of WAU using the `/rebase` quick action on a Merge Request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181705_i_quickactions_rebase_weekly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_relabel_monthly`
-
-Count of MAU using the `/relabel` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181710_i_quickactions_relabel_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_relabel_weekly`
-
-Count of WAU using the `/relabel` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181708_i_quickactions_relabel_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_relate_monthly`
-
-Count of MAU using the `/relate` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181714_i_quickactions_relate_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_relate_weekly`
-
-Count of WAU using the `/relate` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181712_i_quickactions_relate_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_child_epic_monthly`
-
-Count of MAU using the `/remove_child_epic` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181718_i_quickactions_remove_child_epic_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_child_epic_weekly`
-
-Count of WAU using the `/remove_child_epic` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181716_i_quickactions_remove_child_epic_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_due_date_monthly`
-
-Count of MAU using the `/remove_due_date` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181721_i_quickactions_remove_due_date_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_due_date_weekly`
-
-Count of WAU using the `/remove_due_date` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181719_i_quickactions_remove_due_date_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_epic_monthly`
-
-Count of MAU using the `/remove_epic` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181725_i_quickactions_remove_epic_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_epic_weekly`
-
-Count of WAU using the `/remove_epic` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181723_i_quickactions_remove_epic_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_estimate_monthly`
-
-Count of MAU using the `/remove_estimate` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181729_i_quickactions_remove_estimate_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_estimate_weekly`
-
-Count of WAU using the `/remove_estimate` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181727_i_quickactions_remove_estimate_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_iteration_monthly`
-
-Count of MAU using the `/remove_iteration` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181732_i_quickactions_remove_iteration_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_iteration_weekly`
-
-Count of WAU using the `/remove_iteration` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181731_i_quickactions_remove_iteration_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_milestone_monthly`
-
-Count of MAU using the `/remove_milestone` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181736_i_quickactions_remove_milestone_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_milestone_weekly`
-
-Count of WAU using the `/remove_milestone` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181734_i_quickactions_remove_milestone_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_parent_epic_monthly`
-
-Count of MAU using the `/remove_parent_epic` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181740_i_quickactions_remove_parent_epic_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_parent_epic_weekly`
-
-Count of WAU using the `/remove_parent_epic` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181738_i_quickactions_remove_parent_epic_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_time_spent_monthly`
-
-Count of MAU using the `/remove_time_spent` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181744_i_quickactions_remove_time_spent_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_time_spent_weekly`
-
-Count of WAU using the `/remove_time_spent` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181742_i_quickactions_remove_time_spent_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_zoom_monthly`
-
-Count of MAU using the `/remove_zoom` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181747_i_quickactions_remove_zoom_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_zoom_weekly`
-
-Count of WAU using the `/remove_zoom` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181745_i_quickactions_remove_zoom_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_reopen_monthly`
-
-Count of MAU using the `/reopen` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181751_i_quickactions_reopen_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_reopen_weekly`
-
-Count of WAU using the `/reopen` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181749_i_quickactions_reopen_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_shrug_monthly`
-
-Count of MAU using the `/shrug` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181755_i_quickactions_shrug_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_shrug_weekly`
-
-Count of WAU using the `/shrug` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181753_i_quickactions_shrug_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_spend_add_monthly`
-
-Count of MAU using the `/spend` quick action to add time spent
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181802_i_quickactions_spend_add_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_spend_add_weekly`
-
-Count of WAU using the `/spend` quick action to add time spent
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181800_i_quickactions_spend_add_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_spend_subtract_monthly`
-
-Count of MAU using the `/spend` quick action to subtract time spent
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181758_i_quickactions_spend_subtract_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_spend_subtract_weekly`
-
-Count of WAU using the `/spend` quick action to subtract time spent
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181756_i_quickactions_spend_subtract_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_submit_review_monthly`
-
-Count of MAU using the `/submit_review` quick action on Merge Requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181806_i_quickactions_submit_review_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_submit_review_weekly`
-
-Count of WAU using the `/submit_review` quick action on Merge Requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181804_i_quickactions_submit_review_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_subscribe_monthly`
-
-Count of MAU using the `/subscribe` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181809_i_quickactions_subscribe_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_subscribe_weekly`
-
-Count of WAU using the `/subscribe` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181808_i_quickactions_subscribe_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_tableflip_monthly`
-
-Count of MAU using the `/tableflip` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181813_i_quickactions_tableflip_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_tableflip_weekly`
-
-Count of WAU using the `/tableflip` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181811_i_quickactions_tableflip_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_tag_monthly`
-
-Count of MAU using the `/tag` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181817_i_quickactions_tag_monthly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_tag_weekly`
-
-Count of WAU using the `/tag` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181815_i_quickactions_tag_weekly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_target_branch_monthly`
-
-Count of MAU using the `/target_branch` quick action on Merge Requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181821_i_quickactions_target_branch_monthly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_target_branch_weekly`
-
-Count of WAU using the `/target_branch` quick action on Merge Requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181819_i_quickactions_target_branch_weekly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_title_monthly`
-
-Count of MAU using the `/title` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181824_i_quickactions_title_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_title_weekly`
-
-Count of WAU using the `/title` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181822_i_quickactions_title_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_todo_monthly`
-
-Count of MAU using the `/todo` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181828_i_quickactions_todo_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_todo_weekly`
-
-Count of WAU using the `/todo` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181826_i_quickactions_todo_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_unassign_all_monthly`
-
-Count of MAU using the `/unassign` quick action on Merge Requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181835_i_quickactions_unassign_all_monthly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_unassign_all_weekly`
-
-Count of WAU using the `/unassign` quick action on Merge Requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181833_i_quickactions_unassign_all_weekly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_unassign_reviewer_monthly`
-
-Count of MAU using the `/unassign_reviewer` or `/remove_reviewer` quick action on Merge Requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181839_i_quickactions_unassign_reviewer_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_unassign_reviewer_weekly`
-
-Count of WAU using the `/unassign_reviewer` or `/remove_reviewer` quick action on Merge Requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181837_i_quickactions_unassign_reviewer_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_unassign_specific_monthly`
-
-Count of MAU using the `/unassign @user1` quick action on Merge Requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181832_i_quickactions_unassign_specific_monthly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_unassign_specific_weekly`
-
-Count of WAU using the `/unassign @user1` quick action on Merge Requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181830_i_quickactions_unassign_specific_weekly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_unlabel_all_monthly`
-
-Count of MAU using the `/unlabel` quick action to remove all labels
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181846_i_quickactions_unlabel_all_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_unlabel_all_weekly`
-
-Count of WAU using the `/unlabel` quick action to remove all labels
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181845_i_quickactions_unlabel_all_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_unlabel_specific_monthly`
-
-Count of MAU using the `/unlabel` or `/remove_label` quick action to remove one or more specific labels
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181843_i_quickactions_unlabel_specific_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_unlabel_specific_weekly`
-
-Count of WAU using the `/unlabel` or `/remove_label` quick action to remove one or more specific labels
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181841_i_quickactions_unlabel_specific_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_unlock_monthly`
-
-Count of MAU using the `/unlock` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181850_i_quickactions_unlock_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_unlock_weekly`
-
-Count of WAU using the `/unlock` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181848_i_quickactions_unlock_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_unsubscribe_monthly`
-
-Count of MAU using the `/unsubscribe` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181854_i_quickactions_unsubscribe_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_unsubscribe_weekly`
-
-Count of WAU using the `/unsubscribe` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181852_i_quickactions_unsubscribe_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_weight_monthly`
-
-Count of MAU using the `/weight` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181857_i_quickactions_weight_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_weight_weekly`
-
-Count of WAU using the `/weight` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181856_i_quickactions_weight_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_wip_monthly`
-
-Count of MAU using the `/wip` quick action on Merge Requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181901_i_quickactions_wip_monthly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_wip_weekly`
-
-Count of WAU using the `/wip` quick action on Merge Requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181859_i_quickactions_wip_weekly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_zoom_monthly`
-
-Count of MAU using the `/zoom` quick action on Issues
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181905_i_quickactions_zoom_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_zoom_weekly`
-
-Count of WAU using the `/zoom` quick action on Issues
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181903_i_quickactions_zoom_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.quickactions_total_unique_counts_monthly`
-
-Count of MAU using one or more quick actions
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184803_quickactions_total_unique_counts_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.quickactions_total_unique_counts_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184801_quickactions_total_unique_counts_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.search.i_search_advanced_monthly`
-
-Calculated unique users to perform Advanced searches by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216180427_i_search_advanced_monthly.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.search.i_search_advanced_weekly`
-
-Calculated unique users to perform Advanced searches by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216180425_i_search_advanced_weekly.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.search.i_search_paid_monthly`
-
-Calculated unique users to perform a search with a paid license enabled by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216184035_i_search_paid_monthly.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.search.i_search_paid_weekly`
-
-Calculated unique users to perform a search with a paid license enabled by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184033_i_search_paid_weekly.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.search.i_search_total_monthly`
-
-Calculated unique users to perform Basic or Advanced searches by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180424_i_search_total_monthly.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.search.i_search_total_weekly`
-
-Calculated unique users to perform Basic or Advanced searches by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180422_i_search_total_weekly.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.search.search_total_unique_counts_monthly`
-
-Total unique users for i_search_total, i_search_advanced, i_search_paid for recent 28 days. This metric is redundant because advanced will be a subset of paid and paid will be a subset of total. i_search_total is more appropriate if you just want the total
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180431_search_total_unique_counts_monthly.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.search.search_total_unique_counts_weekly`
-
-Calculated unique users to perform Basic or Advanced searches by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180429_search_total_unique_counts_weekly.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.secure.users_expanding_secure_security_report_monthly`
-
-Count of expanding the security report widget
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210409095855_users_expanding_secure_security_report_monthly.yml)
-
-Group: `group::static analysis`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.secure.users_expanding_secure_security_report_weekly`
-
-Count of expanding the security report widget
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210409095855_users_expanding_secure_security_report_weekly.yml)
-
-Group: `group::static analysis`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.snippets.i_snippets_show_monthly`
-
-Monthly number of users viewing snippets
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184255_i_snippets_show_monthly.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.snippets.i_snippets_show_weekly`
-
-Weekly number of users viewing snippets
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184253_i_snippets_show_weekly.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.source_code.design_action_monthly`
-
-Count of total design actions (upload, delete, comment, reply)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216182106_design_action_monthly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.source_code.design_action_weekly`
-
-Count of total design actions (upload, delete, comment, reply)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216182104_design_action_weekly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.source_code.git_write_action_monthly`
-
-Count of unique Git write actions
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184047_git_write_action_monthly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.source_code.git_write_action_weekly`
-
-Count of unique Git write actions
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184045_git_write_action_weekly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.source_code.i_source_code_code_intelligence_monthly`
-
-Count of unique users who use code intelligence
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175117_i_source_code_code_intelligence_monthly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.source_code.i_source_code_code_intelligence_weekly`
-
-Count of unique users who use code intelligence
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175114_i_source_code_code_intelligence_weekly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.source_code.merge_request_action_monthly`
-
-Count of unique users who perform an action on a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175113_merge_request_action_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.source_code.merge_request_action_weekly`
-
-Count of unique users who perform an action on a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175111_merge_request_action_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.source_code.project_action_monthly`
-
-Count of unique actions done on projects and related resources (create, edit, delete, comment)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216182109_project_action_monthly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.source_code.project_action_weekly`
-
-Count of unique actions done on projects and related resources (create, edit, delete, comment)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216182107_project_action_weekly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.source_code.wiki_action_monthly`
-
-Count of unique actions done on a wiki (create, edit, delete)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216182102_wiki_action_monthly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.source_code.wiki_action_weekly`
-
-Count of unique actions done on a wiki (create, edit, delete)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216182100_wiki_action_weekly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.terraform.p_terraform_state_api_unique_users_monthly`
-
-Monthly active users of GitLab Managed Terraform states
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184259_p_terraform_state_api_unique_users_monthly.yml)
-
-Group: `group::configure`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.terraform.p_terraform_state_api_unique_users_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184257_p_terraform_state_api_unique_users_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.testing.i_testing_full_code_quality_report_total_monthly`
-
-Count of unique users per week|month who visit the full code quality report
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182147_i_testing_full_code_quality_report_total_monthly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_full_code_quality_report_total_weekly`
-
-Count of unique users per week who visit the full code quality report
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216182145_i_testing_full_code_quality_report_total_weekly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_group_code_coverage_project_click_total_monthly`
-
-Aggregated count of unique users who have clicked from group code coverage page to an individual project page each month.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182153_i_testing_group_code_coverage_project_click_total_monthly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_group_code_coverage_project_click_total_weekly`
-
-Aggregated count of unique users who have clicked from group code coverage page to an individual project page each week.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184132_i_testing_group_code_coverage_project_click_total_weekly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_group_code_coverage_visit_total_monthly`
-
-Count of unique users per month who visited the group code coverage page
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182143_i_testing_group_code_coverage_visit_total_monthly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_group_code_coverage_visit_total_weekly`
-
-Count of unique users per week who visited the group code coverage page
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216182141_i_testing_group_code_coverage_visit_total_weekly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_load_performance_widget_total_monthly`
-
-Count of unique users per month who expanded the load performance report MR widget
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182156_i_testing_load_performance_widget_total_monthly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_load_performance_widget_total_weekly`
-
-Count of unique users per week who expanded the load performance report MR widget
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216182154_i_testing_load_performance_widget_total_weekly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_metrics_report_artifact_uploaders_monthly`
-
-Tracks number of metrics reports uploaded monthly.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182200_i_testing_metrics_report_artifact_uploaders_monthly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_metrics_report_artifact_uploaders_weekly`
-
-Count of unique users per week who trigger a pipeline that uploads a metrics report.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216182158_i_testing_metrics_report_artifact_uploaders_weekly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_metrics_report_widget_total_monthly`
-
-Count of unique users per month who expanded the metrics report MR widget
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182139_i_testing_metrics_report_widget_total_monthly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_metrics_report_widget_total_weekly`
-
-Count of unique users per week who expanded the metrics report MR widget
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216182138_i_testing_metrics_report_widget_total_weekly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_summary_widget_total_monthly`
-
-Unique users that expand the test summary merge request widget by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210413205507_i_testing_summary_widget_total_monthly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_summary_widget_total_weekly`
-
-Unique users that expand the test summary merge request widget by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210413205507_i_testing_summary_widget_total_weekly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_test_case_parsed_monthly`
-
-Internal Tracking to count number of unit tests parsed for planning of future code testing features. Data available [here](https://app.periscopedata.com/app/gitlab/788674/Verify:Testing-Group-Metrics?widget=10454394&udv=0)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216182136_i_testing_test_case_parsed_monthly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_test_case_parsed_weekly`
-
-Internal Tracking to count number of unit tests parsed for planning of future code testing features. Data available [here](https://app.periscopedata.com/app/gitlab/788674/Verify:Testing-Group-Metrics?widget=10454394&udv=0)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216182134_i_testing_test_case_parsed_weekly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_web_performance_widget_total_monthly`
-
-Count of unique users per month who expanded the browser performance report MR widget
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182151_i_testing_web_performance_widget_total_monthly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_web_performance_widget_total_weekly`
-
-Count of unique users per week who expanded the browser performance report MR widget
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216182149_i_testing_web_performance_widget_total_weekly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.testing.testing_total_unique_counts_monthly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184140_testing_total_unique_counts_monthly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`
-
-### `redis_hll_counters.testing.testing_total_unique_counts_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184138_testing_total_unique_counts_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.testing.users_expanding_testing_accessibility_report_monthly`
-
-Count of expanding the accessibility report widget
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210409100628_users_expanding_testing_accessibility_report_monthly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.testing.users_expanding_testing_accessibility_report_weekly`
-
-Count of expanding the accessibility report widget
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210409100628_users_expanding_testing_accessibility_report_weekly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.testing.users_expanding_testing_code_quality_report_monthly`
-
-Count of expanding the code quality widget
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210409100451_users_expanding_testing_code_quality_report_monthly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.testing.users_expanding_testing_code_quality_report_weekly`
-
-Count of expanding the code quality widget
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210409100451_users_expanding_testing_code_quality_report_weekly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_composer_user_monthly`
-
-A monthly count of users that have published a Composer package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184854_i_package_composer_user_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_composer_user_weekly`
-
-A weekly count of users that have published a Composer package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184852_i_package_composer_user_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_conan_user_monthly`
-
-A monthly count of users that have published a Conan package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184858_i_package_conan_user_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_conan_user_weekly`
-
-A weekly count of users that have published a Conan package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184856_i_package_conan_user_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_container_user_monthly`
-
-A monthly count of users that have published a container image to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184902_i_package_container_user_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_container_user_weekly`
-
-A weekly count of users that have published a container image to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184900_i_package_container_user_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_debian_user_monthly`
-
-A monthly count of users that have published a Debian package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184906_i_package_debian_user_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_debian_user_weekly`
-
-A weekly count of users that have published a Debian package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184904_i_package_debian_user_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_generic_user_monthly`
-
-A monthly count of users that have published a generic package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184910_i_package_generic_user_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `broken`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_generic_user_weekly`
-
-A weekly count of users that have published a generic package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184908_i_package_generic_user_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `broken`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_golang_user_monthly`
-
-A monthly count of users that have published a Go moduleto the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184913_i_package_golang_user_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_golang_user_weekly`
-
-A weekly count of users that have published a Go module to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184911_i_package_golang_user_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_helm_user_monthly`
-
-Distinct user count events for Helm packages in recent 28 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210517075259_i_package_helm_user_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_helm_user_weekly`
-
-Distinct user count events for Helm packages in recent 7 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210517075252_i_package_helm_user_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_maven_user_monthly`
-
-A monthly count of users that have published a Maven package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184917_i_package_maven_user_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_maven_user_weekly`
-
-A weekly count of users that have published a Maven package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184916_i_package_maven_user_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_npm_user_monthly`
-
-A monthly count of users that have published an npm package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184921_i_package_npm_user_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_npm_user_weekly`
-
-A weekly count of users that have published an npm package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184919_i_package_npm_user_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_nuget_user_monthly`
-
-A monthly count of users that have published a NuGet package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184925_i_package_nuget_user_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_nuget_user_weekly`
-
-A weekly count of users that have published a NuGet package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184923_i_package_nuget_user_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_pypi_user_monthly`
-
-A monthly count of users that have published a PyPI package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184929_i_package_pypi_user_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_pypi_user_weekly`
-
-A weekly count of users that have published a Python package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184927_i_package_pypi_user_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_rubygems_user_monthly`
-
-Distinct user count of RubyGems packages published in recent 28 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210303154654_i_package_rubygems_user_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_rubygems_user_weekly`
-
-A weekly count of distinct RubyGems packages published by a user
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210303154652_i_package_rubygems_user_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_tag_user_monthly`
-
-A monthly count of users that have published a package tag to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184933_i_package_tag_user_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_tag_user_weekly`
-
-A weekly count of users that have published a package with a tag to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184931_i_package_tag_user_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_terraform_module_user_monthly`
-
-Number of distinct users creating Terraform Module packages in recent 28 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210410012208_i_package_terraform_module_user_monthly.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_terraform_module_user_weekly`
-
-Number of distinct users creating Terraform Module packages in recent 7 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210410012209_i_package_terraform_module_user_weekly.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.user_packages_total_unique_counts_monthly`
-
-A monthly count of users that have published a package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184937_user_packages_total_unique_counts_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.user_packages_total_unique_counts_weekly`
-
-A weekly count of users that have published a package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184935_user_packages_total_unique_counts_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `reply_by_email_enabled`
-
-Whether incoming email is setup
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210204124916_reply_by_email_enabled.yml)
-
-Group: `group::certify`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `search_unique_visits.i_search_advanced`
-
-Calculated unique users to perform Advanced searches by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180418_i_search_advanced.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `search_unique_visits.i_search_paid`
-
-Calculated unique users to perform a search with a paid license enabled by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180420_i_search_paid.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `search_unique_visits.i_search_total`
-
-Calculated unique users to perform Basic or Advanced searches by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180416_i_search_total.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `search_unique_visits.search_unique_visits_for_any_target_monthly`
-
-Total unique users for i_search_total, i_search_advanced, i_search_paid for recent 28 days. This metric is redundant because advanced will be a subset of paid and paid will be a subset of total. i_search_total is more appropriate if you just want the total
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183922_search_unique_visits_for_any_target_monthly.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `search_unique_visits.search_unique_visits_for_any_target_weekly`
-
-Total unique users for i_search_total, i_search_advanced, i_search_paid for recent 7 days. This metric is redundant because advanced will be a subset of paid and paid will be a subset of total. i_search_total is more appropriate if you just want the total
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216183920_search_unique_visits_for_any_target_weekly.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `settings.gitaly_apdex`
-
-Gitaly application performance
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210321224827_gitaly_apdex.yml)
-
-Group: `group::gitaly`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `settings.ldap_encrypted_secrets_enabled`
-
-Is encrypted LDAP secrets configured?
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216175606_ldap_encrypted_secrets_enabled.yml)
-
-Group: `group::distribution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `settings.operating_system`
-
-Information about the operating system running GitLab
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210225045628_operating_system.yml)
-
-Group: `group::distribution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `signup_enabled`
-
-Whether public signup is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210204124918_signup_enabled.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `topology`
-
-Topology data
-
-[Object JSON schema](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/objects_schemas/topology_schema.json)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210323120839_topology.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.clusters_applications_cert_managers`
-
-Total GitLab Managed clusters with GitLab Managed App:Cert Manager installed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175329_clusters_applications_cert_managers.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.clusters_applications_helm`
-
-Total GitLab Managed clusters with GitLab Managed App:Helm enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175331_clusters_applications_helm.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.clusters_applications_ingress`
-
-Total GitLab Managed clusters with GitLab Managed App:Ingress installed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175333_clusters_applications_ingress.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.clusters_applications_knative`
-
-Total GitLab Managed clusters with GitLab Managed App:Knative installed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175335_clusters_applications_knative.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.clusters_disabled`
-
-Total GitLab Managed disabled clusters
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175339_clusters_disabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.clusters_enabled`
-
-Total GitLab Managed clusters currently enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175341_clusters_enabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.clusters_management_project`
-
-Total GitLab Managed clusters with defined cluster management project
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175337_clusters_management_project.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.clusters_platforms_eks`
-
-Total GitLab Managed clusters provisioned with GitLab on AWS EKS
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175345_clusters_platforms_eks.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.clusters_platforms_gke`
-
-Total GitLab Managed clusters provisioned with GitLab on GCE GKE
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175343_clusters_platforms_gke.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.clusters_platforms_user`
-
-Total GitLab Managed clusters that are user provisioned
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175346_clusters_platforms_user.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.group_clusters_disabled`
-
-Total GitLab Managed disabled clusters attached to groups
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175352_group_clusters_disabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.group_clusters_enabled`
-
-Total GitLab Managed enabled clusters attached to groups
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175354_group_clusters_enabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.instance_clusters_disabled`
-
-Total GitLab Managed disabled clusters attached to the instance
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175348_instance_clusters_disabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.instance_clusters_enabled`
-
-Total GitLab Managed enabled clusters attached to the instance
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175350_instance_clusters_enabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.project_clusters_disabled`
-
-Total GitLab Managed disabled clusters attached to projects
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175356_project_clusters_disabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.project_clusters_enabled`
-
-Total GitLab Managed enabled clusters attached to projects
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175358_project_clusters_enabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.projects_slack_notifications_active`
-
-Unique projects with Slack webhook enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175400_projects_slack_notifications_active.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `usage_activity_by_stage.configure.projects_slack_slash_active`
-
-Unique projects with Slack ‘/’ commands enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175402_projects_slack_slash_active.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `usage_activity_by_stage.configure.projects_with_prometheus_alerts`
-
-Projects with Prometheus alerting enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175403_projects_with_prometheus_alerts.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.approval_project_rules`
-
-Total number of project approval rules
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182030_approval_project_rules.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.approval_project_rules_with_exact_required_approvers`
-
-Number of approval rules with the exact number of required approvers.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216183355_approval_project_rules_with_exact_required_approvers.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.approval_project_rules_with_less_approvers_than_required`
-
-Number of approval rules with fewer approvers than required.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216183354_approval_project_rules_with_less_approvers_than_required.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.approval_project_rules_with_more_approvers_than_required`
-
-Number of approval rules with more approvers than required.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216183352_approval_project_rules_with_more_approvers_than_required.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.approval_project_rules_with_target_branch`
-
-Number of project approval rules scoped to a specific repo branch.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182032_approval_project_rules_with_target_branch.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.deploy_keys`
-
-Count of users creating deploy keys.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182010_deploy_keys.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.keys`
-
-Count of users creating regular keys.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182012_keys.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.merge_requests`
-
-Count of the number of users creating merge requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175045_merge_requests.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.merge_requests_with_added_rules`
-
-Merge requests with added rules
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175047_merge_requests_with_added_rules.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.merge_requests_with_optional_codeowners`
-
-Count of merge requests with optional codeowner approval rules
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175049_merge_requests_with_optional_codeowners.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.merge_requests_with_overridden_project_rules`
-
-Number of merge requests that have overridden rules created at the project level.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216183339_merge_requests_with_overridden_project_rules.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.merge_requests_with_required_codeowners`
-
-Count of merge requests with required codeowner approval rules
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175051_merge_requests_with_required_codeowners.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.projects_enforcing_code_owner_approval`
-
-Count of users creating projects that require approval by code owners for code changes.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182019_projects_enforcing_code_owner_approval.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.projects_imported_from_github`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180630_projects_imported_from_github.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.create.projects_with_disable_overriding_approvers_per_merge_request`
-
-Total count of projects that do not allow overriding approvers on discrete merge requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182014_projects_with_disable_overriding_approvers_per_merge_request.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.projects_with_repositories_enabled`
-
-Count of projects that have a matching Git repository, result of a Git push action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182023_projects_with_repositories_enabled.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.projects_with_sectional_code_owner_rules`
-
-Count of projects using code owners with code owners section feature
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182021_projects_with_sectional_code_owner_rules.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.projects_without_disable_overriding_approvers_per_merge_request`
-
-Count of total projects that do not disable overriding approvers per discrete merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182015_projects_without_disable_overriding_approvers_per_merge_request.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.protected_branches`
-
-Count of users creating projects with repositories making use of at least one protected branch.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182025_protected_branches.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.remote_mirrors`
-
-Count of users creating projects with remote mirrors.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182017_remote_mirrors.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.snippets`
-
-Count of distinct author_id from snippets
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180316_snippets.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.suggestions`
-
-Count of unique users who create suggestions in merge request comments
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175053_suggestions.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.total_number_of_locked_files`
-
-The total number of files which have been locked via the GitLab UI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182028_total_number_of_locked_files.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.total_number_of_path_locks`
-
-Number of paths/directories manually locked through the UI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182027_total_number_of_path_locks.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.users_using_lfs_locks`
-
-Number of unique users who have locked files or directories using LFS via the command line
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216183346_users_using_lfs_locks.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.users_using_path_locks`
-
-Number of users who have manually locked paths/directories through the UI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216183344_users_using_path_locks.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.enablement.counts.geo_node_usage.git_fetch_event_count_weekly`
-
-Number of Git fetch events from Prometheus on the Geo secondary
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210309194425_git_fetch_event_count_weekly.yml)
-
-Group: `group::geo`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.enablement.counts.geo_node_usage.git_push_event_count_weekly`
-
-Number of Git push events from Prometheus on the Geo secondary
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210604110603_git_push_event_count_weekly.yml)
-
-Group: `group::geo`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.enablement.geo_secondary_web_oauth_users`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210427212450_geo_secondary_web_oauth_users.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.bulk_imports.gitlab`
-
-Distinct count of users that triggered an import using the Group Migration tool
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180634_gitlab.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.bulk_imports.gitlab_v1`
-
-Count of imports using GitLab Migration
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180636_gitlab_v1.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.compliance_frameworks_with_pipeline`
-
-Count of compliance frameworks that have a pipeline configuration
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210622123800_compliance_frameworks_with_pipeline.yml)
-
-Group: `compliance`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.manage.custom_compliance_frameworks`
-
-Total count of all custom compliance framework labels
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210430081610_custom_compliance_frameworks.yml)
-
-Group: `compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.events`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180754_events.yml)
-
-Group: `group::manage`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.group_imports.gitlab_migration`
-
-Count of groups imported using GitLab Migration
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180703_gitlab_migration.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.group_imports.group_import`
-
-Count of group imports using Group Import/Export
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180702_group_import.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.group_saml_enabled`
-
-Has the instance enabled Group SAML SSO `https://docs.gitlab.com/ee/user/group/saml_sso/` on at least 1 group?
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/settings/20210216180813_group_saml_enabled.yml)
-
-Group: `group::manage`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`
-
-### `usage_activity_by_stage.manage.groups`
-
-Number of users who are group members.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180756_groups.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.groups_imported`
-
-Distinct count of users that imported groups using Group Import
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180729_groups_imported.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.issue_imports.csv`
-
-Count of (attempted) imports from csv files
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180700_csv.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.issue_imports.fogbugz`
-
-Count of projects imported from fogbugz
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180656_fogbugz.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.issue_imports.jira`
-
-Count of projects imported from Jira
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180654_jira.yml)
-
-Group: `group::import`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.issue_imports.phabricator`
-
-Count of projects imported from phabricator
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180658_phabricator.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.issues_imported.csv`
-
-Distinct count of users that imported issues into projects using CSV upload
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180727_csv.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.issues_imported.fogbugz`
-
-Distinct count of users that imported issues into projects using FogBugz
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180724_fogbugz.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.issues_imported.jira`
-
-Distinct count of users that imported issues into projects using Jira
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180722_jira.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.issues_imported.phabricator`
-
-Distinct count of users that imported issues into projects using Phabricator
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180726_phabricator.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.ldap_admin_sync_enabled`
-
-Has the instance configured [LDAP Admin Sync](https://docs.gitlab.com/ee/administration/auth/ldap/#administrator-sync)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/settings/20210216180811_ldap_admin_sync_enabled.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.ldap_group_sync_enabled`
-
-Has the instance configured [LDAP Group Sync](https://docs.gitlab.com/ee/administration/auth/ldap/#group-sync)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/settings/20210216180809_ldap_group_sync_enabled.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.ldap_keys`
-
-Number of users creating keys synced as part of LDAP
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180800_ldap_keys.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.ldap_servers`
-
-Number of [LDAP servers configured for the instance](https://docs.gitlab.com/ee/administration/auth/ldap/#multiple-ldap-servers)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180807_ldap_servers.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.ldap_users`
-
-Number of users that are linked to LDAP
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180801_ldap_users.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.omniauth_providers`
-
-Number of unique user logins using an OmniAuth provider
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183400_omniauth_providers.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.project_imports.bitbucket`
-
-Count of projects imported from Bitbucket
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180643_bitbucket.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.project_imports.bitbucket_server`
-
-Count of projects imported from Bitbucket Server
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180645_bitbucket_server.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.project_imports.git`
-
-Count of projects imported by URL
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180649_git.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.project_imports.gitea`
-
-Count of projects imported from Gitea
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180647_gitea.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.project_imports.github`
-
-Count of projects imported from GitHub
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180641_github.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.project_imports.gitlab`
-
-Count of projects imported from GitLab.com
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180639_gitlab.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.project_imports.gitlab_migration`
-
-Count of projects imported using GitLab Migration
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180652_gitlab_migration.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.project_imports.gitlab_project`
-
-Count of projects imported using Project Import/Export
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180638_gitlab_project.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.project_imports.manifest`
-
-Count of projects imported using manifst file
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180650_manifest.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.project_imports.total`
-
-Count number of projects imported monthly
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210514141520_project_imports_total.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.projects_imported.bitbucket`
-
-Distinct count of users that imported projects from Bitbucket Cloud
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180713_bitbucket.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.projects_imported.bitbucket_server`
-
-Distinct count of users that imported projects from Bitbucket Server
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180715_bitbucket_server.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.projects_imported.git`
-
-Distinct count of users that imported projects using Import by URL
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180718_git.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.projects_imported.gitea`
-
-Distinct count of users that imported projects from Gitea
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180716_gitea.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.projects_imported.github`
-
-Distinct count of users that imported projects from GitHub
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180711_github.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.projects_imported.gitlab`
-
-Distinct count of users that imported projects from GitLab.com
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180709_gitlab.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.projects_imported.gitlab_project`
-
-Distinct count of users that imported projects using Project Import/Export
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180707_gitlab_project.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.projects_imported.manifest`
-
-Distinct count of users that imported projects using Manifest file
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180720_manifest.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.projects_imported.total`
-
-Total count of all projects imported with import_source NOT NULL
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180705_total.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.projects_with_compliance_framework`
-
-Number of projects labeled with a compliance framework label [see](https://gitlab.com/gitlab-org/gitlab/-/issues/118671)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180805_projects_with_compliance_framework.yml)
-
-Group: `group::manage`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `usage_activity_by_stage.manage.unique_users_all_imports`
-
-Distinct count of users that triggered any kind of import
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180632_unique_users_all_imports.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.user_auth_by_provider.google_oauth2`
-
-Number of unique user logins using Google OAuth authentication
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183410_google_oauth2.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.user_auth_by_provider.standard`
-
-Number of unique user logins using password authentication
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183408_standard.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.user_auth_by_provider.two-factor`
-
-Number of unique user logins using two factor authentication
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183402_two-factor.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.user_auth_by_provider.two-factor-via-u2f-device`
-
-Number of unique user logins using two factor via a U2F device
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183404_two-factor-via-u2f-device.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.user_auth_by_provider.two-factor-via-webauthn-device`
-
-Number of unique user logins using two factor via a WebAuthn device
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183406_two-factor-via-webauthn-device.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.users_created`
-
-Number of users
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180758_users_created.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.value_stream_management_customized_group_stages`
-
-Number of custom value stream analytics stages.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180803_value_stream_management_customized_group_stages.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.monitor.clusters`
-
-Users creating clusters.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180945_clusters.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.monitor.clusters_applications_prometheus`
-
-Users creating clusters with Prometheus enabled.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180947_clusters_applications_prometheus.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.monitor.operations_dashboard_default_dashboard`
-
-Active users with enabled operations dashboard
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180949_operations_dashboard_default_dashboard.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`
-
-### `usage_activity_by_stage.monitor.operations_dashboard_users_with_projects_added`
-
-Active users with projects on operations dashboard
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180953_operations_dashboard_users_with_projects_added.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.monitor.projects_incident_sla_enabled`
-
-Projects where Incident SLA is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180522_projects_incident_sla_enabled.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.monitor.projects_with_alert_incidents`
-
-Count of unique projects with an incident from an alert
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180520_projects_with_alert_incidents.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.monitor.projects_with_enabled_alert_integrations_histogram`
-
-Histogram (buckets 1 to 100) of projects with at least 1 enabled integration.
-
-[Object JSON schema](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/objects_schemas/projects_with_enabled_alert_integrations_histogram.json)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210309165717_projects_with_enabled_alert_integrations_histogram.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.monitor.projects_with_error_tracking_enabled`
-
-Projects where error tracking is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180517_projects_with_error_tracking_enabled.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.monitor.projects_with_incidents`
-
-Count of unique projects with an incident
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180518_projects_with_incidents.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.monitor.projects_with_tracing_enabled`
-
-Projects with tracing enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180951_projects_with_tracing_enabled.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.package.projects_with_packages`
-
-Projects with package registry enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181055_projects_with_packages.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.plan.assignee_lists`
-
-Count of users creating assignee lists on Boards
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216181132_assignee_lists.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.plan.epics`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181134_epics.yml)
-
-Group: `group::plan`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.plan.issues`
-
-Count of users creating Issues
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181115_issues.yml)
-
-Group: `group::project management`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.plan.label_lists`
-
-Count of users creating label lists on Boards
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181135_label_lists.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.plan.milestone_lists`
-
-Count of users creating milestone lists on Boards
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216181137_milestone_lists.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.plan.notes`
-
-Count of users creating Notes on Issues
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181117_notes.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.plan.projects`
-
-Count of users creating projects
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181119_projects.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.plan.projects_jira_active`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181126_projects_jira_active.yml)
-
-Group: `group::plan`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.plan.projects_jira_dvcs_cloud_active`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181128_projects_jira_dvcs_cloud_active.yml)
-
-Group: `group::plan`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.plan.projects_jira_dvcs_server_active`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181130_projects_jira_dvcs_server_active.yml)
-
-Group: `group::plan`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.plan.service_desk_enabled_projects`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181122_service_desk_enabled_projects.yml)
-
-Group: `group::plan`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.plan.service_desk_issues`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181124_service_desk_issues.yml)
-
-Group: `group::plan`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.plan.todos`
-
-Count of users todos created
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181121_todos.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.release.deployments`
-
-Unique users triggering deployments
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181926_deployments.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.release.failed_deployments`
-
-Total failed deployments
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181928_failed_deployments.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.release.projects_mirrored_with_pipelines_enabled`
-
-Count creator_id from projects with repository mirroring enabled.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216181934_projects_mirrored_with_pipelines_enabled.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.release.releases`
-
-Unique users creating release tags
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181930_releases.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.release.successful_deployments`
-
-Total successful deployments
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181932_successful_deployments.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.secure.api_fuzzing_scans`
-
-Counts API fuzzing jobs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180353_api_fuzzing_scans.yml)
-
-Group: `group::fuzz testing`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers:
-
-### `usage_activity_by_stage.secure.cluster_image_scanning_scans`
-
-Counts cluster image scanning jobs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210618124854_cluster_image_scanning_scans.yml)
-
-Group: `group::container security`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.container_scanning_scans`
-
-Counts container scanning jobs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175503_container_scanning_scans.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.coverage_fuzzing_scans`
-
-Counts fuzzing jobs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180352_coverage_fuzzing_scans.yml)
-
-Group: `group::fuzz testing`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers:
-
-### `usage_activity_by_stage.secure.dast_scans`
-
-Counts dast jobs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182122_dast_scans.yml)
-
-Group: `group::dynamic analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.dependency_scanning_scans`
-
-Total number of users running Dependency Scanning Scans
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175220_dependency_scanning_scans.yml)
-
-Group: `group::composition analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.sast_scans`
-
-Counts sast jobs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182120_sast_scans.yml)
-
-Group: `group::static analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.secret_detection_scans`
-
-counts secret detection jobs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182123_secret_detection_scans.yml)
-
-Group: `group::static analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.user_api_fuzzing_dnd_jobs`
-
-Count of API Fuzzing `docker-in-docker` jobs by job name
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180350_user_api_fuzzing_dnd_jobs.yml)
-
-Group: `group::fuzz testing`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.secure.user_api_fuzzing_jobs`
-
-Count of API Fuzzing jobs by job name
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180348_user_api_fuzzing_jobs.yml)
-
-Group: `group::fuzz testing`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.secure.user_api_fuzzing_scans`
-
-Number of users who have run a API Fuzzing scan
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210607044126_user_api_fuzzing_scans.yml)
-
-Group: `category::fuzz testing`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.user_container_scanning_jobs`
-
-Distinct count per user of Container Scanning jobs run
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175501_user_container_scanning_jobs.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.user_container_scanning_scans`
-
-Number of users who have run a Container Scanning scan
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210607043902_user_container_scanning_scans.yml)
-
-Group: `group::composition analysis`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.user_coverage_fuzzing_jobs`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183514_user_coverage_fuzzing_jobs.yml)
-
-Group: ``
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.secure.user_coverage_fuzzing_scans`
-
-Number of users who have run a Coverage Fuzzing scan
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210607044040_user_coverage_fuzzing_scans.yml)
-
-Group: `category::fuzz testing`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.user_dast_jobs`
-
-Count of DAST jobs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175614_user_dast_jobs.yml)
-
-Group: `group::dynamic analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.secure.user_dast_scans`
-
-Number of users who have run a DAST scan
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210607043109_user_dast_scans.yml)
-
-Group: `group::dynamic analysis`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.user_dependency_scanning_jobs`
-
-Total number of users running Dependency Scanning jobs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175216_user_dependency_scanning_jobs.yml)
-
-Group: `group::composition analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.user_dependency_scanning_scans`
-
-Number of users who have run a Dependency Scanning scan
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210607043819_user_dependency_scanning_scans.yml)
-
-Group: `group::composition analysis`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.user_license_management_jobs`
-
-Total number of users running License Scanning jobs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175218_user_license_management_jobs.yml)
-
-Group: `group::composition analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.user_preferences_group_overview_security_dashboard`
-
-Users who set personal preference to see Details on Group information page
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182207_user_preferences_group_overview_security_dashboard.yml)
-
-Group: `group::threat insights`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.user_sast_jobs`
-
-Count of SAST jobs per user
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182116_user_sast_jobs.yml)
-
-Group: `group::static analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.secure.user_sast_scans`
-
-Number of users who have run a SAST scan
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210607043741_user_sast_scans.yml)
-
-Group: `group::static analysis`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.user_secret_detection_jobs`
-
-Count of Secret Detection Jobs per user
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182118_user_secret_detection_jobs.yml)
-
-Group: `group::static analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.secure.user_secret_detection_scans`
-
-Number of users who have run a Secret Detection scan
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210607043957_user_secret_detection_scans.yml)
-
-Group: `group::static analysis`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.user_unique_users_all_secure_scanners`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181954_user_unique_users_all_secure_scanners.yml)
-
-Group: `group::secure`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.verify.ci_builds`
-
-Unique count of builds in project
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175525_ci_builds.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.verify.ci_external_pipelines`
-
-Total pipelines in external repositories
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175527_ci_external_pipelines.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.verify.ci_internal_pipelines`
-
-Total pipelines in GitLab repositories
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175529_ci_internal_pipelines.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.verify.ci_pipeline_config_auto_devops`
-
-Total pipelines from an Auto DevOps template
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175531_ci_pipeline_config_auto_devops.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.verify.ci_pipeline_config_repository`
-
-Total Pipelines from templates in repository
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175533_ci_pipeline_config_repository.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.verify.ci_pipeline_schedules`
-
-Pipeline schedules in GitLab
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175535_ci_pipeline_schedules.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.verify.ci_pipelines`
-
-Distinct Users triggering Total pipelines
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175537_ci_pipelines.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.verify.ci_triggers`
-
-Total configured Triggers in project
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175539_ci_triggers.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.verify.clusters_applications_runner`
-
-Count of users creating managed clusters with Runner enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181949_clusters_applications_runner.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.verify.projects_reporting_ci_cd_back_to_github`
-
-Projects with a GitHub service pipeline enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175540_projects_reporting_ci_cd_back_to_github.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.clusters_applications_cert_managers`
-
-Total GitLab Managed clusters with Cert Manager enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175405_clusters_applications_cert_managers.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.clusters_applications_helm`
-
-Total GitLab Managed clusters with Helm enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175407_clusters_applications_helm.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.clusters_applications_ingress`
-
-Total GitLab Managed clusters with Ingress enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175409_clusters_applications_ingress.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.clusters_applications_knative`
-
-Total GitLab Managed clusters with Knative enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175411_clusters_applications_knative.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.clusters_disabled`
-
-Total GitLab Managed disabled clusters
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175415_clusters_disabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.clusters_enabled`
-
-Total GitLab Managed clusters currently enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175417_clusters_enabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.clusters_management_project`
-
-Number of Kubernetes clusters with clusters management project being set
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175413_clusters_management_project.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.clusters_platforms_eks`
-
-Total GitLab Managed clusters provisioned with GitLab on AWS EKS
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175420_clusters_platforms_eks.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.clusters_platforms_gke`
-
-Total GitLab Managed clusters provisioned with GitLab on GCE GKE
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175419_clusters_platforms_gke.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.clusters_platforms_user`
-
-Total GitLab Managed clusters that are user provisioned
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175422_clusters_platforms_user.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.group_clusters_disabled`
-
-Total GitLab Managed disabled clusters attached to groups
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175428_group_clusters_disabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.group_clusters_enabled`
-
-Total GitLab Managed enabled clusters attached to groups
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175430_group_clusters_enabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.instance_clusters_disabled`
-
-Total GitLab Managed disabled clusters attached to the instance
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175424_instance_clusters_disabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.instance_clusters_enabled`
-
-Total GitLab Managed enabled clusters attached to the instance
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175426_instance_clusters_enabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.project_clusters_disabled`
-
-Total GitLab Managed disabled clusters attached to projects
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175432_project_clusters_disabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.project_clusters_enabled`
-
-Total GitLab Managed enabled clusters attached to projects
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175434_project_clusters_enabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.projects_slack_notifications_active`
-
-Unique projects created in the past 28 days that have Slack notifications enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216175436_projects_slack_notifications_active.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.projects_slack_slash_active`
-
-Unique projects created in the past 28 days that have Slack ‘/’ commands enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216175437_projects_slack_slash_active.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.projects_with_prometheus_alerts`
-
-Projects with Prometheus alerting enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180955_projects_with_prometheus_alerts.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.action_monthly_active_users_design_management`
-
-Monthly active users for design management
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180745_action_monthly_active_users_design_management.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.action_monthly_active_users_git_write`
-
-Aggregated value for wiki, design, and project repo Git write actions
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216182041_action_monthly_active_users_git_write.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.action_monthly_active_users_ide_edit`
-
-Number of unique users per month who edited a file from any web editor
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180327_action_monthly_active_users_ide_edit.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.action_monthly_active_users_project_repo`
-
-Count of monthly active users who have performed any Git operation (read/write/push)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216182040_action_monthly_active_users_project_repo.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.action_monthly_active_users_sfe_edit`
-
-Number of users using single file editor
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180321_action_monthly_active_users_sfe_edit.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.action_monthly_active_users_snippet_editor_edit`
-
-Number of users using the snippet editor
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180323_action_monthly_active_users_snippet_editor_edit.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.action_monthly_active_users_sse_edit`
-
-Number of users using the static site editor
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180325_action_monthly_active_users_sse_edit.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.action_monthly_active_users_web_ide_edit`
-
-Number of users editing using web IDE
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180319_action_monthly_active_users_web_ide_edit.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.action_monthly_active_users_wiki_repo`
-
-Unique monthly active users of the Wiki
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180747_action_monthly_active_users_wiki_repo.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.approval_project_rules`
-
-Total number of project approval rules
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182056_approval_project_rules.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.approval_project_rules_with_exact_required_approvers`
-
-Number of approval rules with the exact number of required approvers.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216183622_approval_project_rules_with_exact_required_approvers.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.approval_project_rules_with_less_approvers_than_required`
-
-Number of approval rules with fewer approvers than required.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216183620_approval_project_rules_with_less_approvers_than_required.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.approval_project_rules_with_more_approvers_than_required`
-
-Number of approval rules with more approvers than required.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216183618_approval_project_rules_with_more_approvers_than_required.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.approval_project_rules_with_target_branch`
-
-Number of project approval rules scoped to a specific repo branch.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182058_approval_project_rules_with_target_branch.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.deploy_keys`
-
-Count of users creating deploy keys in last 28 days.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216182034_deploy_keys.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.keys`
-
-Count of users creating regular keys in last 28 days.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216182036_keys.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.merge_requests`
-
-Count of the number of users creating merge requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175055_merge_requests.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.merge_requests_users`
-
-Monthly count of the number of merge request users
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175101_merge_requests_users.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.merge_requests_with_added_rules`
-
-Merge requests with added rules
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216175103_merge_requests_with_added_rules.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.merge_requests_with_optional_codeowners`
-
-Count of merge requests with optional codeowner approval rules
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216175105_merge_requests_with_optional_codeowners.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.merge_requests_with_overridden_project_rules`
-
-Number of merge requests which have overriden rules created at the project level
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182047_merge_requests_with_overridden_project_rules.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.merge_requests_with_required_codeowners`
-
-Count of merge requests with required codeowner approval rules
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216175107_merge_requests_with_required_codeowners.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.projects_enforcing_code_owner_approval`
-
-Count of total projects that require approval by code owners for code changes
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182043_projects_enforcing_code_owner_approval.yml)
-
-Group: `group::source code`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.projects_imported_from_github`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180731_projects_imported_from_github.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.create.projects_with_disable_overriding_approvers_per_merge_request`
-
-Count of the number of projects with setting to disable overriding approvers per merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175057_projects_with_disable_overriding_approvers_per_merge_request.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.projects_with_repositories_enabled`
-
-Count of users creating projects that have a matching Git repository, result of a Git push action, for last 28 days.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182049_projects_with_repositories_enabled.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.projects_with_sectional_code_owner_rules`
-
-Count of projects using code owners with code owners section feature
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182045_projects_with_sectional_code_owner_rules.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.projects_without_disable_overriding_approvers_per_merge_request`
-
-Count of the number of projects without setting to disable overriding approvers per merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175059_projects_without_disable_overriding_approvers_per_merge_request.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.protected_branches`
-
-Count of users creating projects with repositories making use of at least one protected branch in last 28 days.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216182051_protected_branches.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.remote_mirrors`
-
-Count of users creating projects with remote mirrors. Includes both push and pull mirrors.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216182038_remote_mirrors.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.snippets`
-
-Count of distinct author_id from snippets for last 28 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180317_snippets.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.suggestions`
-
-Count of unique users per month who create suggestions in merge request comments
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175109_suggestions.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.total_number_of_locked_files`
-
-The total number of files which have been locked via the GitLab UI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216183614_total_number_of_locked_files.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.total_number_of_path_locks`
-
-Number of paths/directories manually locked through the UI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216183613_total_number_of_path_locks.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.users_using_lfs_locks`
-
-Number of unique users who have locked files or directories using LFS via the command line
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182054_users_using_lfs_locks.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.users_using_path_locks`
-
-Number of users creating path_locks in last 28 days.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182053_users_using_path_locks.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.enablement.geo_secondary_web_oauth_users`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210427213346_geo_secondary_web_oauth_users.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.bulk_imports.gitlab`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183640_gitlab.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.bulk_imports.gitlab_v1`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183642_gitlab_v1.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.compliance_frameworks_with_pipeline`
-
-Count of compliance frameworks that have a pipeline configuration
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210622091519_compliance_frameworks_with_pipeline.yml)
-
-Group: `compliance`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.custom_compliance_frameworks`
-
-Monthly count of all custom compliance framework labels
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210507165054_custom_compliance_frameworks.yml)
-
-Group: `compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.events`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180814_events.yml)
-
-Group: `group::manage`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.group_imports.gitlab_migration`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183711_gitlab_migration.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.group_imports.group_import`
-
-Number of group import states
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183709_group_import.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.group_saml_enabled`
-
-Whether group SAML is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/settings/20210216180833_group_saml_enabled.yml)
-
-Group: `group:access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.groups`
-
-Number of users who are group members for last 28 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180816_groups.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.groups_imported`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183737_groups_imported.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.issue_imports.csv`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183707_csv.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.issue_imports.fogbugz`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183703_fogbugz.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.issue_imports.jira`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183701_jira.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.issue_imports.phabricator`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183705_phabricator.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.issues_imported.csv`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183735_csv.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.issues_imported.fogbugz`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183731_fogbugz.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.issues_imported.jira`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183730_jira.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.issues_imported.phabricator`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183733_phabricator.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.ldap_admin_sync_enabled`
-
-Whether LDAP admin sync is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/settings/20210216180831_ldap_admin_sync_enabled.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.ldap_group_sync_enabled`
-
-Has the instance configured [LDAP Group Sync](https://docs.gitlab.com/ee/administration/auth/ldap/#group-sync)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/settings/20210216180829_ldap_group_sync_enabled.yml)
-
-Group: `group::acess`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.ldap_keys`
-
-Number of users creating keys synced as part of LDAP for last 28 days.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216180820_ldap_keys.yml)
-
-Group: `group::acess`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.ldap_servers`
-
-Number of LDAP servers configured
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216180827_ldap_servers.yml)
-
-Group: `group::manage`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.ldap_users`
-
-Number of users that are linked to LDAP
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216180822_ldap_users.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.omniauth_providers`
-
-Number of unique user logins using an OmniAuth provider
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183627_omniauth_providers.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.project_imports.bitbucket`
-
-Count of projects imported from Bitbucket
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183650_bitbucket.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.project_imports.bitbucket_server`
-
-Count of projects imported from Bitbucket Server
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183652_bitbucket_server.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.project_imports.git`
-
-Count of projects imported from Git
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183655_git.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.project_imports.gitea`
-
-Count of projects imported from Gitea
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183653_gitea.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.project_imports.github`
-
-Count of projects imported from GitHub
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183648_github.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.project_imports.gitlab`
-
-Count of projects imported from GitLab using Project Export/Import
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183646_gitlab.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.project_imports.gitlab_migration`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183659_gitlab_migration.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.project_imports.gitlab_project`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183644_gitlab_project.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.project_imports.manifest`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183657_manifest.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.project_imports.total`
-
-Total count of projects imported
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210520111133_total.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.projects_imported.bitbucket`
-
-Count of projects imported from Bitbucket
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183720_bitbucket.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.projects_imported.bitbucket_server`
-
-Count of projects imported from Bitbucket Server
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183722_bitbucket_server.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.projects_imported.git`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183726_git.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.projects_imported.gitea`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183724_gitea.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.projects_imported.github`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183718_github.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.projects_imported.gitlab`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183716_gitlab.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.projects_imported.gitlab_project`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183714_gitlab_project.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.projects_imported.manifest`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183728_manifest.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.projects_imported.total`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183712_total.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.projects_with_compliance_framework`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216180825_projects_with_compliance_framework.yml)
-
-Group: `group::manage`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `usage_activity_by_stage_monthly.manage.unique_users_all_imports`
-
-Number of users from projects imported
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183638_unique_users_all_imports.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.user_auth_by_provider.google_oauth2`
-
-Number of unique user logins using Google OAuth authentication
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183636_google_oauth2.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.user_auth_by_provider.standard`
-
-Number of unique user logins using password authentication
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183634_standard.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.user_auth_by_provider.two-factor`
-
-Number of unique user logins using two factor authentication
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183629_two-factor.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.user_auth_by_provider.two-factor-via-u2f-device`
-
-Number of unique user logins using two factor via a U2F device
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183631_two-factor-via-u2f-device.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.user_auth_by_provider.two-factor-via-webauthn-device`
-
-Number of unique user logins using two factor via a WebAuthn device
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183633_two-factor-via-webauthn-device.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.users_created`
-
-Number of users created in the month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180818_users_created.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.value_stream_management_customized_group_stages`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216180824_value_stream_management_customized_group_stages.yml)
-
-Group: `group::manage`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `usage_activity_by_stage_monthly.monitor.clusters`
-
-Count users creating clusters in last 28 days.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180956_clusters.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.monitor.clusters_applications_prometheus`
-
-Users creating clusters with Prometheus enabled in last 28 days.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180958_clusters_applications_prometheus.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.monitor.operations_dashboard_default_dashboard`
-
-Active users with enabled operations dashboard
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181000_operations_dashboard_default_dashboard.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.monitor.operations_dashboard_users_with_projects_added`
-
-Active users with projects on operations dashboard
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181006_operations_dashboard_users_with_projects_added.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.monitor.projects_incident_sla_enabled`
-
-Count of projects with Incident SLA enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216183753_projects_incident_sla_enabled.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.monitor.projects_with_alert_incidents`
-
-Count of unique projects with an incident from an alert created in the last month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180526_projects_with_alert_incidents.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.monitor.projects_with_error_tracking_enabled`
-
-Count of users creating projects with error tracking enabled.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181004_projects_with_error_tracking_enabled.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.monitor.projects_with_incidents`
-
-Count of unique projects with an incident created in the last month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180524_projects_with_incidents.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.monitor.projects_with_tracing_enabled`
-
-Projects with tracing enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181002_projects_with_tracing_enabled.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.package.projects_with_packages`
-
-The total number of projects in a given month with at least one package
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181057_projects_with_packages.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.plan.assignee_lists`
-
-Count of MAU creating assignee lists on Boards
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181156_assignee_lists.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.plan.epics`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181158_epics.yml)
-
-Group: `group::plan`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.plan.issues`
-
-Count of users creating Issues in last 28 days.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181139_issues.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.plan.label_lists`
-
-Count of MAU creating label lists on Boards
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181200_label_lists.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.plan.milestone_lists`
-
-Count of MAU created milestone lists on Boards
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181201_milestone_lists.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.plan.notes`
-
-Count of MAU commenting on an issuable
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181141_notes.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.plan.projects`
-
-Count of MAU creating projects
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181143_projects.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.plan.projects_jira_active`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181150_projects_jira_active.yml)
-
-Group: `group::plan`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.plan.projects_jira_dvcs_cloud_active`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181152_projects_jira_dvcs_cloud_active.yml)
-
-Group: `group::plan`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.plan.projects_jira_dvcs_server_active`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181154_projects_jira_dvcs_server_active.yml)
-
-Group: `group::plan`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.plan.service_desk_enabled_projects`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181147_service_desk_enabled_projects.yml)
-
-Group: `group::plan`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.plan.service_desk_issues`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181148_service_desk_issues.yml)
-
-Group: `group::plan`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.plan.todos`
-
-Count of MAU creating todos
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181145_todos.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.release.deployments`
-
-Unique users triggering deployments
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181935_deployments.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.release.failed_deployments`
-
-Total failed deployments
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181937_failed_deployments.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.release.projects_mirrored_with_pipelines_enabled`
-
-Count creator_id from projects with repository mirroring enabled.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181943_projects_mirrored_with_pipelines_enabled.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.release.releases`
-
-Unique users creating release tags
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181939_releases.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.release.successful_deployments`
-
-Total successful deployments
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181941_successful_deployments.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.secure.api_fuzzing_pipeline`
-
-Counts of Pipelines that have at least 1 API Fuzzing Testing job
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216180401_api_fuzzing_pipeline.yml)
-
-Group: `group::fuzz testing`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.api_fuzzing_scans`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183838_api_fuzzing_scans.yml)
-
-Group: ``
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.secure.cluster_image_scanning_pipeline`
-
-Pipelines containing a Cluster Image Scanning job
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210618125224_cluster_image_scanning_pipeline.yml)
-
-Group: `group::container security`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.cluster_image_scanning_scans`
-
-Counts cluster image scanning jobs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210618101233_cluster_image_scanning_scans.yml)
-
-Group: `group::container security`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.container_scanning_pipeline`
-
-Pipelines containing a Container Scanning job
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216175507_container_scanning_pipeline.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.container_scanning_scans`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183830_container_scanning_scans.yml)
-
-Group: ``
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.secure.coverage_fuzzing_pipeline`
-
-Counts of Pipelines that have at least 1 coverage-guided Fuzz Testing job
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216180359_coverage_fuzzing_pipeline.yml)
-
-Group: `group::fuzz testing`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.coverage_fuzzing_scans`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183836_coverage_fuzzing_scans.yml)
-
-Group: ``
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.secure.dast_pipeline`
-
-Count of pipelines that have at least 1 DAST job
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175618_dast_pipeline.yml)
-
-Group: `group::dynamic analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.dast_scans`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183832_dast_scans.yml)
-
-Group: ``
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.secure.dependency_scanning_pipeline`
-
-Count of pipelines with successful Dependency Scanning jobs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216175226_dependency_scanning_pipeline.yml)
-
-Group: `group::composition analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.dependency_scanning_scans`
-
-Monthly number of users running Dependency Scanning Scans
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216183828_dependency_scanning_scans.yml)
-
-Group: `group::composition analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.sast_pipeline`
-
-Counts of Pipelines that have at least 1 SAST job
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216182129_sast_pipeline.yml)
-
-Group: `group::static analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.sast_scans`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183826_sast_scans.yml)
-
-Group: ``
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.secure.secret_detection_pipeline`
-
-Counts of Pipelines that have at least 1 Secret Detection job
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216182131_secret_detection_pipeline.yml)
-
-Group: `group::static analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.secret_detection_scans`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183834_secret_detection_scans.yml)
-
-Group: ``
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.secure.user_api_fuzzing_dnd_jobs`
-
-Count of API Fuzzing `docker-in-docker` jobs by job names
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180357_user_api_fuzzing_dnd_jobs.yml)
-
-Group: `group::fuzz testing`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.secure.user_api_fuzzing_jobs`
-
-Count of API Fuzzing jobs by job name
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180355_user_api_fuzzing_jobs.yml)
-
-Group: `group::fuzz testing`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.secure.user_api_fuzzing_scans`
-
-Number of users who have run a API Fuzzing scan
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210607043622_user_api_fuzzing_scans.yml)
-
-Group: `category::fuzz testing`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.user_container_scanning_jobs`
-
-Distinct count per user of Container Scanning jobs run monthly
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216175505_user_container_scanning_jobs.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.user_container_scanning_scans`
-
-Number of users who have run a Container Scanning scan
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210607043336_user_container_scanning_scans.yml)
-
-Group: `group::composition analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.user_coverage_fuzzing_jobs`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183817_user_coverage_fuzzing_jobs.yml)
-
-Group: ``
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.secure.user_coverage_fuzzing_scans`
-
-Number of users who have run a Coverage Fuzzing scan
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210607043509_user_coverage_fuzzing_scans.yml)
-
-Group: `category::fuzz testing`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.user_dast_jobs`
-
-Users who run a DAST job
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175616_user_dast_jobs.yml)
-
-Group: `group::dynamic analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.secure.user_dast_scans`
-
-Number of users who have run a DAST scan
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210607041718_user_dast_scans.yml)
-
-Group: `group::dynamic analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.user_dependency_scanning_jobs`
-
-Monthly number of users creating Dependency Scanning jobs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216175222_user_dependency_scanning_jobs.yml)
-
-Group: `group::composition analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.user_dependency_scanning_scans`
-
-Number of users who have run a Dependency Scanning scan
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210607043301_user_dependency_scanning_scans.yml)
-
-Group: `group::composition analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.user_license_management_jobs`
-
-Monthly number of users running License Scanning jobs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216175224_user_license_management_jobs.yml)
-
-Group: `group::composition analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.user_preferences_group_overview_security_dashboard`
-
-Users who set personal preference to see Security Dashboard on Group information page
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182209_user_preferences_group_overview_security_dashboard.yml)
-
-Group: `group::threat insights`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.user_sast_jobs`
-
-Users who run a SAST job
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216182125_user_sast_jobs.yml)
-
-Group: `group::static analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.user_sast_scans`
-
-Number of users who have run a SAST scan
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210607043218_user_sast_scans.yml)
-
-Group: `group::static analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.user_secret_detection_jobs`
-
-Users who run a Secret Detection job
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216182127_user_secret_detection_jobs.yml)
-
-Group: `group::static analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.user_secret_detection_scans`
-
-Number of users who have run a Secret Detection scan
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210607043410_user_secret_detection_scans.yml)
-
-Group: `group::static analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.user_unique_users_all_secure_scanners`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181956_user_unique_users_all_secure_scanners.yml)
-
-Group: `group::secure`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.verify.ci_builds`
-
-Unique monthly builds in project
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175542_ci_builds.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.verify.ci_external_pipelines`
-
-Total pipelines in external repositories in a month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175544_ci_external_pipelines.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.verify.ci_internal_pipelines`
-
-Total pipelines in GitLab repositories in a month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175546_ci_internal_pipelines.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.verify.ci_pipeline_config_auto_devops`
-
-Total pipelines from an Auto DevOps template
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175548_ci_pipeline_config_auto_devops.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.verify.ci_pipeline_config_repository`
-
-Total Monthly Pipelines from templates in repository
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175550_ci_pipeline_config_repository.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.verify.ci_pipeline_schedules`
-
-Total monthly Pipeline schedules in GitLab
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175552_ci_pipeline_schedules.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.verify.ci_pipelines`
-
-Distinct users triggering pipelines in a month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175554_ci_pipelines.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`, `free`
-
-### `usage_activity_by_stage_monthly.verify.ci_triggers`
-
-Total configured Triggers in project
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175556_ci_triggers.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.verify.clusters_applications_runner`
-
-Total GitLab Managed clusters with Runner enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181951_clusters_applications_runner.yml)
-
-Group: `group::runner`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.verify.projects_reporting_ci_cd_back_to_github`
-
-Projects with a GitHub repository mirror pipeline enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216175558_projects_reporting_ci_cd_back_to_github.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `uuid`
-
-GitLab instance unique identifier
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/license/20210201124933_uuid.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Standard`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `version`
-
-Version of GitLab instance
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/license/20210216175601_version.yml)
-
-Group: `group::distribution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `web_ide_clientside_preview_enabled`
-
-Whether Web IDE clientside preview is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210204124920_web_ide_clientside_preview_enabled.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
diff --git a/doc/development/service_ping/implement.md b/doc/development/service_ping/implement.md
new file mode 100644
index 00000000000..629128af0c6
--- /dev/null
+++ b/doc/development/service_ping/implement.md
@@ -0,0 +1,210 @@
+---
+stage: Growth
+group: Product Intelligence
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# Develop and test Service Ping
+
+To add a new metric and test Service Ping:
+
+1. [Name and place the metric](#name-and-place-the-metric)
+1. [Test counters manually using your Rails console](#test-counters-manually-using-your-rails-console)
+1. [Generate the SQL query](#generate-the-sql-query)
+1. [Optimize queries with `#database-lab`](#optimize-queries-with-database-lab)
+1. [Add the metric definition](#add-the-metric-definition)
+1. [Add the metric to the Versions Application](#add-the-metric-to-the-versions-application)
+1. [Create a merge request](#create-a-merge-request)
+1. [Verify your metric](#verify-your-metric)
+1. [Set up and test Service Ping locally](#set-up-and-test-service-ping-locally)
+
+## Name and place the metric
+
+Add the metric in one of the top-level keys:
+
+- `settings`: for settings related metrics.
+- `counts_weekly`: for counters that have data for the most recent 7 days.
+- `counts_monthly`: for counters that have data for the most recent 28 days.
+- `counts`: for counters that have data for all time.
+
+### How to get a metric name suggestion
+
+The metric YAML generator can suggest a metric name for you.
+To generate a metric name suggestion, first instrument the metric at the provided `key_path`.
+Then, generate the metric's YAML definition and
+return to the instrumentation and update it.
+
+1. Add the metric instrumentation to `lib/gitlab/usage_data.rb` inside one
+ of the [top-level keys](#name-and-place-the-metric), using any name you choose.
+1. Run the [metrics YAML generator](metrics_dictionary.md#metrics-definition-and-validation).
+1. Use the metric name suggestion to select a suitable metric name.
+1. Update the instrumentation you created in the first step and change the metric name to the suggested name.
+1. Update the metric's YAML definition with the correct `key_path`.
+
+## Test counters manually using your Rails console
+
+```ruby
+# count
+Gitlab::UsageData.count(User.active)
+Gitlab::UsageData.count(::Clusters::Cluster.aws_installed.enabled, :cluster_id)
+
+# count distinct
+Gitlab::UsageData.distinct_count(::Project, :creator_id)
+Gitlab::UsageData.distinct_count(::Note.with_suggestions.where(time_period), :author_id, start: ::User.minimum(:id), finish: ::User.maximum(:id))
+```
+
+## Generate the SQL query
+
+Your Rails console returns the generated SQL queries. For example:
+
+```ruby
+pry(main)> Gitlab::UsageData.count(User.active)
+ (2.6ms) SELECT "features"."key" FROM "features"
+ (15.3ms) SELECT MIN("users"."id") FROM "users" WHERE ("users"."state" IN ('active')) AND ("users"."user_type" IS NULL OR "users"."user_type" IN (6, 4))
+ (2.4ms) SELECT MAX("users"."id") FROM "users" WHERE ("users"."state" IN ('active')) AND ("users"."user_type" IS NULL OR "users"."user_type" IN (6, 4))
+ (1.9ms) SELECT COUNT("users"."id") FROM "users" WHERE ("users"."state" IN ('active')) AND ("users"."user_type" IS NULL OR "users"."user_type" IN (6, 4)) AND "users"."id" BETWEEN 1 AND 100000
+```
+
+## Optimize queries with `#database-lab`
+
+`#database-lab` is a Slack channel that uses a production-sized environment to test your queries.
+Paste the SQL query into `#database-lab` to see how the query performs at scale.
+
+- GitLab.com's production database has a 15 second timeout.
+- Any single query must stay below the [1 second execution time](../query_performance.md#timing-guidelines-for-queries) with cold caches.
+- Add a specialized index on columns involved to reduce the execution time.
+
+To understand the query's execution, we add the following information
+to a merge request description:
+
+- For counters that have a `time_period` test, we add information for both:
+ - `time_period = {}` for all time periods.
+ - `time_period = { created_at: 28.days.ago..Time.current }` for the last 28 days.
+- Execution plan and query time before and after optimization.
+- Query generated for the index and time.
+- Migration output for up and down execution.
+
+We also use `#database-lab` and [explain.depesz.com](https://explain.depesz.com/). For more details, see the [database review guide](../database_review.md#preparation-when-adding-or-modifying-queries).
+
+### Optimization recommendations and examples
+
+- Use specialized indexes. For examples, see these merge requests:
+ - [Example 1](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/26871)
+ - [Example 2](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/26445)
+- Use defined `start` and `finish`, and simple queries.
+ These values can be memoized and reused, as in this [example merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/37155).
+- Avoid joins and write the queries as simply as possible,
+ as in this [example merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/36316).
+- Set a custom `batch_size` for `distinct_count`, as in this [example merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/38000).
+
+## Add the metric definition
+
+See the [Metrics Dictionary guide](metrics_dictionary.md) for more information.
+
+## Add the metric to the Versions Application
+
+Check if the new metric must be added to the Versions Application. See the `usage_data` [schema](https://gitlab.com/gitlab-services/version-gitlab-com/-/blob/master/db/schema.rb#L147) and Service Data [parameters accepted](https://gitlab.com/gitlab-services/version-gitlab-com/-/blob/master/app/services/usage_ping.rb). Any metrics added under the `counts` key are saved in the `stats` column.
+
+## Create a merge request
+
+Create a merge request for the new Service Ping metric, and do the following:
+
+- Add the `feature` label to the merge request. A metric is a user-facing change and is part of expanding the Service Ping feature.
+- Add a changelog entry that complies with the [changelog entries guide](../changelog.md).
+- Ask for a Product Intelligence review.
+ On GitLab.com, we have DangerBot set up to monitor Product Intelligence related files and recommend a [Product Intelligence review](review_guidelines.md).
+
+## Verify your metric
+
+On GitLab.com, the Product Intelligence team regularly [monitors Service Ping](https://gitlab.com/groups/gitlab-org/-/epics/6000).
+They may alert you that your metrics need further optimization to run quicker and with greater success.
+
+The Service Ping JSON payload for GitLab.com is shared in the
+[#g_product_intelligence](https://gitlab.slack.com/archives/CL3A7GFPF) Slack channel every week.
+
+You may also use the [Service Ping QA dashboard](https://app.periscopedata.com/app/gitlab/632033/Usage-Ping-QA) to check how well your metric performs.
+The dashboard allows filtering by GitLab version, by "Self-managed" and "SaaS", and shows you how many failures have occurred for each metric. Whenever you notice a high failure rate, you can re-optimize your metric.
+
+## Set up and test Service Ping locally
+
+To set up Service Ping locally, you must:
+
+1. [Set up local repositories](#set-up-local-repositories).
+1. [Test local setup](#test-local-setup).
+1. (Optional) [Test Prometheus-based Service Ping](#test-prometheus-based-service-ping).
+
+### Set up local repositories
+
+1. Clone and start [GitLab](https://gitlab.com/gitlab-org/gitlab-development-kit).
+1. Clone and start [Versions Application](https://gitlab.com/gitlab-services/version-gitlab-com).
+ Make sure you run `docker-compose up` to start a PostgreSQL and Redis instance.
+1. Point GitLab to the Versions Application endpoint instead of the default endpoint:
+ 1. Open [service_ping/submit_service.rb](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/services/service_ping/submit_service.rb#L5) in your local and modified `PRODUCTION_URL`.
+ 1. Set it to the local Versions Application URL: `http://localhost:3000/usage_data`.
+
+### Test local setup
+
+1. Using the `gitlab` Rails console, manually trigger Service Ping:
+
+ ```ruby
+ ServicePing::SubmitService.new.execute
+ ```
+
+1. Use the `versions` Rails console to check the Service Ping was successfully received,
+ parsed, and stored in the Versions database:
+
+ ```ruby
+ UsageData.last
+ ```
+
+## Test Prometheus-based Service Ping
+
+If the data submitted includes metrics [queried from Prometheus](index.md#prometheus-queries)
+you want to inspect and verify, you must:
+
+- Ensure that a Prometheus server is running locally.
+- Ensure the respective GitLab components are exporting metrics to the Prometheus server.
+
+If you do not need to test data coming from Prometheus, no further action
+is necessary. Service Ping should degrade gracefully in the absence of a running Prometheus server.
+
+Three kinds of components may export data to Prometheus, and are included in Service Ping:
+
+- [`node_exporter`](https://github.com/prometheus/node_exporter): Exports node metrics
+ from the host machine.
+- [`gitlab-exporter`](https://gitlab.com/gitlab-org/gitlab-exporter): Exports process metrics
+ from various GitLab components.
+- Other various GitLab services, such as Sidekiq and the Rails server, which export their own metrics.
+
+### Test with an Omnibus container
+
+This is the recommended approach to test Prometheus-based Service Ping.
+
+To verify your change, build a new Omnibus image from your code branch using CI/CD, download the image,
+and run a local container instance:
+
+1. From your merge request, select the `qa` stage, then trigger the `package-and-qa` job. This job triggers an Omnibus
+ build in a [downstream pipeline of the `omnibus-gitlab-mirror` project](https://gitlab.com/gitlab-org/build/omnibus-gitlab-mirror/-/pipelines).
+1. In the downstream pipeline, wait for the `gitlab-docker` job to finish.
+1. Open the job logs and locate the full container name including the version. It takes the following form: `registry.gitlab.com/gitlab-org/build/omnibus-gitlab-mirror/gitlab-ee:<VERSION>`.
+1. On your local machine, make sure you are signed in to the GitLab Docker registry. You can find the instructions for this in
+ [Authenticate to the GitLab Container Registry](../../user/packages/container_registry/index.md#authenticate-with-the-container-registry).
+1. Once signed in, download the new image by using `docker pull registry.gitlab.com/gitlab-org/build/omnibus-gitlab-mirror/gitlab-ee:<VERSION>`
+1. For more information about working with and running Omnibus GitLab containers in Docker, refer to [GitLab Docker images](https://docs.gitlab.com/omnibus/docker/README.html) in the Omnibus documentation.
+
+### Test with GitLab development toolkits
+
+This is the less recommended approach, because it comes with a number of difficulties when emulating a real GitLab deployment.
+
+The [GDK](https://gitlab.com/gitlab-org/gitlab-development-kit) is not set up to run a Prometheus server or `node_exporter` alongside other GitLab components. If you would
+like to do so, [Monitoring the GDK with Prometheus](https://gitlab.com/gitlab-org/gitlab-development-kit/-/blob/main/doc/howto/prometheus/index.md#monitoring-the-gdk-with-prometheus) is a good start.
+
+The [GCK](https://gitlab.com/gitlab-org/gitlab-compose-kit) has limited support for testing Prometheus based Service Ping.
+By default, it comes with a fully configured Prometheus service that is set up to scrape a number of components.
+However, it has the following limitations:
+
+- It does not run a `gitlab-exporter` instance, so several `process_*` metrics from services such as Gitaly may be missing.
+- While it runs a `node_exporter`, `docker-compose` services emulate hosts, meaning that it normally reports itself as not associated
+ with any of the other running services. That is not how node metrics are reported in a production setup, where `node_exporter`
+ always runs as a process alongside other GitLab components on any given node. For Service Ping, none of the node data would therefore
+ appear to be associated to any of the services running, because they all appear to be running on different hosts. To alleviate this problem, the `node_exporter` in GCK was arbitrarily "assigned" to the `web` service, meaning only for this service `node_*` metrics appears in Service Ping.
diff --git a/doc/development/service_ping/index.md b/doc/development/service_ping/index.md
index 41a2022473a..816743a3e97 100644
--- a/doc/development/service_ping/index.md
+++ b/doc/development/service_ping/index.md
@@ -82,9 +82,9 @@ Registration is not yet required for participation, but will be added in a futur
## View the Service Ping payload **(FREE SELF)**
-You can view the exact JSON payload sent to GitLab Inc. in the administration panel. To view the payload:
+You can view the exact JSON payload sent to GitLab Inc. in the Admin Area. To view the payload:
-1. Sign in as a user with [Administrator](../../user/permissions.md) permissions.
+1. Sign in as a user with the [Administrator](../../user/permissions.md) role.
1. On the top bar, select **Menu >** **{admin}** **Admin**.
1. On the left sidebar, select **Settings > Metrics and profiling**.
1. Expand the **Usage statistics** section.
@@ -106,7 +106,7 @@ configuration file.
To disable Service Ping in the GitLab UI:
-1. Sign in as a user with [Administrator](../../user/permissions.md) permissions.
+1. Sign in as a user with the [Administrator](../../user/permissions.md) role.
1. On the top bar, select **Menu >** **{admin}** **Admin**.
1. On the left sidebar, select **Settings > Metrics and profiling**.
1. Expand the **Usage statistics** section.
@@ -116,7 +116,7 @@ To disable Service Ping in the GitLab UI:
### Disable Service Ping using the configuration file
To disable Service Ping and prevent it from being configured in the future through
-the admin area:
+the Admin Area:
**For installations using the Linux package:**
@@ -185,191 +185,41 @@ sequenceDiagram
## How Service Ping works
-1. The Service Ping [cron job](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/workers/gitlab_usage_ping_worker.rb#L30) is set in Sidekiq to run weekly.
-1. When the cron job runs, it calls [`Gitlab::UsageData.to_json`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/services/submit_usage_ping_service.rb#L22).
-1. `Gitlab::UsageData.to_json` [cascades down](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/usage_data.rb#L22) to ~400+ other counter method calls.
-1. The response of all methods calls are [merged together](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/usage_data.rb#L14) into a single JSON payload in `Gitlab::UsageData.to_json`.
-1. The JSON payload is then [posted to the Versions application]( https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/services/submit_usage_ping_service.rb#L20)
+1. The Service Ping [cron job](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/workers/gitlab_service_ping_worker.rb#L24) is set in Sidekiq to run weekly.
+1. When the cron job runs, it calls [`Gitlab::UsageData.to_json`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/services/service_ping/submit_service.rb#L49).
+1. `Gitlab::UsageData.to_json` [cascades down](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/usage_data.rb) to ~400+ other counter method calls.
+1. The response of all methods calls are [merged together](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/usage_data.rb#L68) into a single JSON payload in `Gitlab::UsageData.to_json`.
+1. The JSON payload is then [posted to the Versions application](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/services/service_ping/submit_service.rb#L20)
If a firewall exception is needed, the required URL depends on several things. If
the hostname is `version.gitlab.com`, the protocol is `TCP`, and the port number is `443`,
the required URL is <https://version.gitlab.com/>.
-## Service Ping Metric Life cycle
-
-### 1. New metrics addition
-
-Please follow the [Implementing Service Ping](#implementing-service-ping) guide.
-
-### 2. Existing metric change
-
-Because we do not control when customers update their self-managed instances of GitLab,
-we **STRONGLY DISCOURAGE** changes to the logic used to calculate any metric.
-Any such changes lead to inconsistent reports from multiple GitLab instances.
-If there is a problem with an existing metric, it's best to deprecate the existing metric,
-and use it, side by side, with the desired new metric.
-
-Example:
-Consider following change. Before GitLab 12.6, the `example_metric` was implemented as:
-
-```ruby
-{
- ...
- example_metric: distinct_count(Project, :creator_id)
-}
-```
-
-For GitLab 12.6, the metric was changed to filter out archived projects:
-
-```ruby
-{
- ...
- example_metric: distinct_count(Project.non_archived, :creator_id)
-}
-```
-
-In this scenario all instances running up to GitLab 12.5 continue to report `example_metric`,
-including all archived projects, while all instances running GitLab 12.6 and higher filters
-out such projects. As Service Ping data is collected from all reporting instances, the
-resulting dataset includes mixed data, which distorts any following business analysis.
-
-The correct approach is to add a new metric for GitLab 12.6 release with updated logic:
-
-```ruby
-{
- ...
- example_metric_without_archived: distinct_count(Project.non_archived, :creator_id)
-}
-```
-
-and update existing business analysis artefacts to use `example_metric_without_archived` instead of `example_metric`
-
-### 3. Deprecate a metric
-
-If a metric is obsolete and you no longer use it, you can mark it as deprecated.
-
-For an example of the metric deprecation process take a look at this [example merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/59899)
-
-To deprecate a metric:
-
-1. Check the following YAML files and verify the metric is not used in an aggregate:
- - [`config/metrics/aggregates/*.yaml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/aggregates/)
- - [`ee/config/metrics/aggregates/*.yaml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/aggregates/)
-
-1. Create an issue in the [GitLab Data Team
- project](https://gitlab.com/gitlab-data/analytics/-/issues). Ask for
- confirmation that the metric is not used by other teams, or in any of the SiSense
- dashboards.
-
-1. Verify the metric is not used to calculate the conversational index. The
- conversational index is a measure that reports back to self-managed instances
- to inform administrators of the progress of DevOps adoption for the instance.
-
- You can check
- [`CalculateConvIndexService`](https://gitlab.com/gitlab-services/version-gitlab-com/-/blob/master/app/services/calculate_conv_index_service.rb)
- to view the metrics that are used. The metrics are represented
- as the keys that are passed as a field argument into the `get_value` method.
-
-1. Document the deprecation in the metric's YAML definition. Set
- the `status:` attribute to `deprecated`, for example:
-
- ```yaml
- ---
- key_path: analytics_unique_visits.analytics_unique_visits_for_any_target_monthly
- description: Visits to any of the pages listed above per month
- product_section: dev
- product_stage: manage
- product_group: group::analytics
- product_category:
- value_type: number
- status: deprecated
- time_frame: 28d
- data_source:
- distribution:
- - ce
- tier:
- - free
- ```
-
-1. Replace the metric's instrumentation with a fixed value. This avoids wasting
- resources to calculate the deprecated metric. In
- [`lib/gitlab/usage_data.rb`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/usage_data.rb)
- or
- [`ee/lib/ee/gitlab/usage_data.rb`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/lib/ee/gitlab/usage_data.rb),
- replace the code that calculates the metric's value with a fixed value that
- indicates it's deprecated:
-
- ```ruby
- module Gitlab
- class UsageData
- DEPRECATED_VALUE = -1000
-
- def analytics_unique_visits_data
- results['analytics_unique_visits_for_any_target'] = redis_usage_data { unique_visit_service.unique_visits_for(targets: :analytics) }
- results['analytics_unique_visits_for_any_target_monthly'] = DEPRECATED_VALUE
-
- { analytics_unique_visits: results }
- end
- # ...
- end
- end
+### On a Geo secondary site
+
+We also collect metrics specific to [Geo](../../administration/geo/index.md) secondary sites to send with Service Ping.
+
+1. The [Geo secondary service ping cron job](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/app/workers/geo/secondary_usage_data_cron_worker.rb) is set in Sidekiq to run weekly.
+1. When the cron job runs, it calls [`SecondaryUsageData.update_metrics!`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/app/models/geo/secondary_usage_data.rb#L33). This collects the relevant metrics from Prometheus and stores the data in the Geo secondary tracking database for transmission to the primary site during a [Geo node status update](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/app/models/geo_node_status.rb#L105).
+1. Geo node status data is sent with the JSON payload in the process described above. The following is an example of the payload where each object in the array represents a Geo node:
+
+ ```json
+ [
+ {
+ "repository_verification_enabled"=>true,
+ "repositories_replication_enabled"=>true,
+ "repositories_synced_count"=>24,
+ "repositories_failed_count"=>0,
+ "attachments_replication_enabled"=>true,
+ "attachments_count"=>1,
+ "attachments_synced_count"=>1,
+ "attachments_failed_count"=>0,
+ "git_fetch_event_count_weekly"=>nil,
+ "git_push_event_count_weekly"=>nil,
+ ... other geo node status fields
+ }
+ ]
```
-1. Update the Metrics Dictionary following [guidelines instructions](dictionary.md).
-
-### 4. Remove a metric
-
-Only deprecated metrics can be removed from Service Ping.
-
-For an example of the metric removal process take a look at this [example issue](https://gitlab.com/gitlab-org/gitlab/-/issues/297029)
-
-To remove a deprecated metric:
-
-1. Verify that removing the metric from the Service Ping payload does not cause
- errors in [Version App](https://gitlab.com/gitlab-services/version-gitlab-com)
- when the updated payload is collected and processed. Version App collects
- and persists all Service Ping reports. To do that you can modify
- [fixtures](https://gitlab.com/gitlab-services/version-gitlab-com/-/blob/master/spec/support/usage_data_helpers.rb#L540)
- used to test
- [`UsageDataController#create`](https://gitlab.com/gitlab-services/version-gitlab-com/-/blob/3760ef28/spec/controllers/usage_data_controller_spec.rb#L75)
- endpoint, and assure that test suite does not fail when metric that you wish to remove is not included into test payload.
-
-1. Create an issue in the
- [GitLab Data Team project](https://gitlab.com/gitlab-data/analytics/-/issues).
- Ask for confirmation that the metric is not referred to in any SiSense dashboards and
- can be safely removed from Service Ping. Use this
- [example issue](https://gitlab.com/gitlab-data/analytics/-/issues/7539) for guidance.
- This step can be skipped if verification done during [deprecation process](#3-deprecate-a-metric)
- reported that metric is not required by any data transformation in Snowflake data warehouse nor it is
- used by any of SiSense dashboards.
-
-1. After you verify the metric can be safely removed,
- update the attributes of the metric's YAML definition:
-
- - Set the `status:` to `removed`.
- - Set `milestone_removed:` to the number of the
- milestone in which the metric was removed.
-
- Do not remove the metric's YAML definition altogether. Some self-managed
- instances might not immediately update to the latest version of GitLab, and
- therefore continue to report the removed metric. The Product Intelligence team
- requires a record of all removed metrics in order to identify and filter them.
-
- For example please take a look at this [merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/60149/diffs#b01f429a54843feb22265100c0e4fec1b7da1240_10_10).
-
-1. After you verify the metric can be safely removed,
- remove the metric's instrumentation from
- [`lib/gitlab/usage_data.rb`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/usage_data.rb)
- or
- [`ee/lib/ee/gitlab/usage_data.rb`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/lib/ee/gitlab/usage_data.rb).
-
- For example please take a look at this [merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/60149/diffs#6335dc533bd21df26db9de90a02dd66278c2390d_167_167).
-
-1. Remove any other records related to the metric:
- - The feature flag YAML file at [`config/feature_flags/*/*.yaml`](https://gitlab.com/gitlab-org/gitlab/-/tree/master/config/feature_flags).
- - The entry in the known events YAML file at [`lib/gitlab/usage_data_counters/known_events/*.yaml`](https://gitlab.com/gitlab-org/gitlab/-/tree/master/lib/gitlab/usage_data_counters/known_events).
-
-1. Update the Metrics Dictionary following [guidelines instructions](dictionary.md).
-
## Implementing Service Ping
Service Ping consists of two kinds of data, counters and observations. Counters track how often a certain event
@@ -377,7 +227,9 @@ happened over time, such as how many CI pipelines have run. They are monotonic a
Observations are facts collected from one or more GitLab instances and can carry arbitrary data. There are no
general guidelines around how to collect those, due to the individual nature of that data.
-There are several types of counters which are all found in `usage_data.rb`:
+### Types of counters
+
+There are several types of counters in `usage_data.rb`:
- **Ordinary Batch Counters:** Simple count of a given ActiveRecord_Relation
- **Distinct Batch Counters:** Distinct count of a given ActiveRecord_Relation in a given column
@@ -386,9 +238,22 @@ There are several types of counters which are all found in `usage_data.rb`:
- **Redis Counters:** Used for in-memory counts.
NOTE:
-Only use the provided counter methods. Each counter method contains a built in fail safe to isolate each counter to avoid breaking the entire Service Ping.
+Only use the provided counter methods. Each counter method contains a built-in fail-safe mechanism that isolates each counter to avoid breaking the entire Service Ping process.
+
+### Instrumentation classes
+
+We recommend you use [instrumentation classes](metrics_instrumentation.md) in `usage_data.rb` where possible.
-### Why batch counting
+For example, we have the following instrumentation class:
+`lib/gitlab/usage/metrics/instrumentations/count_boards_metric.rb`.
+
+You should add it to `usage_data.rb` as follows:
+
+```ruby
+boards: add_metric('CountBoardsMetric', time_frame: 'all'),
+```
+
+### Batch counting
For large tables, PostgreSQL can take a long time to count rows due to MVCC [(Multi-version Concurrency Control)](https://en.wikipedia.org/wiki/Multiversion_concurrency_control). Batch counting is a counting method where a single large query is broken into multiple smaller queries. For example, instead of a single query querying 1,000,000 records, with batch counting, you can execute 100 queries of 10,000 records each. Batch counting is useful for avoiding database timeouts as each batch query is significantly shorter than one single long running query.
@@ -401,18 +266,18 @@ For GitLab.com, there are extremely large tables with 15 second query timeouts,
| `merge_request_diff_files` | 1082 |
| `events` | 514 |
-The following operation methods are available for your use:
+The following operation methods are available:
-- [Ordinary Batch Counters](#ordinary-batch-counters)
-- [Distinct Batch Counters](#distinct-batch-counters)
-- [Sum Batch Operation](#sum-batch-operation)
-- [Add Operation](#add-operation)
-- [Estimated Batch Counters](#estimated-batch-counters)
+- [Ordinary batch counters](#ordinary-batch-counters)
+- [Distinct batch counters](#distinct-batch-counters)
+- [Sum batch operation](#sum-batch-operation)
+- [Add operation](#add-operation)
+- [Estimated batch counters](#estimated-batch-counters)
Batch counting requires indexes on columns to calculate max, min, and range queries. In some cases,
you may need to add a specialized index on the columns involved in a counter.
-### Ordinary Batch Counters
+### Ordinary batch counters
Handles `ActiveRecord::StatementInvalid` error
@@ -436,7 +301,7 @@ count(::Clusters::Cluster.aws_installed.enabled, :cluster_id)
count(::Clusters::Cluster.aws_installed.enabled, :cluster_id, start: ::Clusters::Cluster.minimum(:id), finish: ::Clusters::Cluster.maximum(:id))
```
-### Distinct Batch Counters
+### Distinct batch counters
Handles `ActiveRecord::StatementInvalid` error
@@ -454,7 +319,7 @@ Arguments:
- `end`: custom end of the batch counting to avoid complex min calculations
WARNING:
-Counting over non-unique columns can lead to performance issues. Take a look at the [iterating tables in batches](../iterating_tables_in_batches.md) guide for more details.
+Counting over non-unique columns can lead to performance issues. For more information, see the [iterating tables in batches](../iterating_tables_in_batches.md) guide.
Examples:
@@ -464,7 +329,7 @@ distinct_count(::Note.with_suggestions.where(time_period), :author_id, start: ::
distinct_count(::Clusters::Applications::CertManager.where(time_period).available.joins(:cluster), 'clusters.user_id')
```
-### Sum Batch Operation
+### Sum batch operation
Handles `ActiveRecord::StatementInvalid` error
@@ -486,7 +351,7 @@ Examples:
sum(JiraImportState.finished, :imported_issues_count)
```
-### Grouping & Batch Operations
+### Grouping and batch operations
The `count`, `distinct_count`, and `sum` batch counters can accept an `ActiveRecord::Relation`
object, which groups by a specified column. With a grouped relation, the methods do batch counting,
@@ -505,7 +370,7 @@ sum(Issue.group(:state_id), :weight))
# returns => {1=>3542, 2=>6820}
```
-### Add Operation
+### Add operation
Handles `StandardError`.
@@ -515,7 +380,7 @@ Sum the values given as parameters.
Method: `add(*args)`
-Examples
+Examples:
```ruby
project_imports = distinct_count(::Project.where.not(import_type: nil), :creator_id)
@@ -524,7 +389,7 @@ bulk_imports = distinct_count(::BulkImport, :user_id)
add(project_imports, bulk_imports)
```
-### Estimated Batch Counters
+### Estimated batch counters
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/48233) in GitLab 13.7.
@@ -559,7 +424,7 @@ The method includes the following prerequisites:
1. The supplied `relation` must include the primary key defined as the numeric column.
For example: `id bigint NOT NULL`.
1. The `estimate_batch_distinct_count` can handle a joined relation. To use its ability to
- count non-unique columns, the joined relation **must NOT** have a one-to-many relationship,
+ count non-unique columns, the joined relation **must not** have a one-to-many relationship,
such as `has_many :boards`.
1. Both `start` and `finish` arguments should always represent primary key relationship values,
even if the estimated count refers to another column, for example:
@@ -603,7 +468,7 @@ When instrumenting metric with usage of estimated batch counter please add
...
```
-### Redis Counters
+### Redis counters
Handles `::Redis::CommandError` and `Gitlab::UsageDataCounters::BaseCounter::UnknownEvent`
returns -1 when a block is sent or hash with all values -1 when a `counter(Gitlab::UsageDataCounters)` is sent
@@ -616,14 +481,14 @@ Arguments:
- `counter`: a counter from `Gitlab::UsageDataCounters`, that has `fallback_totals` method implemented
- or a `block`: which is evaluated
-#### Ordinary Redis Counters
+#### Ordinary Redis counters
Examples of implementation:
- Using Redis methods [`INCR`](https://redis.io/commands/incr), [`GET`](https://redis.io/commands/get), and [`Gitlab::UsageDataCounters::WikiPageCounter`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/usage_data_counters/wiki_page_counter.rb)
- Using Redis methods [`HINCRBY`](https://redis.io/commands/hincrby), [`HGETALL`](https://redis.io/commands/hgetall), and [`Gitlab::UsageCounters::PodLogs`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/usage_counters/pod_logs.rb)
-##### UsageData API Tracking
+##### UsageData API tracking
<!-- There's nearly identical content in `##### Adding new events`. If you fix errors here, you may need to fix the same errors in the other location. -->
@@ -645,7 +510,7 @@ Examples of implementation:
| :-------- | :--- | :------- | :---------- |
| `event` | string | yes | The event name it should be tracked |
- Response
+ Response:
- `200` if event was tracked
- `400 Bad request` if event parameter is missing
@@ -662,7 +527,7 @@ Examples of implementation:
api.trackRedisCounterEvent('my_already_defined_event_name'),
```
-#### Redis HLL Counters
+#### Redis HLL counters
WARNING:
HyperLogLog (HLL) is a probabilistic algorithm and its **results always includes some small error**. According to [Redis documentation](https://redis.io/commands/pfcount), data from
@@ -672,7 +537,7 @@ With `Gitlab::UsageDataCounters::HLLRedisCounter` we have available data structu
Implemented using Redis methods [PFADD](https://redis.io/commands/pfadd) and [PFCOUNT](https://redis.io/commands/pfcount).
-##### Adding new events
+##### Add new events
1. Define events in [`known_events`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/usage_data_counters/known_events/).
@@ -851,7 +716,7 @@ Next, get the unique events for the current week.
##### Recommendations
-We have the following recommendations for [Adding new events](#adding-new-events):
+We have the following recommendations for [adding new events](#add-new-events):
- Event aggregation: weekly.
- Key expiry time:
@@ -861,7 +726,7 @@ We have the following recommendations for [Adding new events](#adding-new-events
- For feature flags triggered by another service, set `default_enabled: false`,
- Events can be triggered using the `UsageData` API, which helps when there are > 10 events per change
-##### Enable/Disable Redis HLL tracking
+##### Enable or disable Redis HLL tracking
Events are tracked behind optional [feature flags](../feature_flags/index.md) due to concerns for Redis performance and scalability.
@@ -887,8 +752,8 @@ We can also disable tracking completely by using the global flag:
All events added in [`known_events/common.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/usage_data_counters/known_events/common.yml) are automatically added to Service Data generation under the `redis_hll_counters` key. This column is stored in [version-app as a JSON](https://gitlab.com/gitlab-services/version-gitlab-com/-/blob/master/db/schema.rb#L209).
For each event we add metrics for the weekly and monthly time frames, and totals for each where applicable:
-- `#{event_name}_weekly`: Data for 7 days for daily [aggregation](#adding-new-events) events and data for the last complete week for weekly [aggregation](#adding-new-events) events.
-- `#{event_name}_monthly`: Data for 28 days for daily [aggregation](#adding-new-events) events and data for the last 4 complete weeks for weekly [aggregation](#adding-new-events) events.
+- `#{event_name}_weekly`: Data for 7 days for daily [aggregation](#add-new-events) events and data for the last complete week for weekly [aggregation](#add-new-events) events.
+- `#{event_name}_monthly`: Data for 28 days for daily [aggregation](#add-new-events) events and data for the last 4 complete weeks for weekly [aggregation](#add-new-events) events.
Redis HLL implementation calculates automatic total metrics, if there are more than one metric for the same category, aggregation, and Redis slot.
@@ -921,7 +786,7 @@ Example of `redis_hll_counters` data:
}
```
-Example usage:
+Example:
```ruby
# Redis Counters
@@ -937,7 +802,7 @@ Gitlab::UsageDataCounters::HLLRedisCounter.track_event('users_expanding_vulnerab
redis_usage_data { Gitlab::UsageDataCounters::HLLRedisCounter.unique_events(event_names: 'users_expanding_vulnerabilities', start_date: 28.days.ago, end_date: Date.current) }
```
-### Alternative Counters
+### Alternative counters
Handles `StandardError` and fallbacks into -1 this way not all measures fail if we encounter one exception.
Mainly used for settings and configurations.
@@ -950,7 +815,7 @@ Arguments:
- or a `block`: which is evaluated
- `fallback: -1`: the common value used for any metrics that are failing.
-Usage:
+Example:
```ruby
alt_usage_data { Gitlab::VERSION }
@@ -958,25 +823,25 @@ alt_usage_data { Gitlab::CurrentSettings.uuid }
alt_usage_data(999)
```
-### Adding counters to build new metrics
+### Add counters to build new metrics
When adding the results of two counters, use the `add` Service Data method that
-handles fallback values and exceptions. It also generates a valid [SQL export](#exporting-service-ping-sql-queries-and-definitions).
+handles fallback values and exceptions. It also generates a valid [SQL export](#export-service-ping-sql-queries-and-definitions).
-Example usage:
+Example:
```ruby
add(User.active, User.bot)
```
-### Prometheus Queries
+### Prometheus queries
In those cases where operational metrics should be part of Service Ping, a database or Redis query is unlikely
to provide useful data. Instead, Prometheus might be more appropriate, because most GitLab architectural
components publish metrics to it that can be queried back, aggregated, and included as Service Data.
NOTE:
-Prometheus as a data source for Service Ping is currently only available for single-node Omnibus installations
+Prometheus as a data source for Service Ping is only available for single-node Omnibus installations
that are running the [bundled Prometheus](../../administration/monitoring/prometheus/index.md) instance.
To query Prometheus for metrics, a helper method is available to `yield` a fully configured
@@ -989,10 +854,10 @@ with_prometheus_client do |client|
end
```
-Please refer to [the `PrometheusClient` definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/prometheus_client.rb)
+Refer to [the `PrometheusClient` definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/prometheus_client.rb)
for how to use its API to query for data.
-### Fallback values for UsagePing
+### Fallback values for Service Ping
We return fallback values in these cases:
@@ -1002,186 +867,6 @@ We return fallback values in these cases:
| Timeouts, general failures | -1 |
| Standard errors in counters | -2 |
-## Developing and testing Service Ping
-
-### 1. Naming and placing the metrics
-
-Add the metric in one of the top level keys
-
-- `settings`: for settings related metrics.
-- `counts_weekly`: for counters that have data for the most recent 7 days.
-- `counts_monthly`: for counters that have data for the most recent 28 days.
-- `counts`: for counters that have data for all time.
-
-### 2. Use your Rails console to manually test counters
-
-```ruby
-# count
-Gitlab::UsageData.count(User.active)
-Gitlab::UsageData.count(::Clusters::Cluster.aws_installed.enabled, :cluster_id)
-
-# count distinct
-Gitlab::UsageData.distinct_count(::Project, :creator_id)
-Gitlab::UsageData.distinct_count(::Note.with_suggestions.where(time_period), :author_id, start: ::User.minimum(:id), finish: ::User.maximum(:id))
-```
-
-### 3. Generate the SQL query
-
-Your Rails console returns the generated SQL queries.
-
-Example:
-
-```ruby
-pry(main)> Gitlab::UsageData.count(User.active)
- (2.6ms) SELECT "features"."key" FROM "features"
- (15.3ms) SELECT MIN("users"."id") FROM "users" WHERE ("users"."state" IN ('active')) AND ("users"."user_type" IS NULL OR "users"."user_type" IN (6, 4))
- (2.4ms) SELECT MAX("users"."id") FROM "users" WHERE ("users"."state" IN ('active')) AND ("users"."user_type" IS NULL OR "users"."user_type" IN (6, 4))
- (1.9ms) SELECT COUNT("users"."id") FROM "users" WHERE ("users"."state" IN ('active')) AND ("users"."user_type" IS NULL OR "users"."user_type" IN (6, 4)) AND "users"."id" BETWEEN 1 AND 100000
-```
-
-### 4. Optimize queries with #database-lab
-
-Paste the SQL query into `#database-lab` to see how the query performs at scale.
-
-- `#database-lab` is a Slack channel which uses a production-sized environment to test your queries.
-- GitLab.com's production database has a 15 second timeout.
-- Any single query must stay below [1 second execution time](../query_performance.md#timing-guidelines-for-queries) with cold caches.
-- Add a specialized index on columns involved to reduce the execution time.
-
-To have an understanding of the query's execution we add in the MR description the following information:
-
-- For counters that have a `time_period` test we add information for both cases:
- - `time_period = {}` for all time periods
- - `time_period = { created_at: 28.days.ago..Time.current }` for last 28 days period
-- Execution plan and query time before and after optimization
-- Query generated for the index and time
-- Migration output for up and down execution
-
-We also use `#database-lab` and [explain.depesz.com](https://explain.depesz.com/). For more details, see the [database review guide](../database_review.md#preparation-when-adding-or-modifying-queries).
-
-#### Optimization recommendations and examples
-
-- Use specialized indexes [example 1](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/26871), [example 2](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/26445).
-- Use defined `start` and `finish`, and simple queries. These values can be memoized and reused, [example](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/37155).
-- Avoid joins and write the queries as simply as possible, [example](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/36316).
-- Set a custom `batch_size` for `distinct_count`, [example](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/38000).
-
-### 5. Add the metric definition
-
-[Check Metrics Dictionary Guide](metrics_dictionary.md)
-
-When adding, updating, or removing metrics, please update the [Metrics Dictionary](dictionary.md).
-
-### 6. Add new metric to Versions Application
-
-Check if new metrics need to be added to the Versions Application. See `usage_data` [schema](https://gitlab.com/gitlab-services/version-gitlab-com/-/blob/master/db/schema.rb#L147) and Service Data [parameters accepted](https://gitlab.com/gitlab-services/version-gitlab-com/-/blob/master/app/services/usage_ping.rb). Any metrics added under the `counts` key are saved in the `stats` column.
-
-### 7. Add the feature label
-
-Add the `feature` label to the Merge Request for new Service Ping metrics. These are user-facing changes and are part of expanding the Service Ping feature.
-
-### 8. Add a changelog
-
-Ensure you comply with the [Changelog entries guide](../changelog.md).
-
-### 9. Ask for a Product Intelligence Review
-
-On GitLab.com, we have DangerBot set up to monitor Product Intelligence related files and DangerBot recommends a [Product Intelligence review](review_guidelines.md).
-
-### 10. Verify your metric
-
-On GitLab.com, the Product Intelligence team regularly [monitors Service Ping](https://gitlab.com/groups/gitlab-org/-/epics/6000).
-They may alert you that your metrics need further optimization to run quicker and with greater success.
-
-The Service Ping JSON payload for GitLab.com is shared in the
-[#g_product_intelligence](https://gitlab.slack.com/archives/CL3A7GFPF) Slack channel every week.
-
-You may also use the [Service Ping QA dashboard](https://app.periscopedata.com/app/gitlab/632033/Usage-Ping-QA) to check how well your metric performs. The dashboard allows filtering by GitLab version, by "Self-managed" & "SaaS" and shows you how many failures have occurred for each metric. Whenever you notice a high failure rate, you may re-optimize your metric.
-
-### Service Ping local setup
-
-To set up Service Ping locally, you must:
-
-1. [Set up local repositories](#set-up-local-repositories).
-1. [Test local setup](#test-local-setup).
-1. (Optional) [Test Prometheus-based Service Ping](#test-prometheus-based-service-ping).
-
-#### Set up local repositories
-
-1. Clone and start [GitLab](https://gitlab.com/gitlab-org/gitlab-development-kit).
-1. Clone and start [Versions Application](https://gitlab.com/gitlab-services/version-gitlab-com).
- Make sure to run `docker-compose up` to start a PostgreSQL and Redis instance.
-1. Point GitLab to the Versions Application endpoint instead of the default endpoint:
- 1. Open [submit_usage_ping_service.rb](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/services/submit_usage_ping_service.rb#L4) in your local and modified `PRODUCTION_URL`.
- 1. Set it to the local Versions Application URL `http://localhost:3000/usage_data`.
-
-#### Test local setup
-
-1. Using the `gitlab` Rails console, manually trigger Service Ping:
-
- ```ruby
- ServicePing::SubmitService.new.execute
- ```
-
-1. Use the `versions` Rails console to check the Service Ping was successfully received,
- parsed, and stored in the Versions database:
-
- ```ruby
- UsageData.last
- ```
-
-### Test Prometheus-based Service Ping
-
-If the data submitted includes metrics [queried from Prometheus](#prometheus-queries)
-you want to inspect and verify, you must:
-
-- Ensure that a Prometheus server is running locally.
-- Ensure the respective GitLab components are exporting metrics to the Prometheus server.
-
-If you do not need to test data coming from Prometheus, no further action
-is necessary. Service Ping should degrade gracefully in the absence of a running Prometheus server.
-
-Three kinds of components may export data to Prometheus, and are included in Service Ping:
-
-- [`node_exporter`](https://github.com/prometheus/node_exporter): Exports node metrics
- from the host machine.
-- [`gitlab-exporter`](https://gitlab.com/gitlab-org/gitlab-exporter): Exports process metrics
- from various GitLab components.
-- Other various GitLab services, such as Sidekiq and the Rails server, which export their own metrics.
-
-#### Test with an Omnibus container
-
-This is the recommended approach to test Prometheus based Service Ping.
-
-The easiest way to verify your changes is to build a new Omnibus image from your code branch by using CI, then download the image
-and run a local container instance:
-
-1. From your merge request, click on the `qa` stage, then trigger the `package-and-qa` job. This job triggers an Omnibus
-build in a [downstream pipeline of the `omnibus-gitlab-mirror` project](https://gitlab.com/gitlab-org/build/omnibus-gitlab-mirror/-/pipelines).
-1. In the downstream pipeline, wait for the `gitlab-docker` job to finish.
-1. Open the job logs and locate the full container name including the version. It takes the following form: `registry.gitlab.com/gitlab-org/build/omnibus-gitlab-mirror/gitlab-ee:<VERSION>`.
-1. On your local machine, make sure you are signed in to the GitLab Docker registry. You can find the instructions for this in
-[Authenticate to the GitLab Container Registry](../../user/packages/container_registry/index.md#authenticate-with-the-container-registry).
-1. Once signed in, download the new image by using `docker pull registry.gitlab.com/gitlab-org/build/omnibus-gitlab-mirror/gitlab-ee:<VERSION>`
-1. For more information about working with and running Omnibus GitLab containers in Docker, please refer to [GitLab Docker images](https://docs.gitlab.com/omnibus/docker/README.html) in the Omnibus documentation.
-
-#### Test with GitLab development toolkits
-
-This is the less recommended approach, because it comes with a number of difficulties when emulating a real GitLab deployment.
-
-The [GDK](https://gitlab.com/gitlab-org/gitlab-development-kit) is not set up to run a Prometheus server or `node_exporter` alongside other GitLab components. If you would
-like to do so, [Monitoring the GDK with Prometheus](https://gitlab.com/gitlab-org/gitlab-development-kit/-/blob/main/doc/howto/prometheus/index.md#monitoring-the-gdk-with-prometheus) is a good start.
-
-The [GCK](https://gitlab.com/gitlab-org/gitlab-compose-kit) has limited support for testing Prometheus based Service Ping.
-By default, it already comes with a fully configured Prometheus service that is set up to scrape a number of components,
-but with the following limitations:
-
-- It does not run a `gitlab-exporter` instance, so several `process_*` metrics from services such as Gitaly may be missing.
-- While it runs a `node_exporter`, `docker-compose` services emulate hosts, meaning that it would normally report itself to not be associated
-with any of the other services that are running. That is not how node metrics are reported in a production setup, where `node_exporter`
-always runs as a process alongside other GitLab components on any given node. From Service Ping's perspective none of the node data would therefore
-appear to be associated to any of the services running, because they all appear to be running on different hosts. To alleviate this problem, the `node_exporter` in GCK was arbitrarily "assigned" to the `web` service, meaning only for this service `node_*` metrics appears in Service Ping.
-
## Aggregated metrics
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/45979) in GitLab 13.6.
@@ -1189,7 +874,10 @@ appear to be associated to any of the services running, because they all appear
WARNING:
This feature is intended solely for internal GitLab use.
-To add data for aggregated metrics into Service Ping payload you should add corresponding definition at [`config/metrics/aggregates/*.yaml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/aggregates/) for metrics available at Community Edition and at [`ee/config/metrics/aggregates/*.yaml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/aggregates/) for Enterprise Edition ones.
+To add data for aggregated metrics to the Service Ping payload, add a corresponding definition to:
+
+- [`config/metrics/aggregates/*.yaml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/aggregates/) for metrics available in the Community Edition.
+- [`ee/config/metrics/aggregates/*.yaml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/aggregates/) for metrics available in the Enterprise Edition.
Each aggregate definition includes following parts:
@@ -1578,7 +1266,7 @@ The following is example content of the Service Ping payload.
In GitLab 13.5, `pg_system_id` was added to send the [PostgreSQL system identifier](https://www.2ndquadrant.com/en/blog/support-for-postgresqls-system-identifier-in-barman/).
-## Exporting Service Ping SQL queries and definitions
+## Export Service Ping SQL queries and definitions
Two Rake tasks exist to export Service Ping definitions.
@@ -1638,25 +1326,25 @@ you are not impacted by this bug.
#### Check if you are affected
-You can check if you were affected by this bug by using the Admin area or by
+You can check if you were affected by this bug by using the Admin Area or by
checking the configuration file of your GitLab instance:
-- Using the Admin area:
+- Using the Admin Area:
- 1. On the top bar, go to the admin area (**{admin}**).
+ 1. On the top bar, select **Menu >** **{admin}** **Admin**.
1. On the left sidebar, select **Settings > Metrics and profiling**.
1. Expand **Usage Statistics**.
- 1. Are you able to check/uncheck the checkbox to disable Service Ping?
+ 1. Are you able to check or uncheck the checkbox to disable Service Ping?
- If _yes_, your GitLab instance is not affected by this bug.
- - If you can't check/uncheck the checkbox, you are affected by this bug.
- Read below [how to fix this](#how-to-fix-the-cannot-disable-service-ping-bug).
+ - If you can't check or uncheck the checkbox, you are affected by this bug.
+ See the steps on [how to fix this](#how-to-fix-the-cannot-disable-service-ping-bug).
- Checking your GitLab instance configuration file:
To check whether you're impacted by this bug, check your instance configuration
- settings. The configuration file in which Service Ping can be disabled will depend
- on your installation and deployment method, but it will typically be one of the following:
+ settings. The configuration file in which Service Ping can be disabled depends
+ on your installation and deployment method, but is typically one of the following:
- `/etc/gitlab/gitlab.rb` for Omnibus GitLab Linux Package and Docker.
- `charts.yaml` for GitLab Helm and cloud-native Kubernetes deployments.
@@ -1700,7 +1388,7 @@ To work around this bug, you have two options:
sudo gitlab-ctl reconfigure
```
- 1. In GitLab, on the top bar, go to the admin area (**{admin}**).
+ 1. In GitLab, on the top bar, select **Menu >** **{admin}** **Admin**.
1. On the left sidebar, select **Settings > Metrics and profiling**.
1. Expand **Usage Statistics**.
1. Clear the **Enable service ping** checkbox.
diff --git a/doc/development/service_ping/metrics_dictionary.md b/doc/development/service_ping/metrics_dictionary.md
index b64b2234fa9..b3c5f078a4a 100644
--- a/doc/development/service_ping/metrics_dictionary.md
+++ b/doc/development/service_ping/metrics_dictionary.md
@@ -6,7 +6,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
# Metrics Dictionary Guide
-This guide describes Metrics Dictionary and how it's implemented
+This guide describes the [Metrics Dictionary](https://gitlab-org.gitlab.io/growth/product-intelligence/metric-dictionary) and how it's implemented.
## Metrics Definition and validation
@@ -37,10 +37,11 @@ Each metric is defined in a separate YAML file consisting of a number of fields:
| `status` | yes | `string`; [status](#metric-statuses) of the metric, may be set to `data_available`, `implemented`, `not_used`, `deprecated`, `removed`, `broken`. |
| `time_frame` | yes | `string`; may be set to a value like `7d`, `28d`, `all`, `none`. |
| `data_source` | yes | `string`; may be set to a value like `database`, `redis`, `redis_hll`, `prometheus`, `system`. |
-| `data_category` | yes | `string`; [categories](#data-category) of the metric, may be set to `Operational`, `Optional`, `Subscription`, `Standard`. |
+| `data_category` | yes | `string`; [categories](#data-category) of the metric, may be set to `operational`, `optional`, `subscription`, `standard`. The default value is `optional`.|
| `instrumentation_class` | no | `string`; [the class that implements the metric](metrics_instrumentation.md). |
| `distribution` | yes | `array`; may be set to one of `ce, ee` or `ee`. The [distribution](https://about.gitlab.com/handbook/marketing/strategic-marketing/tiers/#definitions) where the tracked feature is available. |
-| `tier` | yes | `array`; may be set to one of `free, premium, ultimate`, `premium, ultimate` or `ultimate`. The [tier]( https://about.gitlab.com/handbook/marketing/strategic-marketing/tiers/) where the tracked feature is available. |
+| `performance_indicator_type` | no | `array`; may be set to one of [`gmau`, `smau`, `paid_gmau`, or `umau`](https://about.gitlab.com/handbook/business-technology/data-team/data-catalog/xmau-analysis/). |
+| `tier` | yes | `array`; may contain one or a combination of `free`, `premium` or `ultimate`. The [tier]( https://about.gitlab.com/handbook/marketing/strategic-marketing/tiers/) where the tracked feature is available. |
| `milestone` | no | The milestone when the metric is introduced. |
| `milestone_removed` | no | The milestone when the metric is removed. |
| `introduced_by_url` | no | The URL to the Merge Request that introduced the metric. |
@@ -98,10 +99,10 @@ should be changed.
We use the following categories to classify a metric:
-- `Operational`: Required data for operational purposes.
-- `Optional`: Data that is optional to collect. This can be [enabled or disabled](../service_ping/index.md#disable-service-ping) in the Admin Area.
-- `Subscription`: Data related to licensing.
-- `Standard`: Standard set of identifiers that are included when collecting data.
+- `operational`: Required data for operational purposes.
+- `optional`: Default value for a metric. Data that is optional to collect. This can be [enabled or disabled](../service_ping/index.md#disable-service-ping) in the Admin Area.
+- `subscription`: Data related to licensing.
+- `standard`: Standard set of identifiers that are included when collecting data.
### Metric name suggestion examples
diff --git a/doc/development/service_ping/metrics_instrumentation.md b/doc/development/service_ping/metrics_instrumentation.md
index 61a1ff828be..8ad1ae9cce2 100644
--- a/doc/development/service_ping/metrics_instrumentation.md
+++ b/doc/development/service_ping/metrics_instrumentation.md
@@ -11,7 +11,7 @@ This guide describes how to develop Service Ping metrics using metrics instrumen
## Nomenclature
- **Instrumentation class**:
- - Inherits one of the metric classes: `DatabaseMetric`, `RedisHLLMetric` or `GenericMetric`.
+ - Inherits one of the metric classes: `DatabaseMetric`, `RedisMetric`, `RedisHLLMetric` or `GenericMetric`.
- Implements the logic that calculates the value for a Service Ping metric.
- **Metric definition**
@@ -24,7 +24,7 @@ This guide describes how to develop Service Ping metrics using metrics instrumen
A metric definition has the [`instrumentation_class`](metrics_dictionary.md) field, which can be set to a class.
-The defined instrumentation class should have one of the existing metric classes: `DatabaseMetric`, `RedisHLLMetric`, or `GenericMetric`.
+The defined instrumentation class should have one of the existing metric classes: `DatabaseMetric`, `RedisMetric`, `RedisHLLMetric`, or `GenericMetric`.
Using the instrumentation classes ensures that metrics can fail safe individually, without breaking the entire
process of Service Ping generation.
@@ -51,6 +51,26 @@ module Gitlab
end
```
+## Redis metrics
+
+[Example of a merge request that adds a `Redis` metric](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66582).
+
+Count unique values for `source_code_pushes` event.
+
+Required options:
+
+- `event`: the event name.
+- `counter_class`: one of the counter classes from the `Gitlab::UsageDataCounters` namespace; it should implement `read` method or inherit it from `BaseCounter`.
+
+```yaml
+time_frame: all
+data_source: redis
+instrumentation_class: 'RedisMetric'
+options:
+ event: pushes
+ counter_class: SourceCodeCounter
+```
+
## Redis HyperLogLog metrics
[Example of a merge request that adds a `RedisHLL` metric](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/61685).
@@ -60,7 +80,7 @@ Count unique values for `i_quickactions_approve` event.
```yaml
time_frame: 28d
data_source: redis_hll
-instrumentation_class: 'Gitlab::Usage::Metrics::Instrumentations::RedisHLLMetric'
+instrumentation_class: 'RedisHLLMetric'
options:
events:
- i_quickactions_approve
@@ -86,13 +106,29 @@ module Gitlab
end
```
+## Support for instrumentation classes
+
+There is support for:
+
+- `count`, `distinct_count`, `estimate_batch_distinct_count` for [database metrics](#database-metrics).
+- [Redis metrics](#redis-metrics).
+- [Redis HLL metrics](#redis-hyperloglog-metrics).
+- [Generic metrics](#generic-metrics), which are metrics based on settings or configurations.
+
+Currently, there is no support for:
+
+- `add`, `sum`, `histogram` for database metrics.
+
+You can [track the progress to support these](https://gitlab.com/groups/gitlab-org/-/epics/6118).
+
## Creating a new metric instrumentation class
To create a stub instrumentation for a Service Ping metric, you can use a dedicated [generator](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/generators/gitlab/usage_metric_generator.rb):
The generator takes the class name as an argument and the following options:
-- `--type=TYPE` Required. Indicates the metric type. It must be one of: `database`, `generic`, `redis_hll`.
+- `--type=TYPE` Required. Indicates the metric type. It must be one of: `database`, `generic`, `redis`.
+- `--operation` Required for `database` type. It must be one of: `count`, `distinct_count`, `estimate_batch_distinct_count`.
- `--ee` Indicates if the metric is for EE.
```shell
diff --git a/doc/development/service_ping/metrics_lifecycle.md b/doc/development/service_ping/metrics_lifecycle.md
new file mode 100644
index 00000000000..68c5ddecc1f
--- /dev/null
+++ b/doc/development/service_ping/metrics_lifecycle.md
@@ -0,0 +1,187 @@
+---
+stage: Growth
+group: Product Intelligence
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# Service Ping metric lifecycle
+
+The following guidelines explain the steps to follow at each stage of a metric's lifecycle.
+
+## Add a new metric
+
+Please follow the [Implementing Service Ping](index.md#implementing-service-ping) guide.
+
+## Change an existing metric
+
+Because we do not control when customers update their self-managed instances of GitLab,
+we **STRONGLY DISCOURAGE** changes to the logic used to calculate any metric.
+Any such changes lead to inconsistent reports from multiple GitLab instances.
+If there is a problem with an existing metric, it's best to deprecate the existing metric,
+and use it, side by side, with the desired new metric.
+
+Example:
+Consider following change. Before GitLab 12.6, the `example_metric` was implemented as:
+
+```ruby
+{
+ ...
+ example_metric: distinct_count(Project, :creator_id)
+}
+```
+
+For GitLab 12.6, the metric was changed to filter out archived projects:
+
+```ruby
+{
+ ...
+ example_metric: distinct_count(Project.non_archived, :creator_id)
+}
+```
+
+In this scenario all instances running up to GitLab 12.5 continue to report `example_metric`,
+including all archived projects, while all instances running GitLab 12.6 and higher filters
+out such projects. As Service Ping data is collected from all reporting instances, the
+resulting dataset includes mixed data, which distorts any following business analysis.
+
+The correct approach is to add a new metric for GitLab 12.6 release with updated logic:
+
+```ruby
+{
+ ...
+ example_metric_without_archived: distinct_count(Project.non_archived, :creator_id)
+}
+```
+
+and update existing business analysis artefacts to use `example_metric_without_archived` instead of `example_metric`
+
+## Deprecate a metric
+
+If a metric is obsolete and you no longer use it, you can mark it as deprecated.
+
+For an example of the metric deprecation process take a look at this [example merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/59899)
+
+To deprecate a metric:
+
+1. Check the following YAML files and verify the metric is not used in an aggregate:
+ - [`config/metrics/aggregates/*.yaml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/aggregates/)
+ - [`ee/config/metrics/aggregates/*.yaml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/aggregates/)
+
+1. Create an issue in the [GitLab Data Team
+ project](https://gitlab.com/gitlab-data/analytics/-/issues). Ask for
+ confirmation that the metric is not used by other teams, or in any of the SiSense
+ dashboards.
+
+1. Verify the metric is not used to calculate the conversational index. The
+ conversational index is a measure that reports back to self-managed instances
+ to inform administrators of the progress of DevOps adoption for the instance.
+
+ You can check
+ [`CalculateConvIndexService`](https://gitlab.com/gitlab-services/version-gitlab-com/-/blob/master/app/services/calculate_conv_index_service.rb)
+ to view the metrics that are used. The metrics are represented
+ as the keys that are passed as a field argument into the `get_value` method.
+
+1. Document the deprecation in the metric's YAML definition. Set
+ the `status:` attribute to `deprecated`, for example:
+
+ ```yaml
+ ---
+ key_path: analytics_unique_visits.analytics_unique_visits_for_any_target_monthly
+ description: Visits to any of the pages listed above per month
+ product_section: dev
+ product_stage: manage
+ product_group: group::analytics
+ product_category:
+ value_type: number
+ status: deprecated
+ time_frame: 28d
+ data_source:
+ distribution:
+ - ce
+ tier:
+ - free
+ ```
+
+1. Replace the metric's instrumentation with a fixed value. This avoids wasting
+ resources to calculate the deprecated metric. In
+ [`lib/gitlab/usage_data.rb`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/usage_data.rb)
+ or
+ [`ee/lib/ee/gitlab/usage_data.rb`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/lib/ee/gitlab/usage_data.rb),
+ replace the code that calculates the metric's value with a fixed value that
+ indicates it's deprecated:
+
+ ```ruby
+ module Gitlab
+ class UsageData
+ DEPRECATED_VALUE = -1000
+
+ def analytics_unique_visits_data
+ results['analytics_unique_visits_for_any_target'] = redis_usage_data { unique_visit_service.unique_visits_for(targets: :analytics) }
+ results['analytics_unique_visits_for_any_target_monthly'] = DEPRECATED_VALUE
+
+ { analytics_unique_visits: results }
+ end
+ # ...
+ end
+ end
+ ```
+
+## Remove a metric
+
+### Removal policy
+
+WARNING:
+A metric that is not used in Sisense or any other system after 6 months is marked by the
+Product Intelligence team as inactive and is assigned to the group owner for review.
+
+We are working on automating this process. See [this issue](https://gitlab.com/gitlab-org/gitlab/-/issues/338466) for details.
+
+Only deprecated metrics can be removed from Service Ping.
+
+For an example of the metric removal process take a look at this [example issue](https://gitlab.com/gitlab-org/gitlab/-/issues/297029)
+
+### To remove a deprecated metric
+
+1. Verify that removing the metric from the Service Ping payload does not cause
+ errors in [Version App](https://gitlab.com/gitlab-services/version-gitlab-com)
+ when the updated payload is collected and processed. Version App collects
+ and persists all Service Ping reports. To do that you can modify
+ [fixtures](https://gitlab.com/gitlab-services/version-gitlab-com/-/blob/master/spec/support/usage_data_helpers.rb#L540)
+ used to test
+ [`UsageDataController#create`](https://gitlab.com/gitlab-services/version-gitlab-com/-/blob/3760ef28/spec/controllers/usage_data_controller_spec.rb#L75)
+ endpoint, and assure that test suite does not fail when metric that you wish to remove is not included into test payload.
+
+1. Create an issue in the
+ [GitLab Data Team project](https://gitlab.com/gitlab-data/analytics/-/issues).
+ Ask for confirmation that the metric is not referred to in any SiSense dashboards and
+ can be safely removed from Service Ping. Use this
+ [example issue](https://gitlab.com/gitlab-data/analytics/-/issues/7539) for guidance.
+ This step can be skipped if verification done during [deprecation process](#deprecate-a-metric)
+ reported that metric is not required by any data transformation in Snowflake data warehouse nor it is
+ used by any of SiSense dashboards.
+
+1. After you verify the metric can be safely removed,
+ update the attributes of the metric's YAML definition:
+
+ - Set the `status:` to `removed`.
+ - Set `milestone_removed:` to the number of the
+ milestone in which the metric was removed.
+
+ Do not remove the metric's YAML definition altogether. Some self-managed
+ instances might not immediately update to the latest version of GitLab, and
+ therefore continue to report the removed metric. The Product Intelligence team
+ requires a record of all removed metrics in order to identify and filter them.
+
+ For example please take a look at this [merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/60149/diffs#b01f429a54843feb22265100c0e4fec1b7da1240_10_10).
+
+1. After you verify the metric can be safely removed,
+ remove the metric's instrumentation from
+ [`lib/gitlab/usage_data.rb`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/usage_data.rb)
+ or
+ [`ee/lib/ee/gitlab/usage_data.rb`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/lib/ee/gitlab/usage_data.rb).
+
+ For example please take a look at this [merge request](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/60149/diffs#6335dc533bd21df26db9de90a02dd66278c2390d_167_167).
+
+1. Remove any other records related to the metric:
+ - The feature flag YAML file at [`config/feature_flags/*/*.yaml`](https://gitlab.com/gitlab-org/gitlab/-/tree/master/config/feature_flags).
+ - The entry in the known events YAML file at [`lib/gitlab/usage_data_counters/known_events/*.yaml`](https://gitlab.com/gitlab-org/gitlab/-/tree/master/lib/gitlab/usage_data_counters/known_events).
diff --git a/doc/development/service_ping/review_guidelines.md b/doc/development/service_ping/review_guidelines.md
index a4fb929a8a0..f961fd376bd 100644
--- a/doc/development/service_ping/review_guidelines.md
+++ b/doc/development/service_ping/review_guidelines.md
@@ -14,7 +14,7 @@ general best practices for code reviews, refer to our [code review guide](../cod
## Resources for reviewers
- [Service Ping Guide](index.md)
-- [Metrics Dictionary](metrics_dictionary.md)
+- [Metrics Dictionary](https://gitlab-org.gitlab.io/growth/product-intelligence/metric-dictionary)
## Review process
@@ -25,7 +25,6 @@ any of the following Service Ping files:
- The Metrics Dictionary, including files in:
- [`config/metrics`](https://gitlab.com/gitlab-org/gitlab/-/tree/master/config/metrics).
- [`ee/config/metrics`](https://gitlab.com/gitlab-org/gitlab/-/tree/master/ee/config/metrics).
- - [`dictionary.md`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/usage_ping/dictionary.md).
- [`schema.json`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/schema.json).
- Product Intelligence tooling. For example,
[`Gitlab::UsageMetricDefinitionGenerator`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/generators/gitlab/usage_metric_definition_generator.rb)
@@ -34,23 +33,28 @@ any of the following Service Ping files:
#### The merge request **author** should
-- Decide whether a Product Intelligence review is needed.
+- Decide whether a Product Intelligence review is needed. You can skip the Product Intelligence
+review and remove the labels if the changes are not related to the Product Intelligence domain and
+are regular backend changes.
- If a Product Intelligence review is needed, add the labels
`~product intelligence` and `~product intelligence::review pending`.
+- For merge requests authored by Product Intelligence team members:
+ - Assign both the `~backend` and `~product intelligence` reviews to another Product Intelligence team member.
+ - Assign the maintainer review to someone outside of the Product Intelligence group.
- Assign an
[engineer](https://gitlab.com/groups/gitlab-org/growth/product-intelligence/engineers/-/group_members?with_inherited_permissions=exclude) from the Product Intelligence team for a review.
- Set the correct attributes in the metric's YAML definition:
- `product_section`, `product_stage`, `product_group`, `product_category`
- Provide a clear description of the metric.
-- Update the
- [Metrics Dictionary](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/development/usage_ping/dictionary.md) if needed.
- Add a changelog [according to guidelines](../changelog.md).
#### The Product Intelligence **reviewer** should
- Perform a first-pass review on the merge request and suggest improvements to the author.
-- Check the [metrics location](index.md#1-naming-and-placing-the-metrics) in
+- Check the [metrics location](implement.md#name-and-place-the-metric) in
the Service Ping JSON payload.
+- Suggest that the author checks the [naming suggestion](implement.md#how-to-get-a-metric-name-suggestion) while
+ generating the metric's YAML definition.
- Add the `~database` label and ask for a [database review](../database_review.md) for
metrics that are based on Database.
- For tracking using Redis HLL (HyperLogLog):
@@ -63,6 +67,8 @@ any of the following Service Ping files:
Read the [stages file](https://gitlab.com/gitlab-com/www-gitlab-com/blob/master/data/stages.yml).
- Check the file location. Consider the time frame, and if the file should be under `ee`.
- Check the tiers.
+- Metrics instrumentations
+ - Recommend using metrics instrumentation for new metrics, [if possible](metrics_instrumentation.md#support-for-instrumentation-classes).
- Approve the MR, and relabel the MR with `~"product intelligence::approved"`.
## Review workload distribution
diff --git a/doc/development/sidekiq_style_guide.md b/doc/development/sidekiq_style_guide.md
index a77c9908ef4..c1733a974e4 100644
--- a/doc/development/sidekiq_style_guide.md
+++ b/doc/development/sidekiq_style_guide.md
@@ -466,6 +466,24 @@ If we expect an increase of **less than 5%**, then no further action is needed.
Otherwise, please ping `@gitlab-org/scalability` on the merge request and ask
for a review.
+## Job size
+
+GitLab stores Sidekiq jobs and their arguments in Redis. To avoid
+excessive memory usage, we compress the arguments of Sidekiq jobs
+if their original size is bigger than 100KB.
+
+After compression, if their size still exceeds 5MB, it raises an
+[`ExceedLimitError`](https://gitlab.com/gitlab-org/gitlab/-/blob/f3dd89e5e510ea04b43ffdcb58587d8f78a8d77c/lib/gitlab/sidekiq_middleware/size_limiter/exceed_limit_error.rb#L8)
+error when scheduling the job.
+
+If this happens, rely on other means of making the data
+available in Sidekiq. There are possible workarounds such as:
+
+- Rebuild the data in Sidekiq with data loaded from the database or
+ elsewhere.
+- Store the data in [object storage](file_storage.md#object-storage)
+ before scheduling the job, and retrieve it inside the job.
+
## Job data consistency strategies
In GitLab 13.11 and earlier, Sidekiq workers would always send database queries to the primary
diff --git a/doc/development/snowplow.md b/doc/development/snowplow.md
deleted file mode 100644
index aa1733fd42a..00000000000
--- a/doc/development/snowplow.md
+++ /dev/null
@@ -1,8 +0,0 @@
----
-redirect_to: 'snowplow/index.md'
-remove_date: '2021-06-30'
----
-This document was moved to [another location](snowplow/index.md).
-
-<!-- This redirect file can be deleted after 2021-06-31. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/development/snowplow/dictionary.md b/doc/development/snowplow/dictionary.md
index f20ec41d558..589d6f6fb9f 100644
--- a/doc/development/snowplow/dictionary.md
+++ b/doc/development/snowplow/dictionary.md
@@ -7,7 +7,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
<!---
This documentation is auto generated by a script.
- Please do not edit this file directly, check generate_metrics_dictionary task on lib/tasks/gitlab/usage_data.rake.
+ Please do not edit this file directly, check generate_event_dictionary task on lib/tasks/gitlab/snowplow.rake.
--->
<!-- vale gitlab.Spelling = NO -->
diff --git a/doc/development/snowplow/index.md b/doc/development/snowplow/index.md
index 552249344c7..527b4292b23 100644
--- a/doc/development/snowplow/index.md
+++ b/doc/development/snowplow/index.md
@@ -279,7 +279,8 @@ export default {
```
The event data can be provided with a `tracking` object, declared in the `data` function,
-or as a `computed property`.
+or as a `computed property`. A `tracking` object is convenient when the default
+event properties are dynamic or provided at runtime.
```javascript
export default {
@@ -292,6 +293,7 @@ export default {
// category: '',
// property: '',
// value: '',
+ // experiment: '',
// extra: {},
},
};
@@ -549,14 +551,14 @@ Snowplow Micro is a Docker-based solution for testing frontend and backend event
update application_settings set snowplow_collector_hostname='localhost:9090', snowplow_enabled=true, snowplow_cookie_domain='.gitlab.com';
```
-1. Update `DEFAULT_SNOWPLOW_OPTIONS` in `app/assets/javascripts/tracking/index.js` to remove `forceSecureTracker: true`:
+1. Update `DEFAULT_SNOWPLOW_OPTIONS` in `app/assets/javascripts/tracking/constants.js` to remove `forceSecureTracker: true`:
```diff
- diff --git a/app/assets/javascripts/tracking/index.js b/app/assets/javascripts/tracking/index.js
- index 0a1211d0a76..3b98c8f28f2 100644
- --- a/app/assets/javascripts/tracking/index.js
- +++ b/app/assets/javascripts/tracking/index.js
- @@ -7,7 +7,6 @@ const DEFAULT_SNOWPLOW_OPTIONS = {
+ diff --git a/app/assets/javascripts/tracking/constants.js b/app/assets/javascripts/tracking/constants.js
+ index 598111e4086..eff38074d4c 100644
+ --- a/app/assets/javascripts/tracking/constants.js
+ +++ b/app/assets/javascripts/tracking/constants.js
+ @@ -7,7 +7,6 @@ export const DEFAULT_SNOWPLOW_OPTIONS = {
appId: '',
userFingerprint: false,
respectDoNotTrack: true,
@@ -564,7 +566,6 @@ Snowplow Micro is a Docker-based solution for testing frontend and backend event
eventMethod: 'post',
contexts: { webPage: true, performanceTiming: true },
formTracking: false,
-
```
1. Update `snowplow_options` in `lib/gitlab/tracking.rb` to add `protocol` and `port`:
diff --git a/doc/development/sql.md b/doc/development/sql.md
index ddca88cb9bb..40ee19c0b9e 100644
--- a/doc/development/sql.md
+++ b/doc/development/sql.md
@@ -311,6 +311,75 @@ union = Gitlab::SQL::Union.new([projects, more_projects, ...])
Project.from("(#{union.to_sql}) projects")
```
+### Uneven columns in the UNION sub-queries
+
+When the UNION query has uneven columns in the SELECT clauses, the database returns an error.
+Consider the following UNION query:
+
+```sql
+SELECT id FROM users WHERE id = 1
+UNION
+SELECT id, name FROM users WHERE id = 2
+end
+```
+
+The query results in the following error message:
+
+```plaintext
+each UNION query must have the same number of columns
+```
+
+This problem is apparent and it can be easily fixed during development. One edge-case is when
+UNION queries are combined with explicit column listing where the list comes from the
+`ActiveRecord` schema cache.
+
+Example (bad, avoid it):
+
+```ruby
+scope1 = User.select(User.column_names).where(id: [1, 2, 3]) # selects the columns explicitly
+scope2 = User.where(id: [10, 11, 12]) # uses SELECT users.*
+
+User.connection.execute(Gitlab::SQL::Union.new([scope1, scope2]).to_sql)
+```
+
+When this code is deployed, it doesn't cause problems immediately. When another
+developer adds a new database column to the `users` table, this query breaks in
+production and can cause downtime. The second query (`SELECT users.*`) includes the
+newly added column; however, the first query does not. The `column_names` method returns stale
+values (the new column is missing), because the values are cached within the `ActiveRecord` schema
+cache. These values are usually populated when the application boots up.
+
+At this point, the only fix would be a full application restart so that the schema cache gets
+updated.
+
+The problem can be avoided if we always use `SELECT users.*` or we always explicitly define the
+columns.
+
+Using `SELECT users.*`:
+
+```ruby
+# Bad, avoid it
+scope1 = User.select(User.column_names).where(id: [1, 2, 3])
+scope2 = User.where(id: [10, 11, 12])
+
+# Good, both queries generate SELECT users.*
+scope1 = User.where(id: [1, 2, 3])
+scope2 = User.where(id: [10, 11, 12])
+
+User.connection.execute(Gitlab::SQL::Union.new([scope1, scope2]).to_sql)
+```
+
+Explicit column list definition:
+
+```ruby
+# Good, the SELECT columns are consistent
+columns = User.cached_column_names # The helper returns fully qualified (table.column) column names (Arel)
+scope1 = User.select(*columns).where(id: [1, 2, 3]) # selects the columns explicitly
+scope2 = User.select(*columns).where(id: [10, 11, 12]) # uses SELECT users.*
+
+User.connection.execute(Gitlab::SQL::Union.new([scope1, scope2]).to_sql)
+```
+
## Ordering by Creation Date
When ordering records based on the time they were created, you can order
@@ -360,14 +429,33 @@ Using transactions does not solve this problem.
To solve this we've added the `ApplicationRecord.safe_find_or_create_by`.
-This method can be used just as you would the normal
-`find_or_create_by` but it wraps the call in a *new* transaction and
+This method can be used the same way as
+`find_or_create_by`, but it wraps the call in a *new* transaction (or a subtransaction) and
retries if it were to fail because of an
`ActiveRecord::RecordNotUnique` error.
To be able to use this method, make sure the model you want to use
this on inherits from `ApplicationRecord`.
+In Rails 6 and later, there is a
+[`.create_or_find_by`](https://api.rubyonrails.org/classes/ActiveRecord/Relation.html#method-i-create_or_find_by)
+method. This method differs from our `.safe_find_or_create_by` methods
+because it performs the `INSERT`, and then performs the `SELECT` commands only if that call
+fails.
+
+If the `INSERT` fails, it will leave a dead tuple around and
+increment the primary key sequence (if any), among [other downsides](https://api.rubyonrails.org/classes/ActiveRecord/Relation.html#method-i-create_or_find_by).
+
+We prefer `.safe_find_or_create_by` if the common path is that we
+have a single record which is reused after it has first been created.
+However, if the more common path is to create a new record, and we only
+want to avoid duplicate records to be inserted on edge cases
+(for example a job-retry), then `.create_or_find_by` can save us a `SELECT`.
+
+Both methods use subtransactions internally if executed within the context of
+an existing transaction. This can significantly impact overall performance,
+especially if more than 64 live subtransactions are being used inside a single transaction.
+
## Monitor SQL queries in production
GitLab team members can monitor slow or canceled queries on GitLab.com
diff --git a/doc/development/stage_group_dashboards.md b/doc/development/stage_group_dashboards.md
index 8d44b36bc4a..61a98ece892 100644
--- a/doc/development/stage_group_dashboards.md
+++ b/doc/development/stage_group_dashboards.md
@@ -112,7 +112,7 @@ component means. For example, see the `server` component of the
![web-pages-server-component SLI](img/stage_group_dashboards_service_sli_detail.png)
-## Usage of the dasbhoard
+## Usage of the dashboard
Inside a stage group dashboard, there are some notable components. Let's take the [Source Code group's dashboard](https://dashboards.gitlab.net/d/stage-groups-source_code/stage-groups-group-dashboard-create-source-code?orgId=1) as an example.
diff --git a/doc/development/testing_guide/best_practices.md b/doc/development/testing_guide/best_practices.md
index e153fa9f334..ba7312b760f 100644
--- a/doc/development/testing_guide/best_practices.md
+++ b/doc/development/testing_guide/best_practices.md
@@ -911,14 +911,16 @@ describe '#show', :snowplow do
expect_snowplow_event(
category: 'Experiment',
action: 'start',
- standard_context: { namespace: group, project: project }
+ namespace: group,
+ project: project
)
expect_snowplow_event(
category: 'Experiment',
action: 'sent',
property: 'property',
label: 'label',
- standard_context: { namespace: group, project: project }
+ namespace: group,
+ project: project
)
end
end
@@ -972,11 +974,16 @@ range of inputs, might look like this:
describe "#==" do
using RSpec::Parameterized::TableSyntax
+ let(:one) { 1 }
+ let(:two) { 2 }
+
where(:a, :b, :result) do
- 1 | 1 | true
- 1 | 2 | false
- true | true | true
- true | false | false
+ 1 | 1 | true
+ 1 | 2 | false
+ true | true | true
+ true | false | false
+ ref(:one) | ref(:one) | true # let variables must be referenced using `ref`
+ ref(:one) | ref(:two) | false
end
with_them do
@@ -989,11 +996,13 @@ describe "#==" do
end
```
+<!-- vale gitlab.Spelling = NO -->
+
WARNING:
-Only use simple values as input in the `where` block. Using
-<!-- vale gitlab.Spelling = NO --> procs, stateful
+Only use simple values as input in the `where` block. Using procs, stateful
objects, FactoryBot-created objects, and similar items can lead to
[unexpected results](https://github.com/tomykaira/rspec-parameterized/issues/8).
+
<!-- vale gitlab.Spelling = YES -->
### Prometheus tests
diff --git a/doc/development/testing_guide/end_to_end/best_practices.md b/doc/development/testing_guide/end_to_end/best_practices.md
index 15520d8a6b1..74c02d19d0a 100644
--- a/doc/development/testing_guide/end_to_end/best_practices.md
+++ b/doc/development/testing_guide/end_to_end/best_practices.md
@@ -338,6 +338,16 @@ Page::Project::Pipeline::Show.perform do |pipeline|
end
```
+### Use `eventually_` matchers for expectations that require waiting
+
+When something requires waiting to be matched, use `eventually_` matchers with clear wait duration definition.
+
+`Eventually` matchers use the following naming pattern: `eventually_${rspec_matcher_name}`. They are defined in [eventually_matcher.rb](https://gitlab.com/gitlab-org/gitlab/-/blob/master/qa/spec/support/matchers/eventually_matcher.rb).
+
+```ruby
+expect { async_value }.to eventually_eq(value).within(max_duration: 120, max_attempts: 60, reload_page: page)
+```
+
### Create negatable matchers to speed `expect` checks
However, sometimes we want to check that something is _not_ as we _don't_ want it to be. In other
diff --git a/doc/development/testing_guide/end_to_end/environment_selection.md b/doc/development/testing_guide/end_to_end/environment_selection.md
deleted file mode 100644
index 2192d9c4ed4..00000000000
--- a/doc/development/testing_guide/end_to_end/environment_selection.md
+++ /dev/null
@@ -1,8 +0,0 @@
----
-redirect_to: 'execution_context_selection.md'
----
-
-This file was moved to [another location](execution_context_selection.md).
-
-<!-- This redirect file can be deleted after <2021-08-14>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/development/testing_guide/end_to_end/index.md b/doc/development/testing_guide/end_to_end/index.md
index eca649b73a5..f4b01c64385 100644
--- a/doc/development/testing_guide/end_to_end/index.md
+++ b/doc/development/testing_guide/end_to_end/index.md
@@ -91,7 +91,7 @@ subgraph "`gitlab-org/gitlab-qa-mirror` pipeline"
1. The result of the [`gitlab-org/gitlab-qa-mirror` pipeline](https://gitlab.com/gitlab-org/gitlab-qa-mirror) is being
propagated upstream (through polling from upstream pipelines), through [`gitlab-org/build/omnibus-gitlab-mirror`](https://gitlab.com/gitlab-org/build/omnibus-gitlab-mirror), back to the [`gitlab-org/gitlab`](https://gitlab.com/gitlab-org/gitlab) merge request.
-Please note, we plan to [add more specific information](https://gitlab.com/gitlab-org/quality/team-tasks/-/issues/156)
+We plan to [add more specific information](https://gitlab.com/gitlab-org/quality/team-tasks/-/issues/156)
about the tests included in each job/scenario that runs in `gitlab-org/gitlab-qa-mirror`.
NOTE:
diff --git a/doc/development/testing_guide/end_to_end/rspec_metadata_tests.md b/doc/development/testing_guide/end_to_end/rspec_metadata_tests.md
index 7f541f1be3f..3a016c0e95c 100644
--- a/doc/development/testing_guide/end_to_end/rspec_metadata_tests.md
+++ b/doc/development/testing_guide/end_to_end/rspec_metadata_tests.md
@@ -16,7 +16,7 @@ This is a partial list of the [RSpec metadata](https://relishapp.com/rspec/rspec
| `:elasticsearch` | The test requires an Elasticsearch service. It is used by the [instance-level scenario](https://gitlab.com/gitlab-org/gitlab-qa#definitions) [`Test::Integration::Elasticsearch`](https://gitlab.com/gitlab-org/gitlab/-/blob/72b62b51bdf513e2936301cb6c7c91ec27c35b4d/qa/qa/ee/scenario/test/integration/elasticsearch.rb) to include only tests that require Elasticsearch. |
| `:except` | The test is to be run in their typical execution contexts _except_ as specified. See [test execution context selection](execution_context_selection.md) for more information. |
| `:geo` | The test requires two GitLab Geo instances - a primary and a secondary - to be spun up. |
-| `:gitaly_cluster` | The test runs against a GitLab instance where repositories are stored on redundant Gitaly nodes behind a Praefect node. All nodes are [separate containers](../../../administration/gitaly/praefect.md#requirements-for-configuring-a-gitaly-cluster). Tests that use this tag have a longer setup time since there are three additional containers that need to be started. |
+| `:gitaly_cluster` | The test runs against a GitLab instance where repositories are stored on redundant Gitaly nodes behind a Praefect node. All nodes are [separate containers](../../../administration/gitaly/praefect.md#requirements). Tests that use this tag have a longer setup time since there are three additional containers that need to be started. |
| `:github` | The test requires a GitHub personal access token. |
| `:group_saml` | The test requires a GitLab instance that has SAML SSO enabled at the group level. Interacts with an external SAML identity provider. Paired with the `:orchestrated` tag. |
| `:instance_saml` | The test requires a GitLab instance that has SAML SSO enabled at the instance level. Interacts with an external SAML identity provider. Paired with the `:orchestrated` tag. |
diff --git a/doc/development/testing_guide/end_to_end/running_tests_that_require_special_setup.md b/doc/development/testing_guide/end_to_end/running_tests_that_require_special_setup.md
index f200d6c682a..46a3053c267 100644
--- a/doc/development/testing_guide/end_to_end/running_tests_that_require_special_setup.md
+++ b/doc/development/testing_guide/end_to_end/running_tests_that_require_special_setup.md
@@ -432,7 +432,7 @@ To run the LDAP tests on your local with TLS enabled, follow these steps:
`127.0.0.1 gitlab.test`
- You can then run tests against GitLab in a Docker container on `https://gitlab.test`. Please note that the TLS certificate [checked into the GitLab-QA repository](https://gitlab.com/gitlab-org/gitlab-qa/-/tree/9ffb9ad3be847a9054967d792d6772a74220fb42/tls_certificates/gitlab) is configured for this domain.
+ You can then run tests against GitLab in a Docker container on `https://gitlab.test`. The TLS certificate [checked into the GitLab-QA repository](https://gitlab.com/gitlab-org/gitlab-qa/-/tree/9ffb9ad3be847a9054967d792d6772a74220fb42/tls_certificates/gitlab) is configured for this domain.
1. Run the OpenLDAP container with TLS enabled. Change the path to [`gitlab-qa/fixtures/ldap`](https://gitlab.com/gitlab-org/gitlab-qa/-/tree/9ffb9ad3be847a9054967d792d6772a74220fb42/fixtures/ldap) directory to your local checkout path:
```shell
diff --git a/doc/development/testing_guide/frontend_testing.md b/doc/development/testing_guide/frontend_testing.md
index d8f3a18577f..3af806d8f57 100644
--- a/doc/development/testing_guide/frontend_testing.md
+++ b/doc/development/testing_guide/frontend_testing.md
@@ -51,7 +51,7 @@ which have to be stubbed.
### Differences to Karma
-- Jest runs in a Node.js environment, not in a browser. Support for running Jest tests in a browser [is planned](https://gitlab.com/gitlab-org/gitlab/-/issues/26982).
+- Jest runs in a Node.js environment, not in a browser. [An issue exists](https://gitlab.com/gitlab-org/gitlab/-/issues/26982) for running Jest tests in a browser.
- Because Jest runs in a Node.js environment, it uses [jsdom](https://github.com/jsdom/jsdom) by default. See also its [limitations](#limitations-of-jsdom) below.
- Jest does not have access to Webpack loaders or aliases.
The aliases used by Jest are defined in its [own configuration](https://gitlab.com/gitlab-org/gitlab/-/blob/master/jest.config.js).
@@ -423,6 +423,55 @@ it('does something', () => {
});
```
+### Mocking the current location in Jest
+
+NOTE:
+The value of `window.location.href` is reset before every test to avoid earlier
+tests affecting later ones.
+
+If your tests require `window.location.href` to take a particular value, use
+the `setWindowLocation` helper:
+
+```javascript
+import setWindowLocation from 'helpers/set_window_location';
+
+it('passes', () => {
+ setWindowLocation('https://gitlab.test/foo?bar=true');
+
+ expect(window.location).toMatchObject({
+ hostname: 'gitlab.test',
+ pathname: '/foo',
+ search: '?bar=true',
+ });
+});
+```
+
+To modify only the hash, use either the `setWindowLocation` helper, or assign
+directly to `window.location.hash`, e.g.:
+
+```javascript
+it('passes', () => {
+ window.location.hash = '#foo';
+
+ expect(window.location.href).toBe('http://test.host/#foo');
+});
+```
+
+If your tests need to assert that certain `window.location` methods were
+called, use the `useMockLocationHelper` helper:
+
+```javascript
+import { useMockLocationHelper } from 'helpers/mock_window_location_helper';
+
+useMockLocationHelper();
+
+it('passes', () => {
+ window.location.reload();
+
+ expect(window.location.reload).toHaveBeenCalled();
+});
+```
+
### Waiting in tests
Sometimes a test needs to wait for something to happen in the application before it continues.
diff --git a/doc/development/testing_guide/testing_migrations_guide.md b/doc/development/testing_guide/testing_migrations_guide.md
index d54ca0d3c64..757a70fb4e0 100644
--- a/doc/development/testing_guide/testing_migrations_guide.md
+++ b/doc/development/testing_guide/testing_migrations_guide.md
@@ -127,7 +127,90 @@ reversible_migration do |migration|
end
```
-### Example database migration test
+### Custom matchers for post-deployment migrations
+
+We have some custom matchers in
+[`spec/support/matchers/background_migrations_matchers.rb`](https://gitlab.com/gitlab-org/gitlab/blob/v14.1.0-ee/spec/support/matchers/background_migrations_matchers.rb)
+to verify background migrations were correctly scheduled from a post-deployment migration, and
+receive the correct number of arguments.
+
+All of them use the internal matcher `be_background_migration_with_arguments`, which verifies that
+the `#perform` method on your migration class doesn't crash when receiving the provided arguments.
+
+#### `be_scheduled_migration`
+
+Verifies that a Sidekiq job was queued with the expected class and arguments.
+
+This matcher usually makes sense if you're queueing jobs manually, rather than going through our helpers.
+
+```ruby
+# Migration
+BackgroundMigrationWorker.perform_async('MigrationClass', args)
+
+# Spec
+expect('MigrationClass').to be_scheduled_migration(*args)
+```
+
+#### `be_scheduled_migration_with_multiple_args`
+
+Verifies that a Sidekiq job was queued with the expected class and arguments.
+
+This works the same as `be_scheduled_migration`, except that the order is ignored when comparing
+array arguments.
+
+```ruby
+# Migration
+BackgroundMigrationWorker.perform_async('MigrationClass', ['foo', [3, 2, 1]])
+
+# Spec
+expect('MigrationClass').to be_scheduled_migration_with_multiple_args('foo', [1, 2, 3])
+```
+
+#### `be_scheduled_delayed_migration`
+
+Verifies that a Sidekiq job was queued with the expected delay, class, and arguments.
+
+This can also be used with `queue_background_migration_jobs_by_range_at_intervals` and related helpers.
+
+```ruby
+# Migration
+BackgroundMigrationWorker.perform_in(delay, 'MigrationClass', args)
+
+# Spec
+expect('MigrationClass').to be_scheduled_delayed_migration(delay, *args)
+```
+
+#### `have_scheduled_batched_migration`
+
+Verifies that a `BatchedMigration` record was created with the expected class and arguments.
+
+The `*args` are additional arguments passed to the `MigrationClass`, while `**kwargs` are any other
+attributes to be verified on the `BatchedMigration` record (Example: `interval: 2.minutes`).
+
+```ruby
+# Migration
+queue_batched_background_migration(
+ 'MigrationClass',
+ table_name,
+ column_name,
+ *args,
+ **kwargs
+)
+
+# Spec
+expect('MigrationClass').to have_scheduled_batched_migration(
+ table_name: table_name,
+ column_name: column_name,
+ job_arguments: args,
+ **kwargs
+)
+```
+
+### Examples of migration tests
+
+Migration tests depend on what the migration does exactly, the most common types are data migrations and scheduling background migrations.
+
+#### Example of a data migration test
This spec tests the
[`db/post_migrate/20170526185842_migrate_pipeline_stages.rb`](https://gitlab.com/gitlab-org/gitlab-foss/blob/v11.6.5/db/post_migrate/20170526185842_migrate_pipeline_stages.rb)
@@ -181,6 +264,59 @@ RSpec.describe MigratePipelineStages do
end
```
+#### Example of a background migration scheduling test
+
+To test these you usually have to:
+
+- Create some records.
+- Run the migration.
+- Verify that the expected jobs were scheduled, with the correct set
+ of records, the correct batch size, interval, etc.
+
+The behavior of the background migration itself needs to be verified in a [separate
+test for the background migration class](#example-background-migration-test).
+
+This spec tests the
+[`db/post_migrate/20210701111909_backfill_issues_upvotes_count.rb`](https://gitlab.com/gitlab-org/gitlab/-/blob/v14.1.0-ee/db/post_migrate/20210701111909_backfill_issues_upvotes_count.rb)
+post-deployment migration. You can find the complete spec in
+[`spec/migrations/backfill_issues_upvotes_count_spec.rb`](https://gitlab.com/gitlab-org/gitlab/blob/v14.1.0-ee/spec/spec/migrations/backfill_issues_upvotes_count_spec.rb).
+
+```ruby
+require 'spec_helper'
+require_migration!
+
+RSpec.describe BackfillIssuesUpvotesCount do
+ let(:migration) { described_class.new }
+ let(:issues) { table(:issues) }
+ let(:award_emoji) { table(:award_emoji) }
+
+ let!(:issue1) { issues.create! }
+ let!(:issue2) { issues.create! }
+ let!(:issue3) { issues.create! }
+ let!(:issue4) { issues.create! }
+ let!(:issue4_without_thumbsup) { issues.create! }
+
+ let!(:award_emoji1) { award_emoji.create!( name: 'thumbsup', awardable_type: 'Issue', awardable_id: issue1.id) }
+ let!(:award_emoji2) { award_emoji.create!( name: 'thumbsup', awardable_type: 'Issue', awardable_id: issue2.id) }
+ let!(:award_emoji3) { award_emoji.create!( name: 'thumbsup', awardable_type: 'Issue', awardable_id: issue3.id) }
+ let!(:award_emoji4) { award_emoji.create!( name: 'thumbsup', awardable_type: 'Issue', awardable_id: issue4.id) }
+
+ it 'correctly schedules background migrations', :aggregate_failures do
+ stub_const("#{described_class.name}::BATCH_SIZE", 2)
+
+ Sidekiq::Testing.fake! do
+ freeze_time do
+ migrate!
+
+ expect(described_class::MIGRATION).to be_scheduled_migration(issue1.id, issue2.id)
+ expect(described_class::MIGRATION).to be_scheduled_migration(issue3.id, issue4.id)
+ expect(BackgroundMigrationWorker.jobs.size).to eq(2)
+ end
+ end
+ end
+end
+```
+
## Testing a non-`ActiveRecord::Migration` class
To test a non-`ActiveRecord::Migration` test (a background migration),
diff --git a/doc/development/uploads.md b/doc/development/uploads.md
index 7cdc3875fd6..9c5686db0f6 100644
--- a/doc/development/uploads.md
+++ b/doc/development/uploads.md
@@ -120,7 +120,8 @@ We have three kinds of file encoding in our uploads:
1. <i class="fa fa-check-circle"></i> **multipart**: `multipart/form-data` is the most common, a file is encoded as a part of a multipart encoded request.
1. <i class="fa fa-check-circle"></i> **body**: some APIs uploads files as the whole request body.
-1. <i class="fa fa-times-circle"></i> **JSON**: some JSON API uploads files as base64 encoded strings. This requires a change to GitLab Workhorse, which [is planned](https://gitlab.com/gitlab-org/gitlab-workhorse/-/issues/226).
+1. <i class="fa fa-times-circle"></i> **JSON**: some JSON API uploads files as base64 encoded strings. This requires a change to GitLab Workhorse,
+ which is tracked [in this issue](https://gitlab.com/gitlab-org/gitlab/-/issues/325068).
## Uploading technologies
diff --git a/doc/development/usage_ping/dictionary.md b/doc/development/usage_ping/dictionary.md
index 934bdf9c808..e7e8464ff7a 100644
--- a/doc/development/usage_ping/dictionary.md
+++ b/doc/development/usage_ping/dictionary.md
@@ -1,23421 +1,4 @@
---
-stage: Growth
-group: Product Intelligence
-info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
+redirect_to: 'https://gitlab-org.gitlab.io/growth/product-intelligence/metric-dictionary'
+remove_date: '2021-11-10'
---
-
-<!---
- This documentation is auto generated by a script.
-
- Please do not edit this file directly, check generate_metrics_dictionary task on lib/tasks/gitlab/usage_data.rake.
---->
-
-# Metrics Dictionary
-
-This file is autogenerated, please do not edit directly.
-
-To generate these files from the GitLab repository, run:
-
-```shell
-bundle exec rake gitlab:usage_data:generate_metrics_dictionary
-```
-
-The Metrics Dictionary is based on the following metrics definition YAML files:
-
-- [`config/metrics`](https://gitlab.com/gitlab-org/gitlab/-/tree/master/config/metrics)
-- [`ee/config/metrics`](https://gitlab.com/gitlab-org/gitlab/-/tree/master/ee/config/metrics)
-
-Each table includes a `milestone`, which corresponds to the GitLab version when the metric
-was released.
-
-<!-- vale off -->
-<!-- Docs linting disabled after this line. -->
-<!-- See https://docs.gitlab.com/ee/development/documentation/testing.html#disable-vale-tests -->
-
-## Metrics Definitions
-
-### `active_user_count`
-
-The number of active users existing in the instance. This is named the instance_user_count in the Versions application.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/license/20210204124829_active_user_count.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Subscription`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `analytics_unique_visits.analytics_unique_visits_for_any_target`
-
-Unique visitors to any analytics feature by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216174908_analytics_unique_visits_for_any_target.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.analytics_unique_visits_for_any_target_monthly`
-
-Unique visitors to any analytics feature by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216174910_analytics_unique_visits_for_any_target_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.g_analytics_contribution`
-
-Unique visitors to /groups/:group/-/contribution_analytics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216174836_g_analytics_contribution.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.g_analytics_insights`
-
-Unique visitors to /groups/:group/-/insights
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216174838_g_analytics_insights.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.g_analytics_issues`
-
-Unique visitors to /groups/:group/-/issues_analytics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216174840_g_analytics_issues.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.g_analytics_merge_request`
-
-Unique visitors to /groups/:group/-/analytics/merge_request_analytics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216174902_g_analytics_merge_request.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`
-
-### `analytics_unique_visits.g_analytics_productivity`
-
-Unique visitors to /groups/:group/-/analytics/productivity_analytics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216174842_g_analytics_productivity.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.g_analytics_valuestream`
-
-Unique visitors to /groups/:group/-/analytics/value_stream_analytics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216174844_g_analytics_valuestream.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.i_analytics_cohorts`
-
-Unique visitors to /-/instance_statistics/cohorts
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216174858_i_analytics_cohorts.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.i_analytics_dev_ops_adoption`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210423005644_i_analytics_dev_ops_adoption.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `analytics_unique_visits.i_analytics_dev_ops_score`
-
-Unique visitors to /-/instance_statistics/dev_ops_score
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216174900_i_analytics_dev_ops_score.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.i_analytics_instance_statistics`
-
-Unique visitors to/admin/usage_trends
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216174906_i_analytics_instance_statistics.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.p_analytics_code_reviews`
-
-Unique visitors to /:group/:project/-/analytics/code_reviews
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216174848_p_analytics_code_reviews.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.p_analytics_insights`
-
-Unique visitors to /:group/:project/insights
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216174852_p_analytics_insights.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.p_analytics_issues`
-
-Unique visitors to /:group/:project/-/analytics/issues_analytics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216174854_p_analytics_issues.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.p_analytics_merge_request`
-
-Unique visitors to /:group/:project/-/analytics/merge_request_analytics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216174904_p_analytics_merge_request.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.p_analytics_pipelines`
-
-Unique visitors to /:group/:project/pipelines/charts
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216174846_p_analytics_pipelines.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.p_analytics_repo`
-
-Unique visitors to /:group/:project/-/graphs/master/charts
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216174856_p_analytics_repo.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.p_analytics_valuestream`
-
-Unique visitors to /:group/:project/-/value_stream_analytics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216174850_p_analytics_valuestream.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `analytics_unique_visits.users_viewing_analytics_group_devops_adoption`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210428142406_users_viewing_analytics_group_devops_adoption.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `compliance_unique_visits.a_compliance_audit_events_api`
-
-Unique users that have used the Audit Events API.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216183912_a_compliance_audit_events_api.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `compliance_unique_visits.compliance_unique_visits_for_any_target`
-
-Number of unique visits to any compliance page
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216183914_compliance_unique_visits_for_any_target.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `compliance_unique_visits.compliance_unique_visits_for_any_target_monthly`
-
-Number of unique visits to any compliance page over a given month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216183916_compliance_unique_visits_for_any_target_monthly.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `compliance_unique_visits.g_compliance_audit_events`
-
-Unique users who have viewed audit events
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216183906_g_compliance_audit_events.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `compliance_unique_visits.g_compliance_dashboard`
-
-Number of unique visitors to the compliance dashboard.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216183904_g_compliance_dashboard.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `compliance_unique_visits.i_compliance_audit_events`
-
-Unique users that have viewed the instance-level audit events screen
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216183908_i_compliance_audit_events.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `compliance_unique_visits.i_compliance_credential_inventory`
-
-Unique users who have viewed the credential inventory
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216183910_i_compliance_credential_inventory.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `container_registry_enabled`
-
-A count of projects where the container registry is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210204124858_container_registry_enabled.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `container_registry_server.vendor`
-
-Identifies if a user is using an external container registry and what type
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181051_vendor.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `container_registry_server.version`
-
-Identifies the version of the external registry being used
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/license/20210216181053_version.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.alert_bot_incident_issues`
-
-Count of issues created by the alert bot automatically
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180449_alert_bot_incident_issues.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.all_searches`
-
-Total Searches for All Basic Search and Advanced Search in self-managed and SaaS
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180413_all_searches.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.api_fuzzing_dnd_jobs`
-
-Count of API Fuzzing `docker-in-docker` jobs run by job name
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180346_api_fuzzing_dnd_jobs.yml)
-
-Group: `group::fuzz testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.api_fuzzing_jobs`
-
-Count of API Fuzzing jobs run by job name
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180344_api_fuzzing_jobs.yml)
-
-Group: `group::fuzz testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.assignee_lists`
-
-Count of assignee lists created on Boards
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216181100_assignee_lists.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.auto_devops_disabled`
-
-Projects with Auto DevOps template disabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175231_auto_devops_disabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.auto_devops_enabled`
-
-Projects with Auto DevOps template enabled (excluding implicit Auto DevOps enabled and Auto DevOps template includes)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175229_auto_devops_enabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.boards`
-
-Count of Boards created
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181252_boards.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ci_builds`
-
-Unique builds in project
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175510_ci_builds.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ci_external_pipelines`
-
-Total pipelines in external repositories
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175514_ci_external_pipelines.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.ci_internal_pipelines`
-
-Total pipelines in GitLab repositories
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175512_ci_internal_pipelines.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ci_pipeline_config_auto_devops`
-
-Total pipelines from an Auto DevOps template
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175516_ci_pipeline_config_auto_devops.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ci_pipeline_config_repository`
-
-Total Pipelines from templates in repository
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175518_ci_pipeline_config_repository.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ci_pipeline_schedules`
-
-Pipeline schedules in GitLab
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175523_ci_pipeline_schedules.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ci_runners`
-
-Total configured Runners of all types
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175520_ci_runners.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ci_runners_group_type_active`
-
-Total active Group Runners
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210502050341_ci_runners_group_type_active.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ci_runners_group_type_active_online`
-
-Total active and online Group Runners
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210502051922_ci_runners_group_type_active_online.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ci_runners_instance_type_active`
-
-Total active Shared (Instance) Runners
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210502045402_ci_runners_instance_type_active.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ci_runners_instance_type_active_online`
-
-Total active and online Shared (Instance) Runners
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210502051651_ci_runners_instance_type_active_online.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ci_runners_online`
-
-Total online Runners of all types
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210502050942_ci_runners_online.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ci_runners_project_type_active`
-
-Total active Specific (Project) Runners
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210502050834_ci_runners_project_type_active.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ci_runners_project_type_active_online`
-
-Total active and online Specific (Project) Runners
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210502052036_ci_runners_project_type_active_online.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ci_triggers`
-
-Total configured Triggers in project
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175521_ci_triggers.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters`
-
-Total GitLab Managed clusters both enabled and disabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175232_clusters.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_applications_cert_managers`
-
-Total GitLab Managed clusters with GitLab Managed App:Cert Manager installed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175259_clusters_applications_cert_managers.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_applications_cilium`
-
-Total GitLab Managed clusters with GitLab Managed App:Cilium installed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175312_clusters_applications_cilium.yml)
-
-Group: `group::configure`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_applications_crossplane`
-
-Total GitLab Managed clusters with GitLab Managed App:Crossplane installed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175301_clusters_applications_crossplane.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_applications_elastic_stack`
-
-Total GitLab Managed clusters with GitLab Managed App:Elastic Stack installed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175309_clusters_applications_elastic_stack.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_applications_helm`
-
-Total GitLab Managed clusters with GitLab Managed App:Helm enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175255_clusters_applications_helm.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_applications_ingress`
-
-Total GitLab Managed clusters with GitLab Managed App:Ingress installed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175257_clusters_applications_ingress.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_applications_jupyter`
-
-Total GitLab Managed clusters with GitLab Managed App:Jupyter installed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175310_clusters_applications_jupyter.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_applications_knative`
-
-Total GitLab Managed clusters with GitLab Managed App:Knative installed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175307_clusters_applications_knative.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_applications_prometheus`
-
-Total GitLab Managed clusters with GitLab Managed App:Prometheus installed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175303_clusters_applications_prometheus.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_applications_runner`
-
-Total GitLab Managed clusters with GitLab Managed App:Runner installed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175305_clusters_applications_runner.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_disabled`
-
-Number of Kubernetes clusters attached to GitLab currently disabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175242_clusters_disabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_enabled`
-
-Number of Kubernetes clusters attached to GitLab currently enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175234_clusters_enabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_management_project`
-
-Total GitLab Managed clusters with defined cluster management project
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175314_clusters_management_project.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_platforms_eks`
-
-Total GitLab Managed clusters provisioned with GitLab on AWS EKS
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175250_clusters_platforms_eks.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_platforms_gke`
-
-Total GitLab Managed clusters provisioned with GitLab on GCE GKE
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175251_clusters_platforms_gke.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.clusters_platforms_user`
-
-Total GitLab Managed clusters that are user provisioned
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175253_clusters_platforms_user.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.commit_comment`
-
-Count of total unique commit comments. Does not include MR diff comments
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182004_commit_comment.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.confidential_epics`
-
-Count of confidential epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216181205_confidential_epics.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.container_scanning_jobs`
-
-Count of Container Scanning jobs run
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175458_container_scanning_jobs.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.coverage_fuzzing_jobs`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183146_coverage_fuzzing_jobs.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.cycle_analytics_views`
-
-Total visits to VSA (both group- and project-level) all time
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216174832_cycle_analytics_views.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.dast_jobs`
-
-Count of DAST jobs run
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175612_dast_jobs.yml)
-
-Group: `group::dynamic analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.dast_on_demand_pipelines`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183149_dast_on_demand_pipelines.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.dependency_list_usages_total`
-
-Count to Dependency List page views
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175211_dependency_list_usages_total.yml)
-
-Group: `group::composition analysis`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.dependency_scanning_jobs`
-
-Count of Dependency Scanning jobs run
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175213_dependency_scanning_jobs.yml)
-
-Group: `group::composition analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.deploy_keys`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181908_deploy_keys.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.deployments`
-
-Total deployments count
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210201124934_deployments.yml)
-
-Group: `group::ops release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.design_management_designs_create`
-
-Number of designs that were created
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180740_design_management_designs_create.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.design_management_designs_delete`
-
-Number of designs that were deleted
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180743_design_management_designs_delete.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.design_management_designs_update`
-
-Number of updates to designs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180741_design_management_designs_update.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.environments`
-
-Total available and stopped environments
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181914_environments.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.epic_issues`
-
-Count of issues that are assigned to an epic
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216181208_epic_issues.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.epics`
-
-Count of all epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216181206_epics.yml)
-
-Group: `group::product planning`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.epics_deepest_relationship_level`
-
-Count of the deepest relationship level for epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216181212_epics_deepest_relationship_level.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.failed_deployments`
-
-Total failed deployments
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181912_failed_deployments.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.feature_flags`
-
-Number of feature flag toggles
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181249_feature_flags.yml)
-
-Group: `group::progressive delivery`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.geo_event_log_max_id`
-
-Number of replication events on a Geo primary
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180405_geo_event_log_max_id.yml)
-
-Group: `group::geo`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.geo_nodes`
-
-Total number of sites in a Geo deployment
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210201124936_geo_nodes.yml)
-
-Group: `group::geo`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.grafana_integrated_projects`
-
-Total Grafana integrations attached to projects
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180927_grafana_integrated_projects.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.group_clusters_disabled`
-
-Total GitLab Managed disabled clusters previously attached to groups
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175246_group_clusters_disabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.group_clusters_enabled`
-
-Total GitLab Managed clusters attached to groups
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175238_group_clusters_enabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups`
-
-Total count of groups as of usage ping snapshot
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180750_groups.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_asana_active`
-
-Count of groups with active integrations for Asana
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175625_groups_asana_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_assembla_active`
-
-Count of groups with active integrations for Assembla
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175636_groups_assembla_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_bamboo_active`
-
-Count of groups with active integrations for Bamboo CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175647_groups_bamboo_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_bugzilla_active`
-
-Count of groups with active integrations for Bugzilla
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175659_groups_bugzilla_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_buildkite_active`
-
-Count of groups with active integrations for Buildkite
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175710_groups_buildkite_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_campfire_active`
-
-Count of groups with active integrations for Campfire
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175721_groups_campfire_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_confluence_active`
-
-Count of groups with active integrations for Confluence
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175733_groups_confluence_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_custom_issue_tracker_active`
-
-Count of groups with active integrations for a Custom Issue Tracker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175744_groups_custom_issue_tracker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_datadog_active`
-
-Count of groups with active integrations for Datadog
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182549_groups_datadog_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_discord_active`
-
-Count of groups with active integrations for Discord
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175755_groups_discord_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_drone_ci_active`
-
-Count of groups with active integrations for Drone CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175806_groups_drone_ci_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_emails_on_push_active`
-
-Count of groups with active integrations for Emails on Push
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175817_groups_emails_on_push_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_ewm_active`
-
-Count of groups with active integrations for EWM
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182616_groups_ewm_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_external_wiki_active`
-
-Count of groups with active integrations for External Wiki
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175828_groups_external_wiki_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_flowdock_active`
-
-Count of groups with active integrations for Flowdock
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175839_groups_flowdock_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_github_active`
-
-Count of groups with active integrations for GitHub
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175850_groups_github_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.groups_hangouts_chat_active`
-
-Count of groups with active integrations for Hangouts Chat
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175901_groups_hangouts_chat_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_hipchat_active`
-
-Count of groups with active integrations for HipChat
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175912_groups_hipchat_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_asana_active`
-
-Count of active groups inheriting integrations for Asana
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175632_groups_inheriting_asana_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_assembla_active`
-
-Count of active groups inheriting integrations for Assembla
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175644_groups_inheriting_assembla_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_bamboo_active`
-
-Count of active groups inheriting integrations for Bamboo CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175655_groups_inheriting_bamboo_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_bugzilla_active`
-
-Count of active groups inheriting integrations for Bugzilla
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175706_groups_inheriting_bugzilla_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_buildkite_active`
-
-Count of active groups inheriting integrations for Buildkite
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175717_groups_inheriting_buildkite_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_campfire_active`
-
-Count of active groups inheriting integrations for Campfire
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175729_groups_inheriting_campfire_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_confluence_active`
-
-Count of active groups inheriting integrations for Confluence
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175740_groups_inheriting_confluence_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_custom_issue_tracker_active`
-
-Count of active groups inheriting integrations for a Custom Issue Tracker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175751_groups_inheriting_custom_issue_tracker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_datadog_active`
-
-Count of active groups inheriting integrations for Datadog
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182557_groups_inheriting_datadog_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_discord_active`
-
-Count of active groups inheriting integrations for Discord
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175802_groups_inheriting_discord_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_drone_ci_active`
-
-Count of active groups inheriting integrations for Drone CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175813_groups_inheriting_drone_ci_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_emails_on_push_active`
-
-Count of active groups inheriting integrations for Emails on Push
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175824_groups_inheriting_emails_on_push_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_ewm_active`
-
-Count of active groups inheriting integrations for EWM
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182623_groups_inheriting_ewm_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_external_wiki_active`
-
-Count of active groups inheriting integrations for External Wiki
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175835_groups_inheriting_external_wiki_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_flowdock_active`
-
-Count of active groups inheriting integrations for Flowdock
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175846_groups_inheriting_flowdock_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_github_active`
-
-Count of active groups inheriting integrations for GitHub
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175857_groups_inheriting_github_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.groups_inheriting_hangouts_chat_active`
-
-Count of active groups inheriting integrations for Hangouts Chat
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175908_groups_inheriting_hangouts_chat_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_hipchat_active`
-
-Count of active groups inheriting integrations for HipChat
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175919_groups_inheriting_hipchat_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_irker_active`
-
-Count of active groups inheriting integrations for Irker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175930_groups_inheriting_irker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_jenkins_active`
-
-Count of active groups inheriting integrations for Jenkins
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175941_groups_inheriting_jenkins_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_jira_active`
-
-Count of active groups inheriting integrations for Jira
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175952_groups_inheriting_jira_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_mattermost_active`
-
-Count of active groups inheriting integrations for Mattermost
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180003_groups_inheriting_mattermost_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_mattermost_slash_commands_active`
-
-Count of active groups inheriting integrations for Mattermost (slash commands)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180014_groups_inheriting_mattermost_slash_commands_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_microsoft_teams_active`
-
-Count of active groups inheriting integrations for Microsoft Teams
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180025_groups_inheriting_microsoft_teams_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_mock_ci_active`
-
-Count of active groups inheriting integrations for Mock CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182732_groups_inheriting_mock_ci_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_mock_monitoring_active`
-
-Count of active groups inheriting integrations for Mock Monitoring
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182743_groups_inheriting_mock_monitoring_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_packagist_active`
-
-Count of active groups inheriting integrations for Packagist
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180036_groups_inheriting_packagist_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_pipelines_email_active`
-
-Count of active groups inheriting integrations for Pipeline Emails
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180047_groups_inheriting_pipelines_email_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_pivotaltracker_active`
-
-Count of active groups inheriting integrations for Pivotal Tracker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180058_groups_inheriting_pivotaltracker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_prometheus_active`
-
-Count of active groups inheriting integrations for Prometheus
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180940_groups_inheriting_prometheus_active.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_pushover_active`
-
-Count of active groups inheriting integrations for Pushover
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180109_groups_inheriting_pushover_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_redmine_active`
-
-Count of active groups inheriting integrations for Redmine
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180120_groups_inheriting_redmine_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_slack_active`
-
-Count of active groups inheriting integrations for Slack
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180131_groups_inheriting_slack_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_slack_slash_commands_active`
-
-Count of active groups inheriting integrations for Slack (slash commands)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180142_groups_inheriting_slack_slash_commands_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_teamcity_active`
-
-Count of active groups inheriting integrations for Teamcity CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180153_groups_inheriting_teamcity_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_unify_circuit_active`
-
-Count of active groups inheriting integrations for Unifiy Circuit
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180204_groups_inheriting_unify_circuit_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_webex_teams_active`
-
-Count of active groups inheriting integrations for Webex Teams
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180215_groups_inheriting_webex_teams_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_inheriting_youtrack_active`
-
-Count of active groups inheriting integrations for YouTrack
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180226_groups_inheriting_youtrack_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_irker_active`
-
-Count of groups with active integrations for Irker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175923_groups_irker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_jenkins_active`
-
-Count of groups with active integrations for Jenkins
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175934_groups_jenkins_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_jira_active`
-
-Count of groups with active integrations for Jira
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175945_groups_jira_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_mattermost_active`
-
-Count of groups with active integrations for Mattermost
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175956_groups_mattermost_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_mattermost_slash_commands_active`
-
-Count of groups with active integrations for Mattermost (slash commands)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180006_groups_mattermost_slash_commands_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_microsoft_teams_active`
-
-Count of groups with active integrations for Microsoft Teams
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180018_groups_microsoft_teams_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_mock_ci_active`
-
-Count of groups with active integrations for Mock CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182724_groups_mock_ci_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_mock_monitoring_active`
-
-Count of groups with active integrations for Mock Monitoring
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182736_groups_mock_monitoring_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_packagist_active`
-
-Count of groups with active integrations for Packagist
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180029_groups_packagist_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_pipelines_email_active`
-
-Count of groups with active integrations for Pipeline Emails
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180040_groups_pipelines_email_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_pivotaltracker_active`
-
-Count of groups with active integrations for Pivotal Tracker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180051_groups_pivotaltracker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_prometheus_active`
-
-Count of groups with active integrations for Prometheus
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180933_groups_prometheus_active.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_pushover_active`
-
-Count of groups with active integrations for Pushover
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180102_groups_pushover_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_redmine_active`
-
-Count of groups with active integrations for Redmine
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180113_groups_redmine_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_slack_active`
-
-Count of groups with active integrations for Slack
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180124_groups_slack_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_slack_slash_commands_active`
-
-Count of groups with active integrations for Slack (slash commands)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180135_groups_slack_slash_commands_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_teamcity_active`
-
-Count of groups with active integrations for Teamcity CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180146_groups_teamcity_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_unify_circuit_active`
-
-Count of groups with active integrations for Unifiy Circuit
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180157_groups_unify_circuit_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_webex_teams_active`
-
-Count of groups with active integrations for Webex Teams
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180208_groups_webex_teams_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.groups_youtrack_active`
-
-Count of groups with active integrations for YouTrack
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180219_groups_youtrack_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_create_0_cta_clicked`
-
-Total clicks on the create track's first email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510201919_in_product_marketing_email_create_0_cta_clicked.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_create_0_sent`
-
-Total sent emails of the create track's first email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510201537_in_product_marketing_email_create_0_sent.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_create_1_cta_clicked`
-
-Total clicks on the create track's second email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510202356_in_product_marketing_email_create_1_cta_clicked.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_create_1_sent`
-
-Total sent emails of the create track's second email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510202148_in_product_marketing_email_create_1_sent.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_create_2_cta_clicked`
-
-Total clicks on the create track's third email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510202724_in_product_marketing_email_create_2_cta_clicked.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_create_2_sent`
-
-Total sent emails of the create track's third email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510202604_in_product_marketing_email_create_2_sent.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_experience_0_sent`
-
-Total sent emails of the experience track's first email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210518081225_in_product_marketing_email_experience_0_sent.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_team_0_cta_clicked`
-
-Total clicks on the team track's first email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510203143_in_product_marketing_email_team_0_cta_clicked.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_team_0_sent`
-
-Total sent emails of the team track's first email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510203134_in_product_marketing_email_team_0_sent.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_team_1_cta_clicked`
-
-Total clicks on the team track's second email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510203203_in_product_marketing_email_team_1_cta_clicked.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_team_1_sent`
-
-Total sent emails of the team track's second email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510203153_in_product_marketing_email_team_1_sent.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_team_2_cta_clicked`
-
-Total clicks on the team track's third email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510203223_in_product_marketing_email_team_2_cta_clicked.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_team_2_sent`
-
-Total sent emails of the team track's third email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510203213_in_product_marketing_email_team_2_sent.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_trial_0_cta_clicked`
-
-Total clicks on the verify trial's first email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510203044_in_product_marketing_email_trial_0_cta_clicked.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_trial_0_sent`
-
-Total sent emails of the trial track's first email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510203035_in_product_marketing_email_trial_0_sent.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_trial_1_cta_clicked`
-
-Total clicks on the trial track's second email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510203104_in_product_marketing_email_trial_1_cta_clicked.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_trial_1_sent`
-
-Total sent emails of the trial track's second email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510203054_in_product_marketing_email_trial_1_sent.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_trial_2_cta_clicked`
-
-Total clicks on the trial track's third email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510203124_in_product_marketing_email_trial_2_cta_clicked.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_trial_2_sent`
-
-Total sent emails of the trial track's third email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510203114_in_product_marketing_email_trial_2_sent.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_verify_0_cta_clicked`
-
-Total clicks on the verify track's first email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510202943_in_product_marketing_email_verify_0_cta_clicked.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_verify_0_sent`
-
-Total sent emails of the verify track's first email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510202807_in_product_marketing_email_verify_0_sent.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_verify_1_cta_clicked`
-
-Total clicks on the verify track's second email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510203005_in_product_marketing_email_verify_1_cta_clicked.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_verify_1_sent`
-
-Total sent emails of the verify track's second email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510202955_in_product_marketing_email_verify_1_sent.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_verify_2_cta_clicked`
-
-Total clicks on the verify track's third email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510203025_in_product_marketing_email_verify_2_cta_clicked.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_product_marketing_email_verify_2_sent`
-
-Total sent emails of the verify track's third email
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210510203015_in_product_marketing_email_verify_2_sent.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.in_review_folder`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181916_in_review_folder.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.incident_issues`
-
-Count of incidents (issues where issue_type=incident)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180447_incident_issues.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.incident_labeled_issues`
-
-Count of all issues with the label=incident
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180451_incident_labeled_issues.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ingress_modsecurity_blocking`
-
-Whether or not ModSecurity is set to blocking mode
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175452_ingress_modsecurity_blocking.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ingress_modsecurity_disabled`
-
-Whether or not ModSecurity is disabled within Ingress
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175454_ingress_modsecurity_disabled.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ingress_modsecurity_logging`
-
-Whether or not ModSecurity is set to logging mode
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175450_ingress_modsecurity_logging.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ingress_modsecurity_not_installed`
-
-Whether or not ModSecurity has not been installed into the cluster
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175456_ingress_modsecurity_not_installed.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ingress_modsecurity_packets_anomalous`
-
-Cumulative count of packets identified as anomalous by ModSecurity since Usage Ping was last reported
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175444_ingress_modsecurity_packets_anomalous.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ingress_modsecurity_packets_processed`
-
-Cumulative count of packets processed by ModSecurity since Usage Ping was last reported
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175442_ingress_modsecurity_packets_processed.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ingress_modsecurity_statistics_unavailable`
-
-Whether or not ModSecurity statistics are unavailable
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175441_ingress_modsecurity_statistics_unavailable.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `removed`
-
-Tiers: `ultimate`
-
-### `counts.instance_clusters_disabled`
-
-Total GitLab Managed disabled clusters previously attached to the instance
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175248_instance_clusters_disabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instance_clusters_enabled`
-
-Total GitLab Managed clusters attached to the instance
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175240_instance_clusters_enabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_asana_active`
-
-Count of active instance-level integrations for Asana
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175628_instances_asana_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_assembla_active`
-
-Count of active instance-level integrations for Assembla
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175640_instances_assembla_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_bamboo_active`
-
-Count of active instance-level integrations for Bamboo CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175651_instances_bamboo_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_bugzilla_active`
-
-Count of active instance-level integrations for Bugzilla
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175702_instances_bugzilla_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_buildkite_active`
-
-Count of active instance-level integrations for Buildkite
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175714_instances_buildkite_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_campfire_active`
-
-Count of active instance-level integrations for Campfire
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175725_instances_campfire_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_confluence_active`
-
-Count of active instance-level integrations for Confluence
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175736_instances_confluence_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_custom_issue_tracker_active`
-
-Count of active instance-level integrations for a Custom Issue Tracker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175747_instances_custom_issue_tracker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_datadog_active`
-
-Count of active instance-level integrations for Datadog
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182553_instances_datadog_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_discord_active`
-
-Count of active instance-level integrations for Discord
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175758_instances_discord_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_drone_ci_active`
-
-Count of active instance-level integrations for Drone CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175809_instances_drone_ci_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_emails_on_push_active`
-
-Count of active instance-level integrations for Emails on Push
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175820_instances_emails_on_push_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_ewm_active`
-
-Count of active instance-level integrations for EWM
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182620_instances_ewm_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_external_wiki_active`
-
-Count of active instance-level integrations for External Wiki
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175831_instances_external_wiki_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_flowdock_active`
-
-Count of active instance-level integrations for Flowdock
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175842_instances_flowdock_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_github_active`
-
-Count of active instance-level integrations for GitHub
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175853_instances_github_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.instances_hangouts_chat_active`
-
-Count of active instance-level integrations for Hangouts Chat
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175904_instances_hangouts_chat_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_hipchat_active`
-
-Count of active instance-level integrations for HipChat
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175915_instances_hipchat_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_irker_active`
-
-Count of active instance-level integrations for Irker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175926_instances_irker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_jenkins_active`
-
-Count of active instance-level integrations for Jenkins
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175937_instances_jenkins_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_jira_active`
-
-Count of active instance-level integrations for Jira
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175948_instances_jira_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_mattermost_active`
-
-Count of active instance-level integrations for Mattermost
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175959_instances_mattermost_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_mattermost_slash_commands_active`
-
-Count of active instance-level integrations for Mattermost (slash commands)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180010_instances_mattermost_slash_commands_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_microsoft_teams_active`
-
-Count of active instance-level integrations for Microsoft Teams
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180021_instances_microsoft_teams_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_mock_ci_active`
-
-Count of active instance-level integrations for Mock CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182728_instances_mock_ci_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_mock_monitoring_active`
-
-Count of active instance-level integrations for Mock Monitoring
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182739_instances_mock_monitoring_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_packagist_active`
-
-Count of active instance-level integrations for Packagist
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180032_instances_packagist_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_pipelines_email_active`
-
-Count of active instance-level integrations for Pipeline Emails
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180043_instances_pipelines_email_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_pivotaltracker_active`
-
-Count of active instance-level integrations for Pivotal Tracker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180054_instances_pivotaltracker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_prometheus_active`
-
-Count of active instance-level integrations for Prometheus
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180936_instances_prometheus_active.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_pushover_active`
-
-Count of active instance-level integrations for Pushover
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180105_instances_pushover_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_redmine_active`
-
-Count of active instance-level integrations for Redmine
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180116_instances_redmine_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_slack_active`
-
-Count of active instance-level integrations for Slack
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180127_instances_slack_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_slack_slash_commands_active`
-
-Count of active instance-level integrations for Slack (slash commands)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180138_instances_slack_slash_commands_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_teamcity_active`
-
-Count of active instance-level integrations for Teamcity CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180149_instances_teamcity_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_unify_circuit_active`
-
-Count of active instance-level integrations for Unifiy Circuit
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180201_instances_unify_circuit_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_webex_teams_active`
-
-Count of active instance-level integrations for Webex Teams
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180212_instances_webex_teams_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.instances_youtrack_active`
-
-Count of active instance-level integrations for YouTrack
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180223_instances_youtrack_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.issues`
-
-Count of Issues created
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181102_issues.yml)
-
-Group: `group::plan`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.issues_created_from_alerts`
-
-Count of issues created automatically on alerts from GitLab-Managed Prometheus
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180441_issues_created_from_alerts.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.issues_created_from_gitlab_error_tracking_ui`
-
-Count of issues manually created from the GitLab UI on Sentry errors
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180434_issues_created_from_gitlab_error_tracking_ui.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.issues_created_gitlab_alerts`
-
-Count of all issues created from GitLab alerts (bot and non-bot)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180443_issues_created_gitlab_alerts.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.issues_created_manually_from_alerts`
-
-Count of issues created manually by non-bot users from GitLab alerts
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180445_issues_created_manually_from_alerts.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.issues_using_zoom_quick_actions`
-
-Count of issues where a user have added AND removed a zoom meeting using slash commands
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180438_issues_using_zoom_quick_actions.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.issues_with_associated_zoom_link`
-
-Count of issues where a user has linked a Zoom meeting
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180436_issues_with_associated_zoom_link.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.issues_with_embedded_grafana_charts_approx`
-
-Count of issues where a user has embedded a Grafana chart
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180440_issues_with_embedded_grafana_charts_approx.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.issues_with_health_status`
-
-Count of issues with health status
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216181210_issues_with_health_status.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.jira_imports_projects_count`
-
-Count of Projects that imported Issues from Jira
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181259_jira_imports_projects_count.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.jira_imports_total_imported_count`
-
-Count of Jira imports completed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181258_jira_imports_total_imported_count.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.jira_imports_total_imported_issues_count`
-
-Count of total issues imported via the Jira Importer
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181301_jira_imports_total_imported_issues_count.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.keys`
-
-Number of keys.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180752_keys.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.kubernetes_agent_gitops_sync`
-
-Count of events when an Agent is asked to synchronize the manifests or its configuration
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175328_kubernetes_agent_gitops_sync.yml)
-
-Group: `group::configure`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.kubernetes_agent_k8s_api_proxy_request`
-
-Count of Kubernetes API proxy requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210505015532_kubernetes_agent_k8s_api_proxy_request.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.kubernetes_agents`
-
-Count of Kubernetes registered agents
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175316_kubernetes_agents.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.kubernetes_agents_with_token`
-
-Count of Kubernetes agents with at least one token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175318_kubernetes_agents_with_token.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.label_lists`
-
-Count of label lists created on Boards
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181104_label_lists.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.labels`
-
-Count of Labels
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181111_labels.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.ldap_group_links`
-
-Number of groups that are synced via LDAP group sync `https://docs.gitlab.com/ee/user/group/index.html#manage-group-memberships-via-ldap`
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216174822_ldap_group_links.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.ldap_keys`
-
-Number of keys synced as part of LDAP `https://docs.gitlab.com/ee/administration/auth/ldap/#ldap-sync-configuration-settings`
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216174824_ldap_keys.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.ldap_users`
-
-Number of users that are linked to LDAP
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216174826_ldap_users.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.lfs_objects`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181009_lfs_objects.yml)
-
-Group: `group::create`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.license_management_jobs`
-
-Count of License Scanning jobs run
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210204124854_license_management_jobs.yml)
-
-Group: `group::composition analysis`
-
-Data Category: `Subscription`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.licenses_list_views`
-
-Count to License List page views
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210216175210_licenses_list_views.yml)
-
-Group: `group::composition analysis`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.merge_request_comment`
-
-Count of the number of merge request comments
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175041_merge_request_comment.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.merge_request_create`
-
-Count of the number of merge requests created
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175043_merge_request_create.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.merge_requests`
-
-Count of the number of merge requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175039_merge_requests.yml)
-
-Group: `group::code review`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.merged_merge_requests_using_approval_rules`
-
-Count of merge requests merged using approval rules
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175206_merged_merge_requests_using_approval_rules.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.milestone_lists`
-
-Count of milestone lists created on Boards
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216181106_milestone_lists.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.milestones`
-
-Count of milestones created
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181108_milestones.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.navbar_searches`
-
-Total Searches using the navbar for All Basic Search and Advanced Search in self-managed and SaaS
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180414_navbar_searches.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.network_policy_drops`
-
-Cumulative count of packets dropped by Cilium (Container Network Security) since Usage Ping was last reported
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175448_network_policy_drops.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.network_policy_forwards`
-
-Cumulative count of packets forwarded by Cilium (Container Network Security) since Usage Ping was last reported
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175446_network_policy_forwards.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.notes`
-
-Count of Notes across all objects that use them
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181113_notes.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.operations_dashboard_default_dashboard`
-
-Active users with enabled operations dashboard
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180942_operations_dashboard_default_dashboard.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.operations_dashboard_users_with_projects_added`
-
-Active users with projects on operations dashboard
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180944_operations_dashboard_users_with_projects_added.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_composer_delete_package`
-
-A count of Composer packages that have been deleted
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182855_package_events_i_package_composer_delete_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_composer_pull_package`
-
-A count of Composer packages that have been downloaded
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182857_package_events_i_package_composer_pull_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_composer_push_package`
-
-A count of Composer packages that have been published
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182859_package_events_i_package_composer_push_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_conan_delete_package`
-
-A count of Conan packages that have been deleted
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182901_package_events_i_package_conan_delete_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_conan_pull_package`
-
-A count of Conan packages that have been downloaded
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182903_package_events_i_package_conan_pull_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_conan_push_package`
-
-A count of Conan packages that have been published
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182905_package_events_i_package_conan_push_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_container_delete_package`
-
-A count of container images that have been deleted
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182907_package_events_i_package_container_delete_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_container_pull_package`
-
-A count of container images that have been downloaded
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182909_package_events_i_package_container_pull_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_container_push_package`
-
-A count of container images that have been published
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182911_package_events_i_package_container_push_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_debian_delete_package`
-
-A count of Debian packages that have been deleted
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182913_package_events_i_package_debian_delete_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_debian_pull_package`
-
-A count of Debian packages that have been downloaded
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182915_package_events_i_package_debian_pull_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_debian_push_package`
-
-A count of Debian packages that have been published
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182917_package_events_i_package_debian_push_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_delete_package`
-
-A count of packages that have been deleted
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182919_package_events_i_package_delete_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_delete_package_by_deploy_token`
-
-A count of packages that have been deleted using a Deploy Token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182921_package_events_i_package_delete_package_by_deploy_token.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_delete_package_by_guest`
-
-A count of packages that have been deleted using a Guest
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182923_package_events_i_package_delete_package_by_guest.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_delete_package_by_user`
-
-A count of packages that have been deleted using a logged in user
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182925_package_events_i_package_delete_package_by_user.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_generic_delete_package`
-
-A count of generic packages that have been deleted
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182927_package_events_i_package_generic_delete_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_generic_pull_package`
-
-A count of generic packages that have been downloaded
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182929_package_events_i_package_generic_pull_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_generic_push_package`
-
-A count of generic packages that have been published
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182931_package_events_i_package_generic_push_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_golang_delete_package`
-
-A count of Go modules that have been deleted
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182933_package_events_i_package_golang_delete_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_golang_pull_package`
-
-A count of Go modules that have been downloaded
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182934_package_events_i_package_golang_pull_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_golang_push_package`
-
-A count of Go modules that have been published
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182936_package_events_i_package_golang_push_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_helm_pull_package`
-
-Total count of pull Helm packages events
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210517073546_package_events_i_package_helm_pull_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_helm_push_package`
-
-The total count of Helm packages that have been published.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210625095025_package_events_i_package_helm_push_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_maven_delete_package`
-
-A count of Maven packages that have been deleted
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182938_package_events_i_package_maven_delete_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_maven_pull_package`
-
-A count of Maven packages that have been downloaded
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182940_package_events_i_package_maven_pull_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_maven_push_package`
-
-A count of Maven packages that have been published
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182942_package_events_i_package_maven_push_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_npm_delete_package`
-
-A count of npm packages that have been deleted
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182944_package_events_i_package_npm_delete_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_npm_pull_package`
-
-A count of npm packages that have been downloaded
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182946_package_events_i_package_npm_pull_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_npm_push_package`
-
-A count of npm packages that have been published
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182948_package_events_i_package_npm_push_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_nuget_delete_package`
-
-A count of NuGet packages that have been deleted
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182950_package_events_i_package_nuget_delete_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_nuget_pull_package`
-
-A count of NuGet packages that have been downloaded
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182952_package_events_i_package_nuget_pull_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_nuget_pull_symbol_package`
-
-A count of NuGet symbol packages that have been downloaded from the package registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210709191135_package_events_i_package_nuget_pull_symbol_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_nuget_push_package`
-
-A count of NuGet packages that have been published
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182954_package_events_i_package_nuget_push_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_nuget_push_symbol_package`
-
-A count of NuGet symbol packages that have been uploaded to the package registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210709191829_package_events_i_package_nuget_push_symbol_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_pull_package`
-
-A count of packages that have been downloaded from the package registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182956_package_events_i_package_pull_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_pull_package_by_deploy_token`
-
-A count of packages that have been downloaded from the package registry using a Deploy Token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182958_package_events_i_package_pull_package_by_deploy_token.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_pull_package_by_guest`
-
-A count of packages that have been downloaded from the package registry by a guest
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183000_package_events_i_package_pull_package_by_guest.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_pull_package_by_user`
-
-A count of packages that have been downloaded from the package registry by a user
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183002_package_events_i_package_pull_package_by_user.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_pull_symbol_package`
-
-A count of symbol packages that have been pulled from the package registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210709210941_package_events_i_package_pull_symbol_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_pull_symbol_package_by_deploy_token`
-
-A count of symbol packages that have been pulled with a deploy token from the package registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210709211058_package_events_i_package_pull_symbol_package_by_deploy_token.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_pull_symbol_package_by_guest`
-
-A count of symbol packages that have been pulled with by a guest from the package registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210709211248_package_events_i_package_pull_symbol_package_by_guest.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_pull_symbol_package_by_user`
-
-A count of symbol packages that have been pulled with by an authenticated user from the package registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210709211341_package_events_i_package_pull_symbol_package_by_user.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_push_package`
-
-A count of packages that have been published to the package registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183004_package_events_i_package_push_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_push_package_by_deploy_token`
-
-A count of packages that have been published to the package registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183005_package_events_i_package_push_package_by_deploy_token.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_push_package_by_guest`
-
-A count of packages that have been published to the package registry by a Guest
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183007_package_events_i_package_push_package_by_guest.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_push_package_by_user`
-
-A count of packages that have been published to the package registry by a user
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183009_package_events_i_package_push_package_by_user.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_push_symbol_package`
-
-A count of symbol packages that have been pushed to the package registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210709211439_package_events_i_package_push_symbol_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_push_symbol_package_by_deploy_token`
-
-A count of symbol packages that have been pushed with a deploy token to the package registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210709211636_package_events_i_package_push_symbol_package_by_deploy_token.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_push_symbol_package_by_guest`
-
-A count of symbol packages that have been pushed by a guest to the package registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210709211731_package_events_i_package_push_symbol_package_by_guest.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_push_symbol_package_by_user`
-
-A count of symbol packages that have been pushed by an authenticated user to the package registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210709211831_package_events_i_package_push_symbol_package_by_user.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_pypi_delete_package`
-
-A count of Python packages that have been deleted from the package registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183011_package_events_i_package_pypi_delete_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_pypi_pull_package`
-
-A count of Python packages that have been downloaded from the package registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183013_package_events_i_package_pypi_pull_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_pypi_push_package`
-
-A count of Python packages that have been published to the package registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183015_package_events_i_package_pypi_push_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_rubygems_delete_package`
-
-Total count of RubyGems packages delete events
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210303153000_package_events_i_package_rubygems_delete_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_rubygems_pull_package`
-
-Total count of pull RubyGems packages events
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210303153002_package_events_i_package_rubygems_pull_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_rubygems_push_package`
-
-Total count of push RubyGems packages events
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210303153004_package_events_i_package_rubygems_push_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_tag_delete_package`
-
-A count of package tags that have been deleted from the package registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183017_package_events_i_package_tag_delete_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_tag_pull_package`
-
-A count of package tags that have been downloaded from the package registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183019_package_events_i_package_tag_pull_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_tag_push_package`
-
-A count of package tags that have been published to the package registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183021_package_events_i_package_tag_push_package.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_terraform_module_delete_package`
-
-Total count of Terraform Module packages delete events
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210410012200_package_events_i_package_terraform_module_delete_package.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_terraform_module_pull_package`
-
-Total count of pull Terraform Module packages events
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210410012202_package_events_i_package_terraform_module_pull_package.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.package_events_i_package_terraform_module_push_package`
-
-Total count of push Terraform Module packages events
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210410012204_package_events_i_package_terraform_module_push_package.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.packages`
-
-The total number of packages published to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181012_packages.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.pages_domains`
-
-Total GitLab Pages domains
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181946_pages_domains.yml)
-
-Group: `group::release management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.personal_snippets`
-
-Count of personal Snippets
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180239_personal_snippets.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.pod_logs_usages_total`
-
-Count the total number of log views
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175021_pod_logs_usages_total.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`
-
-### `counts.pool_repositories`
-
-Count of unique object pool repositories for fork deduplication
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180410_pool_repositories.yml)
-
-Group: `group::gitaly`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.productivity_analytics_views`
-
-Total visits to /groups/:group/-/analytics/productivity_analytics all time
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216174834_productivity_analytics_views.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.project_clusters_disabled`
-
-Total GitLab Managed disabled clusters previously attached to projects
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175244_project_clusters_disabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.project_clusters_enabled`
-
-Total GitLab Managed clusters attached to projects
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175236_project_clusters_enabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.project_snippets`
-
-Count of project Snippets
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180241_project_snippets.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects`
-
-Count of Projects created
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181254_projects.yml)
-
-Group: `group::project management`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_asana_active`
-
-Count of projects with active integrations for Asana
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175623_projects_asana_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_assembla_active`
-
-Count of projects with active integrations for Assembla
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175634_projects_assembla_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_bamboo_active`
-
-Count of projects with active integrations for Bamboo CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175645_projects_bamboo_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_bugzilla_active`
-
-Count of projects with active integrations for Bugzilla
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175657_projects_bugzilla_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_buildkite_active`
-
-Count of projects with active integrations for Buildkite
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175708_projects_buildkite_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_campfire_active`
-
-Count of projects with active integrations for Campfire
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175719_projects_campfire_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_confluence_active`
-
-Count of projects with active integrations for Confluence
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175731_projects_confluence_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_creating_incidents`
-
-Counts of Projects that have incident issues, regardless of status.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180453_projects_creating_incidents.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_custom_issue_tracker_active`
-
-Count of projects with active integrations for a Custom Issue Tracker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175742_projects_custom_issue_tracker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_datadog_active`
-
-Count of projects with active integrations for Datadog
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182547_projects_datadog_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_discord_active`
-
-Count of projects with active integrations for Discord
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175753_projects_discord_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_drone_ci_active`
-
-Count of projects with active integrations for Drone CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175804_projects_drone_ci_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_emails_on_push_active`
-
-Count of projects with active integrations for Emails on Push
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175815_projects_emails_on_push_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_ewm_active`
-
-Count of projects with active integrations for EWM
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182614_projects_ewm_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_external_wiki_active`
-
-Count of projects with active integrations for External Wiki
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175826_projects_external_wiki_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_flowdock_active`
-
-Count of projects with active integrations for Flowdock
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175837_projects_flowdock_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_github_active`
-
-Count of projects with active integrations for GitHub
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175848_projects_github_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.projects_hangouts_chat_active`
-
-Count of projects with active integrations for Hangouts Chat
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175859_projects_hangouts_chat_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_hipchat_active`
-
-Count of projects with active integrations for HipChat
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175910_projects_hipchat_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_imported_from_github`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180628_projects_imported_from_github.yml)
-
-Group: `group::import`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.projects_inheriting_asana_active`
-
-Count of active projects inheriting integrations for Asana
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175630_projects_inheriting_asana_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_assembla_active`
-
-Count of active projects inheriting integrations for Assembla
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175642_projects_inheriting_assembla_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_bamboo_active`
-
-Count of active projects inheriting integrations for Bamboo CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175653_projects_inheriting_bamboo_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_bugzilla_active`
-
-Count of active projects inheriting integrations for Bugzilla
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175704_projects_inheriting_bugzilla_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_buildkite_active`
-
-Count of active projects inheriting integrations for Buildkite
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175716_projects_inheriting_buildkite_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_campfire_active`
-
-Count of active projects inheriting integrations for Campfire
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175727_projects_inheriting_campfire_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_confluence_active`
-
-Count of active projects inheriting integrations for Confluence
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175738_projects_inheriting_confluence_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_custom_issue_tracker_active`
-
-Count of active projects inheriting integrations for a Custom Issue Tracker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175749_projects_inheriting_custom_issue_tracker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_datadog_active`
-
-Count of active projects inheriting integrations for Datadog
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182555_projects_inheriting_datadog_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_discord_active`
-
-Count of active projects inheriting integrations for Discord
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175800_projects_inheriting_discord_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_drone_ci_active`
-
-Count of active projects inheriting integrations for Drone CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175811_projects_inheriting_drone_ci_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_emails_on_push_active`
-
-Count of active projects inheriting integrations for Emails on Push
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175822_projects_inheriting_emails_on_push_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_ewm_active`
-
-Count of active projects inheriting integrations for EWM
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182622_projects_inheriting_ewm_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_external_wiki_active`
-
-Count of active projects inheriting integrations for External Wiki
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175833_projects_inheriting_external_wiki_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_flowdock_active`
-
-Count of active projects inheriting integrations for Flowdock
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175844_projects_inheriting_flowdock_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_github_active`
-
-Count of active projects inheriting integrations for GitHub
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175855_projects_inheriting_github_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.projects_inheriting_hangouts_chat_active`
-
-Count of active projects inheriting integrations for Hangouts Chat
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175906_projects_inheriting_hangouts_chat_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_hipchat_active`
-
-Count of active projects inheriting integrations for HipChat
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175917_projects_inheriting_hipchat_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_irker_active`
-
-Count of active projects inheriting integrations for Irker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175928_projects_inheriting_irker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_jenkins_active`
-
-Count of active projects inheriting integrations for Jenkins
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175939_projects_inheriting_jenkins_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_jira_active`
-
-Count of active projects inheriting integrations for Jira
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175950_projects_inheriting_jira_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_mattermost_active`
-
-Count of active projects inheriting integrations for Mattermost
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180001_projects_inheriting_mattermost_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_mattermost_slash_commands_active`
-
-Count of active projects inheriting integrations for Mattermost (slash commands)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180012_projects_inheriting_mattermost_slash_commands_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_microsoft_teams_active`
-
-Count of active projects inheriting integrations for Microsoft Teams
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180023_projects_inheriting_microsoft_teams_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_mock_ci_active`
-
-Count of active projects inheriting integrations for Mock CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182730_projects_inheriting_mock_ci_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_mock_monitoring_active`
-
-Count of active projects inheriting integrations for Mock Monitoring
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182741_projects_inheriting_mock_monitoring_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_packagist_active`
-
-Count of active projects inheriting integrations for Packagist
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180034_projects_inheriting_packagist_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_pipelines_email_active`
-
-Count of active projects inheriting integrations for Pipeline Emails
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180045_projects_inheriting_pipelines_email_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_pivotaltracker_active`
-
-Count of active projects inheriting integrations for Pivotal Tracker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180056_projects_inheriting_pivotaltracker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_prometheus_active`
-
-Count of active projects inheriting integrations for Prometheus
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180938_projects_inheriting_prometheus_active.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_pushover_active`
-
-Count of active projects inheriting integrations for Pushover
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180107_projects_inheriting_pushover_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_redmine_active`
-
-Count of active projects inheriting integrations for Redmine
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180118_projects_inheriting_redmine_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_slack_active`
-
-Count of active projects inheriting integrations for Slack
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180129_projects_inheriting_slack_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_slack_slash_commands_active`
-
-Count of active projects inheriting integrations for Slack (slash commands)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180140_projects_inheriting_slack_slash_commands_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_teamcity_active`
-
-Count of active projects inheriting integrations for Teamcity CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180151_projects_inheriting_teamcity_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_unify_circuit_active`
-
-Count of active projects inheriting integrations for Unifiy Circuit
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180203_projects_inheriting_unify_circuit_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_webex_teams_active`
-
-Count of active projects inheriting integrations for Webex Teams
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180214_projects_inheriting_webex_teams_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_inheriting_youtrack_active`
-
-Count of active projects inheriting integrations for YouTrack
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180225_projects_inheriting_youtrack_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_irker_active`
-
-Count of projects with active integrations for Irker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175921_projects_irker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_jenkins_active`
-
-Count of projects with active integrations for Jenkins
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175932_projects_jenkins_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_jira_active`
-
-Count of projects with active integrations for Jira
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175943_projects_jira_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_jira_cloud_active`
-
-Count of active integrations with Jira Cloud (Saas)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180230_projects_jira_cloud_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_jira_dvcs_cloud_active`
-
-Count of active integrations with Jira Cloud (DVCS Connector)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180232_projects_jira_dvcs_cloud_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_jira_dvcs_server_active`
-
-Count of active integrations with Jira Software (DVCS connector)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180234_projects_jira_dvcs_server_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_jira_issuelist_active`
-
-Total Jira Issue feature enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180236_projects_jira_issuelist_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.projects_jira_server_active`
-
-Count of active integrations with Jira Software (server)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180228_projects_jira_server_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_mattermost_active`
-
-Count of projects with active integrations for Mattermost
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175954_projects_mattermost_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_mattermost_slash_commands_active`
-
-Count of projects with active integrations for Mattermost (slash commands)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180005_projects_mattermost_slash_commands_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_microsoft_teams_active`
-
-Count of projects with active integrations for Microsoft Teams
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180016_projects_microsoft_teams_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_mirrored_with_pipelines_enabled`
-
-Projects with repository mirroring enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216181920_projects_mirrored_with_pipelines_enabled.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.projects_mock_ci_active`
-
-Count of projects with active integrations for Mock CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182722_projects_mock_ci_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_mock_monitoring_active`
-
-Count of projects with active integrations for Mock Monitoring
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182734_projects_mock_monitoring_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_packagist_active`
-
-Count of projects with active integrations for Packagist
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180027_projects_packagist_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_pipelines_email_active`
-
-Count of projects with active integrations for Pipeline Emails
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180038_projects_pipelines_email_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_pivotaltracker_active`
-
-Count of projects with active integrations for Pivotal Tracker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180049_projects_pivotaltracker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_prometheus_active`
-
-Count of projects with active integrations for Prometheus
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180931_projects_prometheus_active.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_pushover_active`
-
-Count of projects with active integrations for Pushover
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180100_projects_pushover_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_redmine_active`
-
-Count of projects with active integrations for Redmine
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180111_projects_redmine_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_reporting_ci_cd_back_to_github`
-
-Projects with a GitHub service pipeline enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182212_projects_reporting_ci_cd_back_to_github.yml)
-
-Group: `group::continuous_integration`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.projects_slack_active`
-
-Count of projects with active integrations for Slack
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180122_projects_slack_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_slack_slash_commands_active`
-
-Count of projects with active integrations for Slack (slash commands)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180133_projects_slack_slash_commands_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_teamcity_active`
-
-Count of projects with active integrations for Teamcity CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180144_projects_teamcity_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_unify_circuit_active`
-
-Count of projects with active integrations for Unifiy Circuit
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180155_projects_unify_circuit_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_webex_teams_active`
-
-Count of projects with active integrations for Webex Teams
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180206_projects_webex_teams_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_alerts_created`
-
-Count of projects with alerts created in given time period
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180458_projects_with_alerts_created.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_alerts_service_enabled`
-
-Count of projects that have enabled the Alerts service
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180456_projects_with_alerts_service_enabled.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_enabled_alert_integrations`
-
-Count of projects with at least 1 enabled integration
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180500_projects_with_enabled_alert_integrations.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_error_tracking_enabled`
-
-Count of projects that have enabled Error tracking via Sentry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180454_projects_with_error_tracking_enabled.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_disabled`
-
-The number of projects with cleanup policy for tags turned off
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181014_projects_with_expiration_policy_disabled.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled`
-
-A count of projects with the cleanup policy for tags turned on
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181016_projects_with_expiration_policy_enabled.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_cadence_set_to_14d`
-
-A count of projects with the cleanup policy set to run every 14 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181033_projects_with_expiration_policy_enabled_with_cadence_set_to_14d.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_cadence_set_to_1d`
-
-A count of projects with the cleanup policy set to run every day
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181029_projects_with_expiration_policy_enabled_with_cadence_set_to_1d.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_cadence_set_to_1month`
-
-A count of projects with the cleanup policy set to run monthly
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181035_projects_with_expiration_policy_enabled_with_cadence_set_to_1month.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_cadence_set_to_3month`
-
-A count of projects with the cleanup policy set to run every 3 months
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181037_projects_with_expiration_policy_enabled_with_cadence_set_to_3month.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_cadence_set_to_7d`
-
-A count of projects with the cleanup policy set to run every 7 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181031_projects_with_expiration_policy_enabled_with_cadence_set_to_7d.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_keep_n_set_to_1`
-
-A count of projects with the cleanup policy set to keep 1 tag
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181018_projects_with_expiration_policy_enabled_with_keep_n_set_to_1.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_keep_n_set_to_10`
-
-A count of projects with the cleanup policy set to keep 10 tags
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181022_projects_with_expiration_policy_enabled_with_keep_n_set_to_10.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_keep_n_set_to_100`
-
-A count of projects with the cleanup policy set to keep 100 tags
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181027_projects_with_expiration_policy_enabled_with_keep_n_set_to_100.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_keep_n_set_to_25`
-
-A count of projects with the cleanup policy set to keep 25 tags
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181024_projects_with_expiration_policy_enabled_with_keep_n_set_to_25.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_keep_n_set_to_5`
-
-A count of projects with the cleanup policy set to keep 5 tags
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181020_projects_with_expiration_policy_enabled_with_keep_n_set_to_5.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_keep_n_set_to_50`
-
-A count of projects with the cleanup policy set to keep 50 tags
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181025_projects_with_expiration_policy_enabled_with_keep_n_set_to_50.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_keep_n_unset`
-
-A count of projects with the cleanup policy with the number of tags to keep unset
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181046_projects_with_expiration_policy_enabled_with_keep_n_unset.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_older_than_set_to_14d`
-
-A count of projects with the cleanup policy set delete tags older than 14 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181040_projects_with_expiration_policy_enabled_with_older_than_set_to_14d.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_older_than_set_to_30d`
-
-A count of projects with the cleanup policy set delete tags older than 30 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181042_projects_with_expiration_policy_enabled_with_older_than_set_to_30d.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_older_than_set_to_7d`
-
-A count of projects with the cleanup policy set delete tags older than 7 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181038_projects_with_expiration_policy_enabled_with_older_than_set_to_7d.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_older_than_set_to_90d`
-
-A count of projects with the cleanup policy set delete tags older than 90 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181044_projects_with_expiration_policy_enabled_with_older_than_set_to_90d.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_expiration_policy_enabled_with_older_than_unset`
-
-A count of projects with the cleanup policy with the number of tags to delete unset
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181048_projects_with_expiration_policy_enabled_with_older_than_unset.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_packages`
-
-Projects with package registry enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181011_projects_with_packages.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_prometheus_alerts`
-
-Projects with Prometheus alerting enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175019_projects_with_prometheus_alerts.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`
-
-### `counts.projects_with_repositories_enabled`
-
-Count of users creating projects that have a matching Git repository, result of a Git push action.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216181959_projects_with_repositories_enabled.yml)
-
-Group: `group::source code`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.projects_with_terraform_reports`
-
-Count of projects with Terraform MR reports
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175320_projects_with_terraform_reports.yml)
-
-Group: `group::configure`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_terraform_states`
-
-Count of projects with GitLab Managed Terraform State
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175322_projects_with_terraform_states.yml)
-
-Group: `group::configure`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_with_tracing_enabled`
-
-Projects with tracing enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180929_projects_with_tracing_enabled.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.projects_youtrack_active`
-
-Count of projects with active integrations for YouTrack
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180217_projects_youtrack_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.protected_branches`
-
-Count of total protected branches
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182001_protected_branches.yml)
-
-Group: `group::source code`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.protected_branches_except_default`
-
-Count of branches that have been protected and are not the default branch
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182454_protected_branches_except_default.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.releases`
-
-Unique release tags
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181918_releases.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.remote_mirrors`
-
-Count of total remote mirrors. Includes both push and pull mirrors
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182002_remote_mirrors.yml)
-
-Group: `group::source code`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.requirement_test_reports_ci`
-
-Count of requirement test reports created from CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175032_requirement_test_reports_ci.yml)
-
-Group: `group::certify`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.requirement_test_reports_manual`
-
-Count of requirement test reports created manually
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175030_requirement_test_reports_manual.yml)
-
-Group: `group::certify`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.requirements_created`
-
-Count of requirements created
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175028_requirements_created.yml)
-
-Group: `group::certify`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.requirements_with_test_report`
-
-Count of requirements having a test report
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175034_requirements_with_test_report.yml)
-
-Group: `group::certify`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.sast_jobs`
-
-Count of SAST CI jobs for the month. Job names ending in '-sast'
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182112_sast_jobs.yml)
-
-Group: `group::static analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.secret_detection_jobs`
-
-Count of all 'secret-detection' CI jobs.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182114_secret_detection_jobs.yml)
-
-Group: `group::static analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.service_desk_enabled_projects`
-
-Count of service desk enabled projects
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175024_service_desk_enabled_projects.yml)
-
-Group: `group::certify`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.service_desk_issues`
-
-Count of service desk issues
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175026_service_desk_issues.yml)
-
-Group: `group::certify`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.snippet_comment`
-
-Count of comments on Snippets
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180253_snippet_comment.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.snippet_create`
-
-Count of newly created Snippets
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180255_snippet_create.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.snippet_update`
-
-Count of updates to existing Snippets
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180257_snippet_update.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.snippets`
-
-Count of all Snippets
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180306_snippets.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.source_code_pushes`
-
-Count of total Git push operations
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182006_source_code_pushes.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.static_site_editor_commits`
-
-Count of commits created from the Static Site Editor
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180301_static_site_editor_commits.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.static_site_editor_merge_requests`
-
-Count of merge requests created via Static Site Editor
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180303_static_site_editor_merge_requests.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.static_site_editor_views`
-
-Count of Static Site Editor views
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180259_static_site_editor_views.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.status_page_incident_publishes`
-
-Cumulative count of usages of publish operation
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180502_status_page_incident_publishes.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.status_page_incident_unpublishes`
-
-Cumulative count of usages of unpublish operation
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180504_status_page_incident_unpublishes.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.status_page_issues`
-
-Issues published to a Status Page
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180507_status_page_issues.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.status_page_projects`
-
-Projects with status page enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180506_status_page_projects.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.successful_deployments`
-
-Total successful deployments
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181911_successful_deployments.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.suggestions`
-
-Count of all comments that contain suggested changes
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175037_suggestions.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.template_repositories`
-
-Count of total repo templates used to aggregate all file templates
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182008_template_repositories.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.templates_asana_active`
-
-Count of active service templates for Asana
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175627_templates_asana_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_assembla_active`
-
-Count of active service templates for Assembla
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175638_templates_assembla_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_bamboo_active`
-
-Count of active service templates for Bamboo CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175649_templates_bamboo_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_bugzilla_active`
-
-Count of active service templates for Bugzilla
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175701_templates_bugzilla_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_buildkite_active`
-
-Count of active service templates for Buildkite
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175712_templates_buildkite_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_campfire_active`
-
-Count of active service templates for Campfire
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175723_templates_campfire_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_confluence_active`
-
-Count of active service templates for Confluence
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175734_templates_confluence_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_custom_issue_tracker_active`
-
-Count of active service templates for a Custom Issue Tracker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175745_templates_custom_issue_tracker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_datadog_active`
-
-Count of active service templates for Datadog
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182551_templates_datadog_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_discord_active`
-
-Count of active service templates for Discord
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175756_templates_discord_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_drone_ci_active`
-
-Count of active service templates for Drone CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175807_templates_drone_ci_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_emails_on_push_active`
-
-Count of active service templates for Emails on Push
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175818_templates_emails_on_push_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_ewm_active`
-
-Count of active service templates for EWM
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182618_templates_ewm_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_external_wiki_active`
-
-Count of active service templates for External Wiki
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175829_templates_external_wiki_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_flowdock_active`
-
-Count of active service templates for Flowdock
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175840_templates_flowdock_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_github_active`
-
-Count of active service templates for GitHub
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175851_templates_github_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts.templates_hangouts_chat_active`
-
-Count of active service templates for Hangouts Chat
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175902_templates_hangouts_chat_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_hipchat_active`
-
-Count of active service templates for HipChat
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175913_templates_hipchat_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_irker_active`
-
-Count of active service templates for Irker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175924_templates_irker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_jenkins_active`
-
-Count of active service templates for Jenkins
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175935_templates_jenkins_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_jira_active`
-
-Count of active service templates for Jira
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175946_templates_jira_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_mattermost_active`
-
-Count of active service templates for Mattermost
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175957_templates_mattermost_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_mattermost_slash_commands_active`
-
-Count of active service templates for Mattermost (slash commands)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180008_templates_mattermost_slash_commands_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_microsoft_teams_active`
-
-Count of active service templates for Microsoft Teams
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180019_templates_microsoft_teams_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_mock_ci_active`
-
-Count of active service templates for Mock CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182726_templates_mock_ci_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_mock_monitoring_active`
-
-Count of active service templates for Mock Monitoring
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182738_templates_mock_monitoring_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_packagist_active`
-
-Count of active service templates for Packagist
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180030_templates_packagist_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_pipelines_email_active`
-
-Count of active service templates for Pipeline Emails
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180041_templates_pipelines_email_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_pivotaltracker_active`
-
-Count of active service templates for Pivotal Tracker
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180052_templates_pivotaltracker_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_prometheus_active`
-
-Count of active service templates for Prometheus
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180934_templates_prometheus_active.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_pushover_active`
-
-Count of active service templates for Pushover
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180104_templates_pushover_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_redmine_active`
-
-Count of active service templates for Redmine
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180115_templates_redmine_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_slack_active`
-
-Count of active service templates for Slack
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180126_templates_slack_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_slack_slash_commands_active`
-
-Count of active service templates for Slack (slash commands)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180137_templates_slack_slash_commands_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_teamcity_active`
-
-Count of active service templates for Teamcity CI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180148_templates_teamcity_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_unify_circuit_active`
-
-Count of active service templates for Unifiy Circuit
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180159_templates_unify_circuit_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_webex_teams_active`
-
-Count of active service templates for Webex Teams
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180210_templates_webex_teams_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.templates_youtrack_active`
-
-Count of active service templates for YouTrack
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180221_templates_youtrack_active.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.terraform_reports`
-
-Count of Terraform MR reports generated
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175324_terraform_reports.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.terraform_states`
-
-Count of GitLab Managed Terraform States
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175326_terraform_states.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.todos`
-
-Count of todos created
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181256_todos.yml)
-
-Group: `group::project management`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.uploads`
-
-Count of Uploads via Notes and Descriptions
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181109_uploads.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.user_preferences_group_overview_details`
-
-Count of users who set personal preference to see Details on Group information page
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182203_user_preferences_group_overview_details.yml)
-
-Group: `group::threat insights`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.user_preferences_group_overview_security_dashboard`
-
-Count of users who set personal preference to see Security Dashboard on Group information page
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182205_user_preferences_group_overview_security_dashboard.yml)
-
-Group: `group::threat insights`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `counts.user_preferences_user_gitpod_enabled`
-
-Count of users with the GitPod integration enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180304_user_preferences_user_gitpod_enabled.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.web_hooks`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175621_web_hooks.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts.web_ide_commits`
-
-Count of commits made from the Web IDE
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180242_web_ide_commits.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.web_ide_merge_requests`
-
-Count of merge requests created from the Web IDE
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180246_web_ide_merge_requests.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.web_ide_pipelines`
-
-Count of Pipeline tab views in the Web IDE
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180252_web_ide_pipelines.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.web_ide_previews`
-
-Count of Live Preview tab views in the Web IDE
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180248_web_ide_previews.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.web_ide_terminals`
-
-Count of Web Terminal tab views in the Web IDE
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180250_web_ide_terminals.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.web_ide_views`
-
-Count of views of the Web IDE
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180244_web_ide_views.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.wiki_pages_create`
-
-Count of all Wiki pages created
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180734_wiki_pages_create.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.wiki_pages_delete`
-
-Count of all Wiki pages deleted
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180738_wiki_pages_delete.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.wiki_pages_update`
-
-Count of all Wiki page updates
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180736_wiki_pages_update.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts.wiki_pages_view`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183023_wiki_pages_view.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts_monthly.aggregated_metrics.code_review_category_monthly_active_users`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210427102618_code_review_category_monthly_active_users.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_monthly.aggregated_metrics.code_review_extension_category_monthly_active_users`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210427103010_code_review_extension_category_monthly_active_users.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_monthly.aggregated_metrics.code_review_group_monthly_active_users`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210427103119_code_review_group_monthly_active_users.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_monthly.aggregated_metrics.compliance_features_track_unique_visits_union`
-
-Unique users that have used audit event screen, audit event API, compliance dashboard, or credential inventory
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216183201_compliance_features_track_unique_visits_union.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts_monthly.aggregated_metrics.i_testing_paid_monthly_active_user_total`
-
-Aggregated count of users who have engaged with a Premium or Ultimate tier testing feature per month.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216183209_i_testing_paid_monthly_active_user_total.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts_monthly.aggregated_metrics.incident_management_alerts_total_unique_counts`
-
-Count of unique users per month to take an action on an alert
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180509_incident_management_alerts_total_unique_counts.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_monthly.aggregated_metrics.incident_management_incidents_total_unique_counts`
-
-Count of unique users per month to take an action on an incident
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180511_incident_management_incidents_total_unique_counts.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_monthly.aggregated_metrics.product_analytics_test_metrics_intersection`
-
-This was test metric used for purpose of assuring correct implementation of aggregated metrics feature
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183205_product_analytics_test_metrics_intersection.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_monthly.aggregated_metrics.product_analytics_test_metrics_union`
-
-This was test metric used for purpose of assuring correct implementation of aggregated metrics feature
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183203_product_analytics_test_metrics_union.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_monthly.deployments`
-
-Total deployments count for recent 28 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210201124930_deployments.yml)
-
-Group: `group::ops release`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_monthly.failed_deployments`
-
-Total failed deployments
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181924_failed_deployments.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts_monthly.packages`
-
-A monthly count of packages published to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181050_packages.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_monthly.personal_snippets`
-
-Monthly count of personal Snippets
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180308_personal_snippets.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_monthly.project_snippets`
-
-Monthly count of project Snippets
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180310_project_snippets.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_monthly.projects`
-
-Count number of projects created monthly
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210514141518_monthly_projects_creation.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_monthly.projects_with_alerts_created`
-
-Monthly count of unique projects with HTTP alerting enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183159_projects_with_alerts_created.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_monthly.snippets`
-
-Monthly count of All Snippets
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180312_snippets.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_monthly.successful_deployments`
-
-Total successful deployments
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181923_successful_deployments.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `counts_weekly.aggregated_metrics.code_review_category_monthly_active_users`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210427103407_code_review_category_monthly_active_users.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_weekly.aggregated_metrics.code_review_extension_category_monthly_active_users`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210427103452_code_review_extension_category_monthly_active_users.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_weekly.aggregated_metrics.code_review_group_monthly_active_users`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210427103328_code_review_group_monthly_active_users.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_weekly.aggregated_metrics.compliance_features_track_unique_visits_union`
-
-Unique users that have used audit event screen, audit event API, compliance dashboard, or credential inventory
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216183211_compliance_features_track_unique_visits_union.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts_weekly.aggregated_metrics.i_testing_paid_monthly_active_user_total`
-
-Aggregated count of users who have engaged with a Premium or Ultimate tier testing feature per week.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216183219_i_testing_paid_monthly_active_user_total.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `counts_weekly.aggregated_metrics.incident_management_alerts_total_unique_counts`
-
-Count of unique users per week to take an action on an alert
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180513_incident_management_alerts_total_unique_counts.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_weekly.aggregated_metrics.incident_management_incidents_total_unique_counts`
-
-Count of unique users per week to take an action on an incident
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180515_incident_management_incidents_total_unique_counts.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_weekly.aggregated_metrics.product_analytics_test_metrics_intersection`
-
-This was test metric used for purpose of assuring correct implementation of aggregated metrics feature
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216183215_product_analytics_test_metrics_intersection.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `counts_weekly.aggregated_metrics.product_analytics_test_metrics_union`
-
-This was test metric used for purpose of assuring correct implementation of aggregated metrics feature
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216183213_product_analytics_test_metrics_union.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `database.adapter`
-
-This metric only returns a value of PostgreSQL in supported versions of GitLab. It could be removed from the usage ping. Historically MySQL was also supported.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210201124935_database_adapter.yml)
-
-Group: `group::enablement distribution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `database.pg_system_id`
-
-TBD
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216183248_pg_system_id.yml)
-
-Group: `group::distribution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `database.version`
-
-The version of the PostgreSQL database.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216175609_version.yml)
-
-Group: `group::distribution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `dependency_proxy_enabled`
-
-A count of projects where the dependency proxy is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210204124900_dependency_proxy_enabled.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `edition`
-
-Edition of GitLab such as EE or CE
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216175604_edition.yml)
-
-Group: `group::distribution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `elasticsearch_enabled`
-
-Whether Elasticsearch is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/settings/20210204124924_elasticsearch_enabled.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `geo_enabled`
-
-Is Geo enabled?
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/settings/20210216180406_geo_enabled.yml)
-
-Group: `group::geo`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `git.version`
-
-Information about Git version
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/license/20210216183237_version.yml)
-
-Group: `group::distribution`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `gitaly.clusters`
-
-Total GitLab Managed clusters both enabled and disabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210204124932_clusters.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `gitaly.filesystems`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216183241_filesystems.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `gitaly.servers`
-
-Total Gitalty Servers
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210204124930_servers.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `gitaly.version`
-
-Version of Gitaly
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/license/20210204124928_version.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `gitlab_pages.enabled`
-
-Whether GitLab Pages is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210204124934_enabled.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `gitlab_pages.version`
-
-The version number of GitLab Pages
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/license/20210204124936_version.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `gitlab_shared_runners_enabled`
-
-Whether shared runners is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210204124902_gitlab_shared_runners_enabled.yml)
-
-Group: `group::runner`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `gitpod_enabled`
-
-Whether Gitpod is enabled in the instance
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180314_gitpod_enabled.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `grafana_link_enabled`
-
-Whether Grafana is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210204124922_grafana_link_enabled.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `gravatar_enabled`
-
-Whether gravatar is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210204124904_gravatar_enabled.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `historical_max_users`
-
-The peak active user count. Active is defined in UsersStatistics model.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210204124835_historical_max_users.yml)
-
-Group: `group::license`
-
-Data Category: `Subscription`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `hostname`
-
-Host name of GitLab instance
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/license/20210204124827_hostname.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Standard`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `ingress_modsecurity_enabled`
-
-Whether or not ModSecurity is enabled within Ingress
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216175459_ingress_modsecurity_enabled.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `installation_type`
-
-The installation method used to install GitLab (Omnibus, Helm, etc)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/license/20210216175602_installation_type.yml)
-
-Group: `group::distribution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `instance_auto_devops_enabled`
-
-Whether auto DevOps is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210204124856_instance_auto_devops_enabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `ldap_enabled`
-
-Whether LDAP is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210204124906_ldap_enabled.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `license_billable_users`
-
-Number of all billable users (active users excluding bots and guests).
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210531204603_license_billable_users.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `premium`, `ultimate`
-
-### `license_expires_at`
-
-The date the license ends
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210204124847_license_expires_at.yml)
-
-Group: `group::license`
-
-Data Category: `Subscription`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `license_id`
-
-The ID of the license
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210204124833_license_id.yml)
-
-Group: `group::license`
-
-Data Category: `Subscription`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `license_md5`
-
-The MD5 hash of license key of the GitLab instance
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210204124831_license_md5.yml)
-
-Group: `group::license`
-
-Data Category: `Standard`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `license_plan`
-
-The plan of the GitLab license
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210204124849_license_plan.yml)
-
-Group: `group::license`
-
-Data Category: `Subscription`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `license_starts_at`
-
-The date the license starts
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210204124845_license_starts_at.yml)
-
-Group: `group::license`
-
-Data Category: `Subscription`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `license_subscription_id`
-
-Licese zuora_subscription_id
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210204124852_license_subscription_id.yml)
-
-Group: `group::license`
-
-Data Category: `Standard`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `license_trial`
-
-Whether this is a trial license or not
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210204124851_license_trial.yml)
-
-Group: `group::license`
-
-Data Category: `Subscription`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `license_trial_ends_on`
-
-Date the trial license ends on
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210204124926_license_trial_ends_on.yml)
-
-Group: `group::license`
-
-Data Category: `Subscription`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `license_user_count`
-
-The number of seats included in the license
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210204124843_license_user_count.yml)
-
-Group: `group::license`
-
-Data Category: `Subscription`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `licensee.Company`
-
-Company on the GitLab license
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210204124841_company.yml)
-
-Group: `group::license`
-
-Data Category: `Subscription`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `licensee.Email`
-
-Email on the GitLab license
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210204124839_email.yml)
-
-Group: `group::license`
-
-Data Category: `Subscription`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `licensee.Name`
-
-Name on the GitLab license
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210204124837_name.yml)
-
-Group: `group::license`
-
-Data Category: `Subscription`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `mail.smtp_server`
-
-The value of the SMTP server that is used
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216174829_smtp_server.yml)
-
-Group: `group::activation`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `mattermost_enabled`
-
-Whether Mattermost is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210204124908_mattermost_enabled.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.artifacts.enabled`
-
-Whether Object Storage is enabled for Artifacts
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180836_enabled.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.artifacts.object_store.background_upload`
-
-Whether Background Upload for Object Storage is enabled for Artifacts
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180841_background_upload.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.artifacts.object_store.direct_upload`
-
-Whether Direct Upload for Object Storage is enabled for Artifacts
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180840_direct_upload.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.artifacts.object_store.enabled`
-
-Whether Object Storage is enabled for Artifacts
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180838_enabled.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.artifacts.object_store.provider`
-
-What Object Storage provider has been configured for Artifacts
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180843_provider.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.external_diffs.enabled`
-
-Whether Object Storage is enabled for External Diffs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180845_enabled.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.external_diffs.object_store.background_upload`
-
-Whether Background Upload for Object Storage is enabled for External Diffs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180851_background_upload.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.external_diffs.object_store.direct_upload`
-
-Whether Direct Upload for Object Storage is enabled for External Diffs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180849_direct_upload.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.external_diffs.object_store.enabled`
-
-Whether Object Storage is enabled for External Diffs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180847_enabled.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.external_diffs.object_store.provider`
-
-What Object Storage provider has been configured for External Diffs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180852_provider.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.lfs.enabled`
-
-Whether Object Storage is enabled for LFS
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180854_enabled.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.lfs.object_store.background_upload`
-
-Whether Background Upload for Object Storage is enabled for LFS
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180900_background_upload.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.lfs.object_store.direct_upload`
-
-Whether Direct Upload for Object Storage is enabled for LFS
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180858_direct_upload.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.lfs.object_store.enabled`
-
-Whether Object Storage is enabled for LFS
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180856_enabled.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.lfs.object_store.provider`
-
-What Object Storage provider has been configured for LFS
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180902_provider.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.packages.enabled`
-
-Whether Object Storage is enabled for Uploads
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180913_enabled.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.packages.object_store.background_upload`
-
-Whether Background Upload for Object Storage is enabled for Packages
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180918_background_upload.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.packages.object_store.direct_upload`
-
-Whether Direct Upload for Object Storage is enabled for Packages
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180916_direct_upload.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.packages.object_store.enabled`
-
-Whether Object Storage is enabled for Packages
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180915_enabled.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.packages.object_store.provider`
-
-What Object Storage provider has been configured for Packages
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180920_provider.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.uploads.enabled`
-
-Whether Object Storage is enabled for Uploads
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180903_enabled.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.uploads.object_store.background_upload`
-
-Whether Background Upload for Object Storage is enabled for Uploads
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180909_background_upload.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.uploads.object_store.direct_upload`
-
-Whether Direct Upload for Object Storage is enabled for Uploads
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180907_direct_upload.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.uploads.object_store.enabled`
-
-Whether Object Storage is enabled for Uploads
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180905_enabled.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `object_store.uploads.object_store.provider`
-
-What Object Storage provider has been configured for Uploads
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216180911_provider.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `omniauth_enabled`
-
-Whether OmniAuth is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210204124910_omniauth_enabled.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `prometheus_enabled`
-
-Whether the bundled Prometheus is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210204124912_prometheus_enabled.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `prometheus_metrics_enabled`
-
-Whether Prometheus Metrics endpoint is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210204124914_prometheus_metrics_enabled.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `recorded_at`
-
-When the Usage Ping computation was started
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/license/20210201124932_recorded_at.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Standard`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `recording_ce_finished_at`
-
-When the core features were computed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/license/20210204124938_recording_ce_finished_at.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Standard`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `recording_ee_finished_at`
-
-When the EE-specific features were computed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/license/20210204124940_recording_ee_finished_at.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Standard`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.analytics.analytics_total_unique_counts_monthly`
-
-The number of unique users who visited any analytics feature by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175016_analytics_total_unique_counts_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.analytics_total_unique_counts_weekly`
-
-The number of unique users who visited any analytics feature by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175014_analytics_total_unique_counts_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.g_analytics_contribution_monthly`
-
-Unique visitors to /groups/:group/-/contribution_analytics by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216174914_g_analytics_contribution_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.g_analytics_contribution_weekly`
-
-Unique visitors to /groups/:group/-/contribution_analytics by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216174912_g_analytics_contribution_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.g_analytics_insights_monthly`
-
-Unique visitors to /groups/:group/-/insights/ by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216174918_g_analytics_insights_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.g_analytics_insights_weekly`
-
-Unique visitors to /groups/:group/-/insights/ by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216174916_g_analytics_insights_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.g_analytics_issues_monthly`
-
-Unique visitors to /groups/:group/-/issues_analytics by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216174921_g_analytics_issues_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.g_analytics_issues_weekly`
-
-Unique visitors to /groups/:group/-/issues_analytics by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216174919_g_analytics_issues_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.g_analytics_merge_request_monthly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175004_g_analytics_merge_request_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.g_analytics_merge_request_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216175002_g_analytics_merge_request_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers:
-
-### `redis_hll_counters.analytics.g_analytics_productivity_monthly`
-
-Unique visitors to /groups/:group/-/analytics/productivity_analytics by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216174926_g_analytics_productivity_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.g_analytics_productivity_weekly`
-
-Unique visitors to /groups/:group/-/analytics/productivity_analytics by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216174923_g_analytics_productivity_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.g_analytics_valuestream_monthly`
-
-Unique visitors to /groups/:group/-/analytics/value_stream_analytics by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216174929_g_analytics_valuestream_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.g_analytics_valuestream_weekly`
-
-Unique visitors to /groups/:group/-/analytics/value_stream_analytics by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216174927_g_analytics_valuestream_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.i_analytics_cohorts_monthly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216174956_i_analytics_cohorts_monthly.yml)
-
-Group: `group::utilization`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.i_analytics_cohorts_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216174955_i_analytics_cohorts_weekly.yml)
-
-Group: `group::utilization`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.i_analytics_dev_ops_adoption_monthly`
-
-Counts visits to DevOps Adoption page per month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210401092244_i_analytics_dev_ops_adoption_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.analytics.i_analytics_dev_ops_adoption_weekly`
-
-Counts visits to DevOps Adoption page per week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210401092244_i_analytics_dev_ops_adoption_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.analytics.i_analytics_dev_ops_score_monthly`
-
-Unique visitors to /admin/dev_ops_report by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175000_i_analytics_dev_ops_score_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.i_analytics_dev_ops_score_weekly`
-
-Unique visitors to /admin/dev_ops_report by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216174958_i_analytics_dev_ops_score_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.i_analytics_instance_statistics_monthly`
-
-Unique visitors to /admin/usage_trends by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175012_i_analytics_instance_statistics_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.i_analytics_instance_statistics_weekly`
-
-Unique visitors to /admin/usage_trends by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175010_i_analytics_instance_statistics_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.p_analytics_code_reviews_monthly`
-
-Unique visitors to /:group/:project/-/analytics/code_reviews by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216174937_p_analytics_code_reviews_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.p_analytics_code_reviews_weekly`
-
-Unique visitors to /:group/:project/-/analytics/code_reviews by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216174935_p_analytics_code_reviews_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.p_analytics_insights_monthly`
-
-Unique visitors to /:group/:project/insights/ by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216174945_p_analytics_insights_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.p_analytics_insights_weekly`
-
-Unique visitors to /:group/:project/insights/ by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216174943_p_analytics_insights_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.p_analytics_issues_monthly`
-
-Unique visitors to /:group/:project/-/analytics/issues_analytics by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216174949_p_analytics_issues_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.p_analytics_issues_weekly`
-
-Unique visitors to /:group/:project/-/analytics/issues_analytics by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216174947_p_analytics_issues_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.p_analytics_merge_request_monthly`
-
-Unique visitors to /:group/:project/-/analytics/merge_request_analytics by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216175008_p_analytics_merge_request_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.p_analytics_merge_request_weekly`
-
-Unique visitors to /:group/:project/-/analytics/merge_request_analytics by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216175006_p_analytics_merge_request_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.p_analytics_pipelines_monthly`
-
-Unique visitors to /groups/:group/-/analytics/ci_cd by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216174933_p_analytics_pipelines_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.p_analytics_pipelines_weekly`
-
-Unique visitors to /groups/:group/-/analytics/ci_cd by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216174931_p_analytics_pipelines_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.p_analytics_repo_monthly`
-
-Unique visitors to /:group/:project/-/graphs/master/charts by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216174953_p_analytics_repo_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.p_analytics_repo_weekly`
-
-Unique visitors to /:group/:project/-/graphs/master/charts by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216174951_p_analytics_repo_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.p_analytics_valuestream_monthly`
-
-Unique visitors to /:group/:project/-/value_stream_analytics by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216174941_p_analytics_valuestream_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.analytics.p_analytics_valuestream_weekly`
-
-Unique visitors to /:group/:project/-/value_stream_analytics by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216174939_p_analytics_valuestream_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.analytics.users_viewing_analytics_group_devops_adoption_monthly`
-
-Counts visits to DevOps Adoption page per month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210419105414_users_viewing_analytics_group_devops_adoption_monthly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.analytics.users_viewing_analytics_group_devops_adoption_weekly`
-
-Counts visits to DevOps Adoption page per week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210419105408_users_viewing_analytics_group_devops_adoption_weekly.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.ci_secrets_management.i_ci_secrets_management_vault_build_created_monthly`
-
-Monthly active users creating pipelines that that have the Vault JWT with it.'
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216184251_i_ci_secrets_management_vault_build_created_monthly.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.ci_secrets_management.i_ci_secrets_management_vault_build_created_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184249_i_ci_secrets_management_vault_build_created_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.ci_templates.ci_templates_total_unique_counts_monthly`
-
-Total count of pipelines runs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184559_ci_templates_total_unique_counts_monthly.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `broken`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.ci_templates_total_unique_counts_weekly`
-
-Total count of pipelines runs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184557_ci_templates_total_unique_counts_weekly.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `broken`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_5_min_production_app_monthly`
-
-Number of projects using 5 min production app CI template in last 7 days.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184517_p_ci_templates_5_min_production_app_monthly.yml)
-
-Group: `group::5-min-app`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_5_min_production_app_weekly`
-
-Number of projects using 5 min production app CI template in last 7 days.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184515_p_ci_templates_5_min_production_app_weekly.yml)
-
-Group: `group::5-min-app`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_auto_devops_build_monthly`
-
-Count of pipelines using the Auto Build template
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184534_p_ci_templates_auto_devops_build_monthly.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_auto_devops_build_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184532_p_ci_templates_auto_devops_build_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.ci_templates.p_ci_templates_auto_devops_deploy_latest_monthly`
-
-Count of pipelines using the latest Auto Deploy template
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184542_p_ci_templates_auto_devops_deploy_latest_monthly.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_auto_devops_deploy_latest_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184540_p_ci_templates_auto_devops_deploy_latest_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.ci_templates.p_ci_templates_auto_devops_deploy_monthly`
-
-Count of pipelines using the stable Auto Deploy template
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184538_p_ci_templates_auto_devops_deploy_monthly.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_auto_devops_deploy_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184536_p_ci_templates_auto_devops_deploy_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.ci_templates.p_ci_templates_auto_devops_monthly`
-
-Count of pipelines using the Auto DevOps template
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184523_p_ci_templates_auto_devops_monthly.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_auto_devops_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184520_p_ci_templates_auto_devops_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.ci_templates.p_ci_templates_aws_cf_deploy_ec2_monthly`
-
-Count of projects using `AWS/CF-Provision-and-Deploy-EC2.gitlab-ci.yml` template in last 28 days.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184526_p_ci_templates_aws_cf_deploy_ec2_monthly.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_aws_cf_deploy_ec2_weekly`
-
-Count of projects using `AWS/CF-Provision-and-Deploy-EC2.gitlab-ci.yml` template in last 7 days.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184524_p_ci_templates_aws_cf_deploy_ec2_weekly.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_aws_deploy_ecs_monthly`
-
-Count of projects using `AWS/Deploy-ECS.gitlab-ci.yml` template in last 28 days.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184530_p_ci_templates_aws_deploy_ecs_monthly.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_aws_deploy_ecs_weekly`
-
-Count of projects using `AWS/Deploy-ECS.gitlab-ci.yml` template in last 7 days.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184528_p_ci_templates_aws_deploy_ecs_weekly.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_implicit_auto_devops_build_monthly`
-
-Count of pipelines with implicit Auto Build runs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184502_p_ci_templates_implicit_auto_devops_build_monthly.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_implicit_auto_devops_build_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184500_p_ci_templates_implicit_auto_devops_build_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.ci_templates.p_ci_templates_implicit_auto_devops_deploy_monthly`
-
-Count of pipelines with implicit Auto Deploy runs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184506_p_ci_templates_implicit_auto_devops_deploy_monthly.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_implicit_auto_devops_deploy_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184504_p_ci_templates_implicit_auto_devops_deploy_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.ci_templates.p_ci_templates_implicit_auto_devops_monthly`
-
-Count of pipelines with implicit Auto DevOps runs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184458_p_ci_templates_implicit_auto_devops_monthly.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_implicit_auto_devops_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184456_p_ci_templates_implicit_auto_devops_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.ci_templates.p_ci_templates_implicit_security_sast_monthly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184510_p_ci_templates_implicit_security_sast_monthly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_implicit_security_sast_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184508_p_ci_templates_implicit_security_sast_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.ci_templates.p_ci_templates_implicit_security_secret_detection_monthly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184513_p_ci_templates_implicit_security_secret_detection_monthly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_implicit_security_secret_detection_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184512_p_ci_templates_implicit_security_secret_detection_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.ci_templates.p_ci_templates_security_sast_monthly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184546_p_ci_templates_security_sast_monthly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_security_sast_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184544_p_ci_templates_security_sast_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.ci_templates.p_ci_templates_security_secret_detection_monthly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184551_p_ci_templates_security_secret_detection_monthly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_security_secret_detection_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184549_p_ci_templates_security_secret_detection_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.ci_templates.p_ci_templates_terraform_base_latest_monthly`
-
-Count of pipelines that include the terraform base template from GitLab
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184555_p_ci_templates_terraform_base_latest_monthly.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ci_templates.p_ci_templates_terraform_base_latest_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184553_p_ci_templates_terraform_base_latest_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.code_review.code_review_total_unique_counts_monthly`
-
-Count of unique users per month who interact with a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184454_code_review_total_unique_counts_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.code_review_total_unique_counts_weekly`
-
-Count of unique users per week who interact with a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184452_code_review_total_unique_counts_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_click_diff_view_setting_monthly`
-
-Count of users clicking diff view setting
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210607113556_i_code_review_click_diff_view_setting_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_click_diff_view_setting_weekly`
-
-Count of users clicking diff view setting
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210607113552_i_code_review_click_diff_view_setting_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_click_file_browser_setting_monthly`
-
-Count of users clicking merge request file browser setting
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210421145818_i_code_review_click_file_browser_setting_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_click_file_browser_setting_weekly`
-
-Count of users with merge request file list setting
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210421145814_i_code_review_click_file_browser_setting_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_click_single_file_mode_setting_monthly`
-
-Count of users clicking single file mode setting
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210421144352_i_code_review_click_single_file_mode_setting_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_click_single_file_mode_setting_weekly`
-
-Count of users clicking single file mode setting
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210421144349_i_code_review_click_single_file_mode_setting_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_click_whitespace_setting_monthly`
-
-Count of users clicking merge request whitespae setting
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210421145945_i_code_review_click_whitespace_setting_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_click_whitespace_setting_weekly`
-
-Count of users clicking merge request whitespae setting
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210421145942_i_code_review_click_whitespace_setting_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_diff_hide_whitespace_monthly`
-
-Count of users with show whitespace disabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210422102010_i_code_review_diff_hide_whitespace_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_diff_hide_whitespace_weekly`
-
-Count of users with show whitespace disabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210422102007_i_code_review_diff_hide_whitespace_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_diff_multiple_files_monthly`
-
-Count of users with single mode disabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210422102202_i_code_review_diff_multiple_files_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_diff_multiple_files_weekly`
-
-Count of users with single mode disabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210422102159_i_code_review_diff_multiple_files_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_diff_show_whitespace_monthly`
-
-Count of users with show whitespace enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210422101928_i_code_review_diff_show_whitespace_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_diff_show_whitespace_weekly`
-
-Count of users with show whitespace enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210422101925_i_code_review_diff_show_whitespace_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_diff_single_file_monthly`
-
-Count of users with single file mode enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210422102121_i_code_review_diff_single_file_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_diff_single_file_weekly`
-
-Count of users with single file mode enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210422102118_i_code_review_diff_single_file_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_diff_view_inline_monthly`
-
-Count of users with merge request view type as inline
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210422101516_i_code_review_diff_view_inline_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_diff_view_inline_weekly`
-
-Count of users with merge request view type as inline
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210422101512_i_code_review_diff_view_inline_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_diff_view_parallel_monthly`
-
-Count of users with merge request view type as parallel
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210422101613_i_code_review_diff_view_parallel_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_diff_view_parallel_weekly`
-
-Count of users with merge request view type as parallel
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210422101609_i_code_review_diff_view_parallel_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_edit_mr_desc_monthly`
-
-Count of unique users per month who edit the description of a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184342_i_code_review_edit_mr_desc_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_edit_mr_desc_weekly`
-
-Count of unique users per week who edit the description of a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184340_i_code_review_edit_mr_desc_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_edit_mr_title_monthly`
-
-Count of unique users per month who edit the title of a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184338_i_code_review_edit_mr_title_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_edit_mr_title_weekly`
-
-Count of unique users per week who edit the title of a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184336_i_code_review_edit_mr_title_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_file_browser_list_view_monthly`
-
-Count of users with merge request file list setting
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210422101852_i_code_review_file_browser_list_view_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_file_browser_list_view_weekly`
-
-Count of users with merge request file list setting
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210422101849_i_code_review_file_browser_list_view_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_file_browser_tree_view_monthly`
-
-Count of users with merge request file tree setting
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210422101753_i_code_review_file_browser_tree_view_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_file_browser_tree_view_weekly`
-
-Count of users with merge request file tree setting
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210422101750_i_code_review_file_browser_tree_view_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_mr_diffs_monthly`
-
-Count of unique merge requests per month with diffs viewed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175120_i_code_review_mr_diffs_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_mr_diffs_weekly`
-
-Count of unique merge requests per week with diffs viewed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175118_i_code_review_mr_diffs_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_mr_single_file_diffs_monthly`
-
-Count of unique merge requests per month with diffs viewed file by file
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175128_i_code_review_mr_single_file_diffs_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_mr_single_file_diffs_weekly`
-
-Count of unique merge requests per week with diffs viewed file by file
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175126_i_code_review_mr_single_file_diffs_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_add_suggestion_monthly`
-
-Count of unique users per month who added a suggestion
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175159_i_code_review_user_add_suggestion_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_add_suggestion_weekly`
-
-Count of unique users per week who added a suggestion
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175158_i_code_review_user_add_suggestion_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_apply_suggestion_monthly`
-
-Count of unique users per month who applied a suggestion
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175203_i_code_review_user_apply_suggestion_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_apply_suggestion_weekly`
-
-Count of unique users per week who applied a suggestion
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175201_i_code_review_user_apply_suggestion_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_approval_rule_added_monthly`
-
-Count of unique users per month who add an approval rule to a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184434_i_code_review_user_approval_rule_added_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_approval_rule_added_weekly`
-
-Count of unique users per week who add an approval rule to a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184432_i_code_review_user_approval_rule_added_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_approval_rule_deleted_monthly`
-
-Count of unique users per month who delete an approval rule to a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184438_i_code_review_user_approval_rule_deleted_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_approval_rule_deleted_weekly`
-
-Count of unique users per week who delete an approval rule to a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184436_i_code_review_user_approval_rule_deleted_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_approval_rule_edited_monthly`
-
-Count of unique users per month who delete an approval rule to a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184442_i_code_review_user_approval_rule_edited_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_approval_rule_edited_weekly`
-
-Count of unique users per week who edit an approval rule to a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184440_i_code_review_user_approval_rule_edited_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_approve_mr_monthly`
-
-Count of unique users per month who approve a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184322_i_code_review_user_approve_mr_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_approve_mr_weekly`
-
-Count of unique users per week who approve a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184320_i_code_review_user_approve_mr_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_assigned_monthly`
-
-Count of unique users per month who are assigned to a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184418_i_code_review_user_assigned_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_assigned_weekly`
-
-Count of unique users per week who are assigned to a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184416_i_code_review_user_assigned_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_assignees_changed_monthly`
-
-Count of unique users per month who changed assignees of a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210302114145_i_code_review_user_assignees_changed_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_assignees_changed_weekly`
-
-Count of unique users per week who changed assignees of a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302114202_i_code_review_user_assignees_changed_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_close_mr_monthly`
-
-Count of unique users per month who closed a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175136_i_code_review_user_close_mr_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_close_mr_weekly`
-
-Count of unique users per week who closed a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175134_i_code_review_user_close_mr_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_create_mr_comment_monthly`
-
-Count of unique users per month who commented on a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175148_i_code_review_user_create_mr_comment_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_create_mr_comment_weekly`
-
-Count of unique users per week who commented on a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175146_i_code_review_user_create_mr_comment_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_create_mr_from_issue_monthly`
-
-Count of unique users per month who create a merge request from an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184450_i_code_review_user_create_mr_from_issue_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_create_mr_from_issue_weekly`
-
-Count of unique users per week who create a merge request from an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184448_i_code_review_user_create_mr_from_issue_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_create_mr_monthly`
-
-Count of unique users per month who created a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175132_i_code_review_user_create_mr_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_create_mr_weekly`
-
-Count of unique users per week who created a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175130_i_code_review_user_create_mr_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_create_multiline_mr_comment_monthly`
-
-Count of unique users per month who create a multiline comment in a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184401_i_code_review_user_create_multiline_mr_comment_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_create_multiline_mr_comment_weekly`
-
-Count of unique users per week who create a multiline comment in a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184359_i_code_review_user_create_multiline_mr_comment_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_create_review_note_monthly`
-
-Count of unique users per month who create a note as part of a merge request review
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184353_i_code_review_user_create_review_note_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_create_review_note_weekly`
-
-Count of unique users per week who create a note as part of a merge request review
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184351_i_code_review_user_create_review_note_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_edit_mr_comment_monthly`
-
-Count of unique users per month who edited a comment on a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175152_i_code_review_user_edit_mr_comment_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_edit_mr_comment_weekly`
-
-Count of unique users per week who edited a comment on a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175150_i_code_review_user_edit_mr_comment_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_edit_multiline_mr_comment_monthly`
-
-Count of unique users per week who edit a multiline comment in a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184405_i_code_review_user_edit_multiline_mr_comment_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_edit_multiline_mr_comment_weekly`
-
-Count of unique users per week who edit a multiline comment in a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184403_i_code_review_user_edit_multiline_mr_comment_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_labels_changed_monthly`
-
-Count of unique users per month who changed labels of a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210302110607_i_code_review_user_labels_changed_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_labels_changed_weekly`
-
-Count of unique users per week who changed labels of a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302110548_i_code_review_user_labels_changed_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_load_conflict_ui_monthly`
-
-Count of unique users per week who load the conflict resolution page
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210514013549_i_code_review_user_load_conflict_ui_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_load_conflict_ui_weekly`
-
-Count of unique users per week who load the conflict resolution page
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210514013544_i_code_review_user_load_conflict_ui_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_marked_as_draft_monthly`
-
-Count of unique users per month who mark a merge request as a draft
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184422_i_code_review_user_marked_as_draft_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_marked_as_draft_weekly`
-
-Count of unique users per week who mark a merge request as a draft
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184420_i_code_review_user_marked_as_draft_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_merge_mr_monthly`
-
-Count of unique users per month who merged a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175144_i_code_review_user_merge_mr_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_merge_mr_weekly`
-
-Count of unique users per week who merged a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175142_i_code_review_user_merge_mr_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_milestone_changed_monthly`
-
-Count of unique users per month who changed milestone of a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210302110520_i_code_review_user_milestone_changed_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_milestone_changed_weekly`
-
-Count of unique users per week who changed milestone of a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302110403_i_code_review_user_milestone_changed_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_mr_discussion_locked_monthly`
-
-Count of unique users per month who locked a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210301103859_i_code_review_user_mr_discussion_locked_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_mr_discussion_locked_weekly`
-
-Count of unique users per week who locked a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302105318_i_code_review_user_mr_discussion_locked_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_mr_discussion_unlocked_monthly`
-
-Count of unique users per month who unlocked a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210301103925_i_code_review_user_mr_discussion_unlocked_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_mr_discussion_unlocked_weekly`
-
-Count of unique users per week who unlocked a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302105258_i_code_review_user_mr_discussion_unlocked_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_publish_review_monthly`
-
-Count of unique users per month who publish their review as part of a merge request review
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184357_i_code_review_user_publish_review_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_publish_review_weekly`
-
-Count of unique users per week who publish their review as part of a merge request review
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184355_i_code_review_user_publish_review_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_remove_mr_comment_monthly`
-
-Count of unique users per month who removed a comment on a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175156_i_code_review_user_remove_mr_comment_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_remove_mr_comment_weekly`
-
-Count of unique users per month who removed a comment on a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175154_i_code_review_user_remove_mr_comment_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_remove_multiline_mr_comment_monthly`
-
-Count of unique users per month who remove a multiline comment in a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184409_i_code_review_user_remove_multiline_mr_comment_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_remove_multiline_mr_comment_weekly`
-
-Count of unique users per week who remove a multiline comment in a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184407_i_code_review_user_remove_multiline_mr_comment_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_reopen_mr_monthly`
-
-Count of unique users per month who reopened a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175140_i_code_review_user_reopen_mr_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_reopen_mr_weekly`
-
-Count of unique users per week who reopened a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175138_i_code_review_user_reopen_mr_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_resolve_conflict_monthly`
-
-Count of unique users per week who attempt to resolve a conflict through the ui
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210514013545_i_code_review_user_resolve_conflict_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_resolve_conflict_weekly`
-
-Count of unique users per week who attempt to resolve a conflict through the ui
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210514013545_i_code_review_user_resolve_conflict_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_resolve_thread_monthly`
-
-Count of unique users per month who resolve a thread in a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184330_i_code_review_user_resolve_thread_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_resolve_thread_weekly`
-
-Count of unique users per week who resolve a thread in a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184328_i_code_review_user_resolve_thread_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_review_requested_monthly`
-
-Count of unique users per month who request a review of a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184430_i_code_review_user_review_requested_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_review_requested_weekly`
-
-Count of unique users per week who request a review of a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184428_i_code_review_user_review_requested_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_reviewers_changed_monthly`
-
-Count of unique users per month who changed reviewers of a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210302114219_i_code_review_user_reviewers_changed_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_reviewers_changed_weekly`
-
-Count of unique users per week who changed reviewers of a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302114235_i_code_review_user_reviewers_changed_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_single_file_diffs_monthly`
-
-Count of unique users per month with diffs viewed file by file
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175124_i_code_review_user_single_file_diffs_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_single_file_diffs_weekly`
-
-Count of unique users per week with diffs viewed file by file
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175122_i_code_review_user_single_file_diffs_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_time_estimate_changed_monthly`
-
-Count of unique users per month who changed time estimate of a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210301102134_i_code_review_user_time_estimate_changed_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_time_estimate_changed_weekly`
-
-Count of unique users per week who changed time estimate of a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302103539_i_code_review_user_time_estimate_changed_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_time_spent_changed_monthly`
-
-Count of unique users per month who changed time spent on a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210301102204_i_code_review_user_time_spent_changed_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_time_spent_changed_weekly`
-
-Count of unique users per week who changed time spent on a MR
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302103615_i_code_review_user_time_spent_changed_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_toggled_task_item_status_monthly`
-
-Count of unique users per month who toggled a task item in a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184312_i_code_review_user_toggled_task_item_status_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_toggled_task_item_status_weekly`
-
-Count of unique users per week who toggled a task item in a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184310_i_code_review_user_toggled_task_item_status_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_unapprove_mr_monthly`
-
-Count of unique users per month who unapprove a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184326_i_code_review_user_unapprove_mr_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_unapprove_mr_weekly`
-
-Count of unique users per week who unapprove a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184324_i_code_review_user_unapprove_mr_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_unmarked_as_draft_monthly`
-
-Count of unique users per month who unmark a merge request as a draft
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184426_i_code_review_user_unmarked_as_draft_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_unmarked_as_draft_weekly`
-
-Count of unique users per week who unmark a merge request as a draft
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184424_i_code_review_user_unmarked_as_draft_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_unresolve_thread_monthly`
-
-Count of unique users per month who unresolve a thread in a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184334_i_code_review_user_unresolve_thread_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_unresolve_thread_weekly`
-
-Count of unique users per week who unresolve a thread in a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184332_i_code_review_user_unresolve_thread_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_vs_code_api_request_monthly`
-
-Count of unique users per month who use GitLab Workflow for VS Code
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184446_i_code_review_user_vs_code_api_request_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.code_review.i_code_review_user_vs_code_api_request_weekly`
-
-Count of unique users per week who use GitLab Workflow for VS Code
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184444_i_code_review_user_vs_code_api_request_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.compliance.a_compliance_audit_events_api_monthly`
-
-Unique users that have used the Audit Events API in a given month.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216183942_a_compliance_audit_events_api_monthly.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.compliance.a_compliance_audit_events_api_weekly`
-
-Unique users that have used the Audit Events API in a given week.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216183940_a_compliance_audit_events_api_weekly.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.compliance.compliance_total_unique_counts_monthly`
-
-Unique count of compliance actions in a given month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216183946_compliance_total_unique_counts_monthly.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.compliance.compliance_total_unique_counts_weekly`
-
-Unique count of compliance actions in a given week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216183944_compliance_total_unique_counts_weekly.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.compliance.g_compliance_audit_events_monthly`
-
-Unique users who have viewed the audit event screen in a given month.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216183930_g_compliance_audit_events_monthly.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.compliance.g_compliance_audit_events_weekly`
-
-Number of unique visitors to group-level audit events screen in a given week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216183928_g_compliance_audit_events_weekly.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.compliance.g_compliance_dashboard_monthly`
-
-Unique users who have viewed the compliance dashboard in a given month.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216183926_g_compliance_dashboard_monthly.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.compliance.g_compliance_dashboard_weekly`
-
-Unique users who have looked at the compliance dashboard in a given week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216183924_g_compliance_dashboard_weekly.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.compliance.i_compliance_audit_events_monthly`
-
-Unique users that have viewed the instance-level audit events screen
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216183934_i_compliance_audit_events_monthly.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.compliance.i_compliance_audit_events_weekly`
-
-Unique users that have viewed the instance-level audit events screen
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216183932_i_compliance_audit_events_weekly.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.compliance.i_compliance_credential_inventory_monthly`
-
-Unique users who have viewed the credential inventory in a given month.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216183938_i_compliance_credential_inventory_monthly.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.compliance.i_compliance_credential_inventory_weekly`
-
-Unique visitors to the credential inventory screen in a given week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216183936_i_compliance_credential_inventory_weekly.yml)
-
-Group: `group::compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.deploy_token_packages_total_unique_counts_monthly`
-
-A monthly count of packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184850_deploy_token_packages_total_unique_counts_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.deploy_token_packages_total_unique_counts_weekly`
-
-A weekly count of packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184848_deploy_token_packages_total_unique_counts_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_composer_deploy_token_monthly`
-
-A monthly count of Composer packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184806_i_package_composer_deploy_token_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_composer_deploy_token_weekly`
-
-A weekly count of Composer packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184805_i_package_composer_deploy_token_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_conan_deploy_token_monthly`
-
-A monthly count of Conan packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184810_i_package_conan_deploy_token_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_conan_deploy_token_weekly`
-
-A weekly count of Conan packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184808_i_package_conan_deploy_token_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_container_deploy_token_monthly`
-
-A monthly count of container images published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184814_i_package_container_deploy_token_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_container_deploy_token_weekly`
-
-A weekly count of container images published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184812_i_package_container_deploy_token_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_debian_deploy_token_monthly`
-
-A monthly count of Debian packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184818_i_package_debian_deploy_token_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_debian_deploy_token_weekly`
-
-A weekly count of Debian packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184816_i_package_debian_deploy_token_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_generic_deploy_token_monthly`
-
-A monthly count of generic packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184822_i_package_generic_deploy_token_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `broken`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_generic_deploy_token_weekly`
-
-A weekly count of generic packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184820_i_package_generic_deploy_token_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_golang_deploy_token_monthly`
-
-A monthly count of Go modules published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184826_i_package_golang_deploy_token_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_golang_deploy_token_weekly`
-
-A weekly count of Go modules published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184824_i_package_golang_deploy_token_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_helm_deploy_token_monthly`
-
-Distinct Helm pakages deployed in recent 28 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210517074859_i_package_helm_deploy_token_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_helm_deploy_token_weekly`
-
-Distinct Helm pakages deployed in recent 7 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210517074851_i_package_helm_deploy_token_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_maven_deploy_token_monthly`
-
-A monthly count of Maven packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184830_i_package_maven_deploy_token_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_maven_deploy_token_weekly`
-
-A weekly count of Maven packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184828_i_package_maven_deploy_token_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_npm_deploy_token_monthly`
-
-A monthly count of npm packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184834_i_package_npm_deploy_token_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_npm_deploy_token_weekly`
-
-A weekly count of npm packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184832_i_package_npm_deploy_token_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_nuget_deploy_token_monthly`
-
-A monthly count of NuGet packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184838_i_package_nuget_deploy_token_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_nuget_deploy_token_weekly`
-
-A weekly count of NuGet packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184836_i_package_nuget_deploy_token_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_pypi_deploy_token_monthly`
-
-A monthly count of PyPI packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184842_i_package_pypi_deploy_token_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_pypi_deploy_token_weekly`
-
-A weekly count of Python packages published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184840_i_package_pypi_deploy_token_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_rubygems_deploy_token_monthly`
-
-Distinct count events for RubyGems packages published using a Deploy token in recent 28 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210303154626_i_package_rubygems_deploy_token_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_rubygems_deploy_token_weekly`
-
-A weekly count of distinct RubyGems packages published using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210303154624_i_package_rubygems_deploy_token_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_tag_deploy_token_monthly`
-
-A monthly count of package tags published to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184846_i_package_tag_deploy_token_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_tag_deploy_token_weekly`
-
-A weekly count of users that have published a package tag to the registry using a deploy token
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184844_i_package_tag_deploy_token_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_terraform_module_deploy_token_monthly`
-
-Number of distinct users authorized via deploy token creating Terraform Module packages in recent 28 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210410012206_i_package_terraform_module_deploy_token_monthly.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.deploy_token_packages.i_package_terraform_module_deploy_token_weekly`
-
-Number of distinct users authorized via deploy token creating Terraform Module packages in recent 7 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210410012207_i_package_terraform_module_deploy_token_weekly.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.ecosystem_total_unique_counts_monthly`
-
-Number of users performing actions on Jira issues by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184957_ecosystem_total_unique_counts_monthly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.ecosystem_total_unique_counts_weekly`
-
-Number of users performing actions on Jira issues by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184955_ecosystem_total_unique_counts_weekly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_jira_service_close_issue_monthly`
-
-Number of users closing Jira issues by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184941_i_ecosystem_jira_service_close_issue_monthly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_jira_service_close_issue_weekly`
-
-Number of users closing Jira issues by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184939_i_ecosystem_jira_service_close_issue_weekly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_jira_service_create_issue_monthly`
-
-Number of users creating Jira issues by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216184953_i_ecosystem_jira_service_create_issue_monthly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_jira_service_create_issue_weekly`
-
-Number of users creating Jira issues by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184951_i_ecosystem_jira_service_create_issue_weekly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_jira_service_cross_reference_monthly`
-
-Number of users that cross-referenced Jira issues by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184945_i_ecosystem_jira_service_cross_reference_monthly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_jira_service_cross_reference_weekly`
-
-Number of users that cross-referenced Jira issues by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184943_i_ecosystem_jira_service_cross_reference_weekly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_jira_service_list_issues_monthly`
-
-Count of Jira Issue List visits by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216184949_i_ecosystem_jira_service_list_issues_monthly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_jira_service_list_issues_weekly`
-
-Count of Jira Issue List visits by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184947_i_ecosystem_jira_service_list_issues_weekly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_confidential_issue_notification_monthly`
-
-Calculated unique users to trigger a Slack message by performing an action on a confidential issue by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210303152233_i_ecosystem_slack_service_confidential_issue_notification_monthly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_confidential_issue_notification_weekly`
-
-Calculated unique users to trigger a Slack message by performing an action on a confidential issue by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302104814_i_ecosystem_slack_service_confidential_issue_notification_weekly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_confidential_note_notification_monthly`
-
-Calculated unique users to trigger a Slack message by creating a confidential note by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210303152144_i_ecosystem_slack_service_confidential_note_notification_monthly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_confidential_note_notification_weekly`
-
-Calculated unique users to trigger a Slack message by creating a confidential note by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302104556_i_ecosystem_slack_service_confidential_note_notification_weekly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_deployment_notification_monthly`
-
-Calculated unique users to trigger a Slack message by performing a deployment by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210303150912_i_ecosystem_slack_service_deployment_notification_monthly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_deployment_notification_weekly`
-
-Calculated unique users to trigger a Slack message by performing a deployment by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302103755_i_ecosystem_slack_service_deployment_notification_weekly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_issue_notification_monthly`
-
-Calculated unique users to trigger a Slack message by performing an action on an issue by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210303150507_i_ecosystem_slack_service_issue_notification_monthly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_issue_notification_weekly`
-
-Calculated unique users to trigger a Slack message by performing an action on an issue by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302103002_i_ecosystem_slack_service_issue_notification_weekly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_merge_request_notification_monthly`
-
-Calculated unique users to trigger a Slack message by performing an action on a merge request by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210303151831_i_ecosystem_slack_service_merge_request_notification_monthly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_merge_request_notification_weekly`
-
-Calculated unique users to trigger a Slack message by performing an action on a merge request by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302104007_i_ecosystem_slack_service_merge_request_notification_weekly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_note_notification_monthly`
-
-Calculated unique users to trigger a Slack message by creating a note by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210303151946_i_ecosystem_slack_service_note_notification_monthly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_note_notification_weekly`
-
-Calculated unique users to trigger a Slack message by creating a note by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302104047_i_ecosystem_slack_service_note_notification_weekly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_push_notification_monthly`
-
-Calculated unique users to trigger a Slack message by performing a Git push by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210303150654_i_ecosystem_slack_service_push_notification_monthly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_push_notification_weekly`
-
-Calculated unique users to trigger a Slack message by performing a Git push by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302103629_i_ecosystem_slack_service_push_notification_weekly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_tag_push_notification_monthly`
-
-Calculated unique users to trigger a Slack message by performing a tag push by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210303152049_i_ecosystem_slack_service_tag_push_notification_monthly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_tag_push_notification_weekly`
-
-Calculated unique users to trigger a Slack message by performing a tag push by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302104144_i_ecosystem_slack_service_tag_push_notification_weekly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_wiki_page_notification_monthly`
-
-Calculated unique users to trigger a Slack message by performing an action on a wiki page by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210303151609_i_ecosystem_slack_service_wiki_page_notification_monthly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ecosystem.i_ecosystem_slack_service_wiki_page_notification_weekly`
-
-Calculated unique users to trigger a Slack message by performing an action on a wiki page by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210302103907_i_ecosystem_slack_service_wiki_page_notification_weekly.yml)
-
-Group: `group::ecosystem`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.epic_boards_usage.epic_boards_usage_total_unique_counts_monthly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210507171840_epic_boards_usage_total_unique_counts_monthly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.epic_boards_usage.epic_boards_usage_total_unique_counts_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210507171838_epic_boards_usage_total_unique_counts_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.epic_boards_usage.g_project_management_users_creating_epic_boards_monthly`
-
-Count of MAU creating epic boards
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210428072511_g_project_management_users_creating_epic_boards_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epic_boards_usage.g_project_management_users_creating_epic_boards_weekly`
-
-Count of WAU creating epic boards
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210428072508_g_project_management_users_creating_epic_boards_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epic_boards_usage.g_project_management_users_updating_epic_board_names_monthly`
-
-Count of MAU updating epic board names
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210428073607_g_project_management_users_updating_epic_board_names_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epic_boards_usage.g_project_management_users_updating_epic_board_names_weekly`
-
-Count of WAU updating epic board names
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210428073604_g_project_management_users_updating_epic_board_names_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epic_boards_usage.g_project_management_users_viewing_epic_boards_monthly`
-
-Count of MAU viewing epic boards
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210428073329_g_project_management_users_viewing_epic_boards_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epic_boards_usage.g_project_management_users_viewing_epic_boards_weekly`
-
-Count of WAU viewing epic boards
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210428073327_g_project_management_users_viewing_epic_boards_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.epics_usage_total_unique_counts_monthly`
-
-Total monthly users count for epics_usage
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210318183733_epics_usage_total_unique_counts_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.epics_usage_total_unique_counts_weekly`
-
-Total weekly users count for epics_usage
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210318183220_epics_usage_total_unique_counts_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_closed_monthly`
-
-Counts of MAU closing epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210310163213_g_project_management_epic_closed_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_closed_weekly`
-
-Counts of WAU closing epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210310162703_g_project_management_epic_closed_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_created_monthly`
-
-Count of MAU creating epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210305144719_g_product_planning_epic_created_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_created_weekly`
-
-Count of WAU creating epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210305145820_g_product_planning_epic_created_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_cross_referenced_monthly`
-
-Count of MAU cross referencing epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210430174100_g_project_management_epic_cross_referenced_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_cross_referenced_weekly`
-
-Counts of WAU cross referencing epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210430173650_g_project_management_epic_cross_referenced_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_destroyed_monthly`
-
-Count of MAU destroying epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210413174710_g_project_management_epic_destroyed_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_destroyed_weekly`
-
-Count of WAU destroying epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210413174449_g_project_management_epic_destroyed_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_issue_added_monthly`
-
-Count of MAU adding issues to epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210312144719_g_product_planning_epic_issue_added_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_issue_added_weekly`
-
-Count of WAU adding issues to epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210312181918_g_product_planning_epic_issue_added_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_issue_moved_from_project_monthly`
-
-Counts of MAU moving epic issues between projects
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210405190240_g_project_management_epic_issue_moved_from_project_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_issue_moved_from_project_weekly`
-
-Counts of WAU moving epic issues between projects
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210405185814_g_project_management_epic_issue_moved_from_project_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_issue_removed_monthly`
-
-Count of MAU removing issues from epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210401183230_g_project_management_epic_issue_removed_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_issue_removed_weekly`
-
-Counts of WAU removing issues from epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210401182457_g_project_management_g_project_management_epic_issue_removed_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_reopened_monthly`
-
-Counts of MAU closing epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210310164247_g_project_management_epic_reopened_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_reopened_weekly`
-
-Counts of WAU re-opening epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210310164112_g_project_management_epic_reopened_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_users_changing_labels_monthly`
-
-Count of MAU chaging the epic lables
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210312195730_g_project_management_epic_labels_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_epic_users_changing_labels_weekly`
-
-Count of WAU chaging the epic lables
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210312195849_g_project_management_epic_labels_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_issue_promoted_to_epic_monthly`
-
-Count of MAU promoting issues to epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210331193236_g_project_management_issue_promoted_to_epic_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_issue_promoted_to_epic_weekly`
-
-Counts of WAU promoting issues to epics
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210331192332_g_project_management_issue_promoted_to_epic_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_awarding_epic_emoji_monthly`
-
-Counts of MAU awarding emoji on epic
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210503011217_g_project_management_users_awarding_epic_emoji_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_awarding_epic_emoji_weekly`
-
-Counts of WAU awarding emoji on epic
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210503011355_g_project_management_users_awarding_epic_emoji_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_creating_epic_notes_monthly`
-
-Counts of MAU adding epic notes
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210314215451_g_project_management_users_creating_epic_notes_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_creating_epic_notes_weekly`
-
-Counts of WAU adding epic notes
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210314231518_g_project_management_users_creating_epic_notes_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_destroying_epic_notes_monthly`
-
-Counts of MAU destroying epic notes
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210315034808_g_project_management_users_destroying_epic_notes_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_destroying_epic_notes_weekly`
-
-Counts of WAU destroying epic notes
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210315034846_g_project_management_users_destroying_epic_notes_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_epic_issue_added_from_epic_monthly`
-
-Number of users creating an issue from an epic
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210608191652_g_project_management_users_epic_issue_added_from_epic_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_epic_issue_added_from_epic_weekly`
-
-Number of users creating an issue from an epic
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210608191647_g_project_management_users_epic_issue_added_from_epic_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_removing_epic_emoji_monthly`
-
-Counts of MAU removing emoji on epic
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210505071850_g_project_management_users_removing_epic_emoji_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_removing_epic_emoji_weekly`
-
-Counts of WAU removing emoji on epic
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210505071932_g_project_management_users_removing_epic_emoji_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_setting_epic_confidential_monthly`
-
-Count of MAU making epics confidential
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210310203049_g_project_management_epic_confidential_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_setting_epic_confidential_weekly`
-
-Count of WAU making epics confidential
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210310203225_g_project_management_epic_confidential_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_setting_epic_due_date_as_fixed_monthly`
-
-Counts of MAU setting epic due date as inherited
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210325060507_g_project_management_users_setting_epic_due_date_as_fixed_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_setting_epic_due_date_as_fixed_weekly`
-
-Counts of WAU setting epic due date as fixed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210325060623_g_project_management_users_setting_epic_due_date_as_fixed_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_setting_epic_due_date_as_inherited_monthly`
-
-Counts of MAU setting epic due date as inherited
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210325060315_g_project_management_users_setting_epic_due_date_as_inherited_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_setting_epic_due_date_as_inherited_weekly`
-
-Counts of WAU setting epic due date as inherited
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210325060903_g_project_management_users_setting_epic_due_date_as_inherited_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_setting_epic_start_date_as_fixed_monthly`
-
-Counts of MAU setting epic start date as fixed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210315055624_g_project_management_users_setting_epic_start_date_as_fixed_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_setting_epic_start_date_as_fixed_weekly`
-
-Counts of WAU setting epic start date as fixed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210315054905_g_project_management_users_setting_epic_start_date_as_fixed_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_setting_epic_start_date_as_inherited_monthly`
-
-Counts of MAU setting epic start date as inherited
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210315055439_g_project_management_users_setting_epic_start_date_as_inherited_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_setting_epic_start_date_as_inherited_weekly`
-
-Counts of WAU setting epic start date as inherited
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210315055342_g_project_management_users_setting_epic_start_date_as_inherited_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_setting_epic_visible_monthly`
-
-Count of MAU making epics visible
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210312093611_g_project_management_epic_visible_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_setting_epic_visible_weekly`
-
-Count of WAU making epics visible
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210312093243_g_poject_management_epic_visible_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_updating_epic_descriptions_monthly`
-
-Counts of MAU changing epic descriptions
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210312102051_g_project_management_users_updating_epic_descriptions_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_updating_epic_descriptions_weekly`
-
-Counts of WAU changing epic descriptions
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210312101753_g_project_management_users_updating_epic_descriptions_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_updating_epic_notes_monthly`
-
-Counts of MAU updating epic notes
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210314234202_g_project_management_users_updating_epic_notes_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_updating_epic_notes_weekly`
-
-Counts of WAU updating epic notes
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210314234041_g_project_management_users_updating_epic_notes_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_updating_epic_parent_monthly`
-
-Counts of MAU updating parent on epic
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210423011841_g_project_management_users_updating_epic_parent_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_updating_epic_parent_weekly`
-
-Counts of WAU updating parent on epic
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210423012053_g_project_management_users_updating_epic_parent_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_updating_epic_titles_monthly`
-
-Counts of MAU changing epic titles
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210312101935_g_project_management_users_updating_epic_titles_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_updating_epic_titles_weekly`
-
-Counts of WAU changing epic titles
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210312101826_g_project_management_users_updating_epic_titles_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_updating_fixed_epic_due_date_monthly`
-
-Counts of MAU manually updating fixed due date
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210329043548_g_project_management_users_updating_fixed_epic_due_date_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_updating_fixed_epic_due_date_weekly`
-
-Counts of WAU manually updating fixed due date
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210329042536_g_project_management_users_updating_fixed_epic_due_date_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_updating_fixed_epic_start_date_monthly`
-
-Counts of MAU manually updating fixed start date
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210329043509_g_project_management_users_updating_fixed_epic_start_date_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.g_project_management_users_updating_fixed_epic_start_date_weekly`
-
-Counts of WAU manually updating fixed start date
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210329043402_g_project_management_users_updating_fixed_epic_start_date_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.project_management_users_checking_epic_task_monthly`
-
-Counts of MAU checking epic task
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210421080207_g_project_management_users_checking_epic_task_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.project_management_users_checking_epic_task_weekly`
-
-Counts of WAU checking epic task
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210421075943_g_project_management_users_checking_epic_task_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.project_management_users_unchecking_epic_task_monthly`
-
-Counts of MAU unchecking epic task
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210421102516_g_project_management_users_unchecking_epic_task_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.epics_usage.project_management_users_unchecking_epic_task_weekly`
-
-Counts of WAU unchecking epic task
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210421102812_g_project_management_users_unchecking_epic_task_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.ide_edit.g_edit_by_sfe_monthly`
-
-Number of users editing a file from the single file editor
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180334_g_edit_by_sfe_monthly.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ide_edit.g_edit_by_sfe_weekly`
-
-Weekly number of users editing from the single file editor
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180332_g_edit_by_sfe_weekly.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ide_edit.g_edit_by_snippet_ide_monthly`
-
-Count of monthly edits to a snippet
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180338_g_edit_by_snippet_ide_monthly.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ide_edit.g_edit_by_snippet_ide_weekly`
-
-Weekly number of users editing Snippets
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180336_g_edit_by_snippet_ide_weekly.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ide_edit.g_edit_by_sse_monthly`
-
-Number of user editing files using the Static Site Editor
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184024_g_edit_by_sse_monthly.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ide_edit.g_edit_by_sse_weekly`
-
-Weekly number of users editing using the Static Site Editor
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184022_g_edit_by_sse_weekly.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ide_edit.g_edit_by_web_ide_monthly`
-
-Number of users editing a file from the Web IDE
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180330_g_edit_by_web_ide_monthly.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ide_edit.g_edit_by_web_ide_weekly`
-
-Weekly number of users editing using the Web IDE
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180328_g_edit_by_web_ide_weekly.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ide_edit.ide_edit_total_unique_counts_monthly`
-
-Count of unique users per month who edited a file from the Web IDE
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180341_ide_edit_total_unique_counts_monthly.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.ide_edit.ide_edit_total_unique_counts_weekly`
-
-Weekly number of users editing a file using the Web IDE
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180339_ide_edit_total_unique_counts_weekly.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_alert_assigned_monthly`
-
-Count of unique users assigning an alert per month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180533_incident_management_alert_assigned_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_alert_assigned_weekly`
-
-Count of unique users assigning an alert per week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180532_incident_management_alert_assigned_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_alert_status_changed_monthly`
-
-Count of unique users changing alert's status changes per month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180530_incident_management_alert_status_changed_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_alert_status_changed_weekly`
-
-Count of unique users changing alert's status per week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180528_incident_management_alert_status_changed_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_alert_todo_monthly`
-
-Count of unique users adding alerts to the TODO list per month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180537_incident_management_alert_todo_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_alert_todo_weekly`
-
-Count of unique users adding alerts to the TODO list per week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180535_incident_management_alert_todo_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_assigned_monthly`
-
-Count of users assigning incidents per month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180552_incident_management_incident_assigned_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_assigned_weekly`
-
-Count of unique users assiging incidents per week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180550_incident_management_incident_assigned_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_change_confidential_monthly`
-
-Count of users changing incidents to confidential per month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180618_incident_management_incident_change_confidential_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_change_confidential_weekly`
-
-Count of unique users changing incidents to confidential per week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180616_incident_management_incident_change_confidential_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_closed_monthly`
-
-Count of users closing incidents per month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180548_incident_management_incident_closed_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_closed_weekly`
-
-Count of users closing incidents per week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180546_incident_management_incident_closed_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_comment_monthly`
-
-Count of unique users adding comments per month on incidents
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180559_incident_management_incident_comment_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_comment_weekly`
-
-Count of unique users adding comments on incidents per week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180558_incident_management_incident_comment_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_created_monthly`
-
-Count of unique users creating incidents per month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180541_incident_management_incident_created_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_created_weekly`
-
-Count of unique users creating incidents per week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180539_incident_management_incident_created_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_published_monthly`
-
-Count of unique users that published incidents per month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216180607_incident_management_incident_published_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_published_weekly`
-
-Count of unique users that published incidents per week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216180605_incident_management_incident_published_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_relate_monthly`
-
-Count of unique users adding issues per month that are related to an incident
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180611_incident_management_incident_relate_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_relate_weekly`
-
-Count of unique users adding issues per that are related to an incident week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180609_incident_management_incident_relate_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_reopened_monthly`
-
-Count of unique users reopening incidents per month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180545_incident_management_incident_reopened_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_reopened_weekly`
-
-Count of unique users reopening incidents per week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180543_incident_management_incident_reopened_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_todo_monthly`
-
-Count of unique users adding incidents to the TODO list per month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180556_incident_management_incident_todo_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_todo_weekly`
-
-Count of unique users adding incidents to the TODO list per week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180554_incident_management_incident_todo_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_unrelate_monthly`
-
-Count of users removing issues that are related to an incident per month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180614_incident_management_incident_unrelate_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_unrelate_weekly`
-
-Count of unique users removing issue that are related to an incident per week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180612_incident_management_incident_unrelate_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_zoom_meeting_monthly`
-
-Count of users creating Zoom meetings about incidents per month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180603_incident_management_incident_zoom_meeting_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_incident_zoom_meeting_weekly`
-
-Count of unique users creating Zoom meetings about incidents per week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180601_incident_management_incident_zoom_meeting_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_total_unique_counts_monthly`
-
-Count of unique users performing events related with incidents per month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180622_incident_management_total_unique_counts_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management.incident_management_total_unique_counts_weekly`
-
-Count of unique users performing events related to the incident management
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180620_incident_management_total_unique_counts_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management_alerts.incident_management_alert_create_incident_monthly`
-
-Count of unique users per month to create an incident corresponding to an alert
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180625_incident_management_alert_create_incident_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management_alerts.incident_management_alert_create_incident_weekly`
-
-Count of unique users per week to create an incident corresponding to an alert
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180623_incident_management_alert_create_incident_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management_oncall.i_incident_management_oncall_notification_sent_monthly`
-
-Count of unique users to receive a notification while on-call
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210405222005_i_incident_management_oncall_notification_sent_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.incident_management_oncall.i_incident_management_oncall_notification_sent_weekly`
-
-Count of unique users to receive a notification while on-call
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210405220139_i_incident_management_oncall_notification_sent_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_added_to_epic_monthly`
-
-Count of MAU adding an issue to an epic
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181414_g_project_management_issue_added_to_epic_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_added_to_epic_weekly`
-
-Count of WAU adding an issue to an epic
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181413_g_project_management_issue_added_to_epic_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_assignee_changed_monthly`
-
-Count of MAU changing issue assignees
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181311_g_project_management_issue_assignee_changed_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_assignee_changed_weekly`
-
-Count of WAU changing issue assignees
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181310_g_project_management_issue_assignee_changed_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_changed_epic_monthly`
-
-Count of MAU changing the epic on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181420_g_project_management_issue_changed_epic_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_changed_epic_weekly`
-
-Count of WAU changing the epic on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181418_g_project_management_issue_changed_epic_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_cloned_monthly`
-
-Count of MAU cloning an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181501_g_project_management_issue_cloned_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_cloned_weekly`
-
-Count of WAU cloning an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181459_g_project_management_issue_cloned_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_closed_monthly`
-
-Count of MAU closing an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181326_g_project_management_issue_closed_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_closed_weekly`
-
-Count of WAU closing an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181324_g_project_management_issue_closed_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_comment_added_monthly`
-
-Count of MAU commenting on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181446_g_project_management_issue_comment_added_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_comment_added_weekly`
-
-Count of WAU commenting on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181444_g_project_management_issue_comment_added_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_comment_edited_monthly`
-
-Count of MAU editing a comment on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181450_g_project_management_issue_comment_edited_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_comment_edited_weekly`
-
-Count of WAU editing a comment on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181448_g_project_management_issue_comment_edited_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_comment_removed_monthly`
-
-Count of MAU deleting a comment from an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181453_g_project_management_issue_comment_removed_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_comment_removed_weekly`
-
-Count of WAU deleting a comment from an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181451_g_project_management_issue_comment_removed_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_created_monthly`
-
-Count of MAU creating new issues
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181323_g_project_management_issue_created_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_created_weekly`
-
-Count of WAU creating issues
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181321_g_project_management_issue_created_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_cross_referenced_monthly`
-
-Count of MAU referencing an issue from somewhere else
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181348_g_project_management_issue_cross_referenced_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_cross_referenced_weekly`
-
-Count of WAU referencing an issue from somewhere else
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181347_g_project_management_issue_cross_referenced_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_description_changed_monthly`
-
-Count of MAU editing an issue description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181308_g_project_management_issue_description_changed_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_description_changed_weekly`
-
-Count of WAU editing an issue description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181306_g_project_management_issue_description_changed_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_designs_added_monthly`
-
-Count of MAU adding a design to an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181424_g_project_management_issue_designs_added_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_designs_added_weekly`
-
-Count of WAU adding a design to an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181422_g_project_management_issue_designs_added_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_designs_modified_monthly`
-
-Count of MAU modifying a design on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181427_g_project_management_issue_designs_modified_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_designs_modified_weekly`
-
-Count of WAU modifying a design on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181425_g_project_management_issue_designs_modified_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_designs_removed_monthly`
-
-Count of MAU removing a design from an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181431_g_project_management_issue_designs_removed_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_designs_removed_weekly`
-
-Count of WAU removing a design from an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181429_g_project_management_issue_designs_removed_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_due_date_changed_monthly`
-
-Count of MAU changing an issue due date
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181435_g_project_management_issue_due_date_changed_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_due_date_changed_weekly`
-
-Count of WAU changing an issue due date
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181433_g_project_management_issue_due_date_changed_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_health_status_changed_monthly`
-
-Count of MAU changing the health status on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181457_g_project_management_issue_health_status_changed_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_health_status_changed_weekly`
-
-Count of WAU changing the health status on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181455_g_project_management_issue_health_status_changed_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_iteration_changed_monthly`
-
-Count of MAU changing an issue's iteration
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181341_g_project_management_issue_iteration_changed_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_iteration_changed_weekly`
-
-Count of WAU changing an issue's iteration
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181339_g_project_management_issue_iteration_changed_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_label_changed_monthly`
-
-Count of MAU changing an issue's label
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181334_g_project_management_issue_label_changed_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_label_changed_weekly`
-
-Count of WAU changing an issue's label
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181332_g_project_management_issue_label_changed_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_locked_monthly`
-
-Count of MAU locking an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181407_g_project_management_issue_locked_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_locked_weekly`
-
-Count of WAU locking an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181405_g_project_management_issue_locked_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_made_confidential_monthly`
-
-Count of MAU making an issue confidential
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181315_g_project_management_issue_made_confidential_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_made_confidential_weekly`
-
-Count of WAU making an issue confidential
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181313_g_project_management_issue_made_confidential_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_made_visible_monthly`
-
-Count of MAU making an issue not confidential
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181319_g_project_management_issue_made_visible_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_made_visible_weekly`
-
-Count of WAU making an issue not confidential
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181317_g_project_management_issue_made_visible_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_marked_as_duplicate_monthly`
-
-Count of MAU marking an issue as a duplicate
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181403_g_project_management_issue_marked_as_duplicate_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_marked_as_duplicate_weekly`
-
-Count of WAU marking an issue as a duplicate
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181401_g_project_management_issue_marked_as_duplicate_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_milestone_changed_monthly`
-
-Count of MAU changing an issue's milestone
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181337_g_project_management_issue_milestone_changed_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_milestone_changed_weekly`
-
-Count of WAU changing an issue's milestone
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181336_g_project_management_issue_milestone_changed_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_moved_monthly`
-
-Count of MAU moving an issue to another project
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181352_g_project_management_issue_moved_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_moved_weekly`
-
-Count of WAU moving an issue to another project
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181350_g_project_management_issue_moved_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_related_monthly`
-
-Count of MAU relating an issue to another issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181356_g_project_management_issue_related_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_related_weekly`
-
-Count of WAU relating an issue to another issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181354_g_project_management_issue_related_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_removed_from_epic_monthly`
-
-Count of MAU removing an issue from an epic
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181416_g_project_management_issue_removed_from_epic_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_removed_from_epic_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184221_g_project_management_issue_removed_from_epic_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_reopened_monthly`
-
-Count of MAU re-opening a closed issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181330_g_project_management_issue_reopened_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_reopened_weekly`
-
-Count of WAU re-opening a closed issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181328_g_project_management_issue_reopened_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_time_estimate_changed_monthly`
-
-Count of MAU changing an issue time estimate
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181438_g_project_management_issue_time_estimate_changed_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_time_estimate_changed_weekly`
-
-Count of WAU changing an issue time estimate
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181437_g_project_management_issue_time_estimate_changed_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_time_spent_changed_monthly`
-
-Count of MAU recording time spent on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181442_g_project_management_issue_time_spent_changed_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_time_spent_changed_weekly`
-
-Count of WAU recording time spent on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181440_g_project_management_issue_time_spent_changed_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_title_changed_monthly`
-
-Count of MAU editing an issue title
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181304_g_project_management_issue_title_changed_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_title_changed_weekly`
-
-Count of WAU editing an issue title
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210201124931_g_project_management_issue_title_changed_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_unlocked_monthly`
-
-Count of MAU unlocking an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181411_g_project_management_issue_unlocked_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_unlocked_weekly`
-
-Count of WAU unlocking an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181409_g_project_management_issue_unlocked_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_unrelated_monthly`
-
-Count of MAU unrelating an issue to another issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181400_g_project_management_issue_unrelated_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_unrelated_weekly`
-
-Count of WAU unrelating an issue to another issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181358_g_project_management_issue_unrelated_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_weight_changed_monthly`
-
-Count of MAU changing an issue's weight
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181345_g_project_management_issue_weight_changed_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.g_project_management_issue_weight_changed_weekly`
-
-Count of WAU changing an issue's weight
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181343_g_project_management_issue_weight_changed_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.issues_edit_total_unique_counts_monthly`
-
-Aggregate count of MAU taking an action related to an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181504_issues_edit_total_unique_counts_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.issues_edit.issues_edit_total_unique_counts_weekly`
-
-Aggregate count of WAU taking an action related to an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181503_issues_edit_total_unique_counts_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.network_policies.clusters_using_network_policies_ui_monthly`
-
-Monthly number of distinct clusters with network policies using the network policies UI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210623202402_clusters_using_network_policies_ui_monthly.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `implemented`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.network_policies.clusters_using_network_policies_ui_weekly`
-
-Weekly number of distinct clusters with network policies using the network policies UI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210623202358_clusters_using_network_policies_ui_weekly.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `implemented`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.pipeline_authoring.o_pipeline_authoring_unique_users_committing_ciconfigfile_monthly`
-
-Monthly unique user count doing commits which contains the CI config file
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184303_o_pipeline_authoring_unique_users_committing_ciconfigfile_monthly.yml)
-
-Group: `group::pipeline authoring`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.pipeline_authoring.o_pipeline_authoring_unique_users_committing_ciconfigfile_weekly`
-
-Weekly unique user count doing commits which contains the CI config file
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184301_o_pipeline_authoring_unique_users_committing_ciconfigfile_weekly.yml)
-
-Group: `group::pipeline authoring`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.pipeline_authoring.o_pipeline_authoring_unique_users_pushing_mr_ciconfigfile_monthly`
-
-Monthly unique user count having merge requests which contains the CI config file
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210301144228_o_pipeline_authoring_unique_users_pushing_mr_ciconfigfile_monthly.yml)
-
-Group: `group::pipeline authoring`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.pipeline_authoring.o_pipeline_authoring_unique_users_pushing_mr_ciconfigfile_weekly`
-
-Weekly unique user count having merge requests which contains the CI config file
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210301144209_o_pipeline_authoring_unique_users_pushing_mr_ciconfigfile_weekly.yml)
-
-Group: `group::pipeline authoring`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.pipeline_authoring.pipeline_authoring_total_unique_counts_monthly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210427105033_pipeline_authoring_total_unique_counts_monthly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.pipeline_authoring.pipeline_authoring_total_unique_counts_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210427105030_pipeline_authoring_total_unique_counts_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_approve_monthly`
-
-Count of MAU using the `/approve` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181508_i_quickactions_approve_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_approve_weekly`
-
-Count of WAU using the `/approve` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181506_i_quickactions_approve_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_assign_multiple_monthly`
-
-Count of MAU using the `/assign @user1 @user2` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181516_i_quickactions_assign_multiple_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_assign_multiple_weekly`
-
-Count of WAU using the `/assign @user1 @user2` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181514_i_quickactions_assign_multiple_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_assign_reviewer_monthly`
-
-Count of MAU using the `/assign_reviewer` or `request_reviewer` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181523_i_quickactions_assign_reviewer_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_assign_reviewer_weekly`
-
-Count of WAU using the `/assign_reviewer` or `request_reviewer` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181521_i_quickactions_assign_reviewer_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_assign_self_monthly`
-
-Count of MAU using the `/assign me` quick action to assign self to an issuable
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181519_i_quickactions_assign_self_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_assign_self_weekly`
-
-Count of WAU using the `/assign me` quick action to assign self to an issuable
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181517_i_quickactions_assign_self_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_assign_single_monthly`
-
-Count of MAU using the `/assign @user1` quick action to assign a single individual to an issuable
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181512_i_quickactions_assign_single_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_assign_single_weekly`
-
-Count of WAU using the `/assign @user1` quick action to assign a single individual to an issuable
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181510_i_quickactions_assign_single_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_award_monthly`
-
-Count of MAU using the `/award` quick action to set an award emoji on an issuable
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181527_i_quickactions_award_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_award_weekly`
-
-Count of WAU using the `/award` quick action to set an award emoji on an issuable
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181525_i_quickactions_award_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_board_move_monthly`
-
-Count of MAU using the `/board_move` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181530_i_quickactions_board_move_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_board_move_weekly`
-
-Count of WAU using the `/board_move` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181529_i_quickactions_board_move_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_child_epic_monthly`
-
-Count of MAU using the `/child_epic` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181534_i_quickactions_child_epic_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_child_epic_weekly`
-
-Count of WAU using the `/child_epic` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181532_i_quickactions_child_epic_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_clear_weight_monthly`
-
-Count of MAU using the `/clear_weight` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181538_i_quickactions_clear_weight_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_clear_weight_weekly`
-
-Count of WAU using the `/clear_weight` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181536_i_quickactions_clear_weight_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_clone_monthly`
-
-Count of MAU using the `/clone` quick action to clone an issue.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181541_i_quickactions_clone_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_clone_weekly`
-
-Count of WAU using the `/clone` quick action to clone an issue.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181540_i_quickactions_clone_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_close_monthly`
-
-Count of MAU using the `/close` quick action to close an issuable
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181545_i_quickactions_close_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_close_weekly`
-
-Count of WAU using the `/close` quick action to close an issuable
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181543_i_quickactions_close_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_confidential_monthly`
-
-Count of MAU using the `/confidential` quick action to set an issue as confidential
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181549_i_quickactions_confidential_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_confidential_weekly`
-
-Count of WAU using the `/confidential` quick action to set an issue as confidential
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181547_i_quickactions_confidential_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_copy_metadata_issue_monthly`
-
-Count of MAU using the `/copy_metadata` quick action on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181556_i_quickactions_copy_metadata_issue_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_copy_metadata_issue_weekly`
-
-Count of WAU using the `/copy_metadata` quick action on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181554_i_quickactions_copy_metadata_issue_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_copy_metadata_merge_request_monthly`
-
-Count of MAU using the `/copy_metadata` quick action on a Merge Request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181553_i_quickactions_copy_metadata_merge_request_monthly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_copy_metadata_merge_request_weekly`
-
-Count of WAU using the `/copy_metadata` quick action on a Merge Request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181551_i_quickactions_copy_metadata_merge_request_weekly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_create_merge_request_monthly`
-
-Count of MAU using the `/create_merge_request` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181600_i_quickactions_create_merge_request_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_create_merge_request_weekly`
-
-Count of WAU using the `/create_merge_request` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181558_i_quickactions_create_merge_request_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_done_monthly`
-
-Count of MAU using the `/done` quick action to mark a todo as done
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181604_i_quickactions_done_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_done_weekly`
-
-Count of WAU using the `/done` quick action to mark a todo as done
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181602_i_quickactions_done_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_draft_monthly`
-
-Count of MAU using the `/draft` quick action on a Merge Request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181607_i_quickactions_draft_monthly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_draft_weekly`
-
-Count of WAU using the `/draft` quick action on a Merge Request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181605_i_quickactions_draft_weekly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_due_monthly`
-
-Count of MAU using the `/due` quick action to change the due date on an issuable
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181611_i_quickactions_due_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_due_weekly`
-
-Count of WAU using the `/due` quick action to change the due date on an issuable
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181609_i_quickactions_due_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_duplicate_monthly`
-
-Count of MAU using the `/duplicate` quick action to mark an issue as a duplicate of another
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181615_i_quickactions_duplicate_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_duplicate_weekly`
-
-Count of WAU using the `/duplicate` quick action to mark an issue as a duplicate of another
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181613_i_quickactions_duplicate_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_epic_monthly`
-
-Count of MAU using the `/epic` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181618_i_quickactions_epic_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_epic_weekly`
-
-Count of WAU using the `/epic` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181617_i_quickactions_epic_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_estimate_monthly`
-
-Count of MAU using the `/estimate` quick action to set a time estimate on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181622_i_quickactions_estimate_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_estimate_weekly`
-
-Count of WAU using the `/estimate` quick action to set a time estimate on an issue
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181620_i_quickactions_estimate_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_invite_email_multiple_monthly`
-
-Unique users using the /invite_email quick action to add a multiple email participants to an issue within 28 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210222041235_i_quickactions_invite_email_multiple_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_invite_email_multiple_weekly`
-
-Unique users using the /invite_email quick action to add a multiple email participants to an issue within 7 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210303154600_i_quickactions_invite_email_multiple_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_invite_email_single_monthly`
-
-Unique users using the /invite_email quick action to add a single email participant to an issue within 28 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210222041219_i_quickactions_invite_email_single_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_invite_email_single_weekly`
-
-Unique users using the /invite_email quick action to add a single email participant to an issue within 7 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210303154557_i_quickactions_invite_email_single_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_iteration_monthly`
-
-Count of MAU using the `/iteration` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181626_i_quickactions_iteration_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_iteration_weekly`
-
-Count of WAU using the `/iteration` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181624_i_quickactions_iteration_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_label_monthly`
-
-Count of MAU using the `/label` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181629_i_quickactions_label_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_label_weekly`
-
-Count of WAU using the `/label` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181628_i_quickactions_label_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_lock_monthly`
-
-Count of MAU using the `/lock` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181633_i_quickactions_lock_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_lock_weekly`
-
-Count of WAU using the `/lock` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181631_i_quickactions_lock_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_merge_monthly`
-
-Count of MAU using the `/merge` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181637_i_quickactions_merge_monthly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_merge_weekly`
-
-Count of WAU using the `/merge` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181635_i_quickactions_merge_weekly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_milestone_monthly`
-
-Count of MAU using the `/milestone` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181641_i_quickactions_milestone_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_milestone_weekly`
-
-Count of WAU using the `/milestone` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181639_i_quickactions_milestone_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_move_monthly`
-
-Count of MAU using the `/move` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181644_i_quickactions_move_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_move_weekly`
-
-Count of WAU using the `/move` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181642_i_quickactions_move_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_parent_epic_monthly`
-
-Count of MAU using the `/parent_epic` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181648_i_quickactions_parent_epic_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_parent_epic_weekly`
-
-Count of WAU using the `/parent_epic` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181646_i_quickactions_parent_epic_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_promote_monthly`
-
-Count of MAU using the `/promote` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181652_i_quickactions_promote_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_promote_weekly`
-
-Count of WAU using the `/promote` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181650_i_quickactions_promote_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_publish_monthly`
-
-Count of MAU using the `/publish` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181655_i_quickactions_publish_monthly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_publish_weekly`
-
-Count of WAU using the `/publish` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181654_i_quickactions_publish_weekly.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_reassign_monthly`
-
-Count of MAU using the `/reassign @user1` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181659_i_quickactions_reassign_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_reassign_reviewer_monthly`
-
-Count of MAU using the `/reassign_reviewer` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181703_i_quickactions_reassign_reviewer_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_reassign_reviewer_weekly`
-
-Count of WAU using the `/reassign_reviewer` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181701_i_quickactions_reassign_reviewer_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_reassign_weekly`
-
-Count of WAU using the `/reassign @user1` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181657_i_quickactions_reassign_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_rebase_monthly`
-
-Count of MAU using the `/rebase` quick action on a Merge Request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181707_i_quickactions_rebase_monthly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_rebase_weekly`
-
-Count of WAU using the `/rebase` quick action on a Merge Request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181705_i_quickactions_rebase_weekly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_relabel_monthly`
-
-Count of MAU using the `/relabel` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181710_i_quickactions_relabel_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_relabel_weekly`
-
-Count of WAU using the `/relabel` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181708_i_quickactions_relabel_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_relate_monthly`
-
-Count of MAU using the `/relate` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181714_i_quickactions_relate_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_relate_weekly`
-
-Count of WAU using the `/relate` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181712_i_quickactions_relate_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_child_epic_monthly`
-
-Count of MAU using the `/remove_child_epic` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181718_i_quickactions_remove_child_epic_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_child_epic_weekly`
-
-Count of WAU using the `/remove_child_epic` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181716_i_quickactions_remove_child_epic_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_due_date_monthly`
-
-Count of MAU using the `/remove_due_date` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181721_i_quickactions_remove_due_date_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_due_date_weekly`
-
-Count of WAU using the `/remove_due_date` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181719_i_quickactions_remove_due_date_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_epic_monthly`
-
-Count of MAU using the `/remove_epic` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181725_i_quickactions_remove_epic_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_epic_weekly`
-
-Count of WAU using the `/remove_epic` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181723_i_quickactions_remove_epic_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_estimate_monthly`
-
-Count of MAU using the `/remove_estimate` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181729_i_quickactions_remove_estimate_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_estimate_weekly`
-
-Count of WAU using the `/remove_estimate` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181727_i_quickactions_remove_estimate_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_iteration_monthly`
-
-Count of MAU using the `/remove_iteration` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181732_i_quickactions_remove_iteration_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_iteration_weekly`
-
-Count of WAU using the `/remove_iteration` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181731_i_quickactions_remove_iteration_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_milestone_monthly`
-
-Count of MAU using the `/remove_milestone` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181736_i_quickactions_remove_milestone_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_milestone_weekly`
-
-Count of WAU using the `/remove_milestone` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181734_i_quickactions_remove_milestone_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_parent_epic_monthly`
-
-Count of MAU using the `/remove_parent_epic` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181740_i_quickactions_remove_parent_epic_monthly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_parent_epic_weekly`
-
-Count of WAU using the `/remove_parent_epic` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181738_i_quickactions_remove_parent_epic_weekly.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_time_spent_monthly`
-
-Count of MAU using the `/remove_time_spent` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181744_i_quickactions_remove_time_spent_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_time_spent_weekly`
-
-Count of WAU using the `/remove_time_spent` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181742_i_quickactions_remove_time_spent_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_zoom_monthly`
-
-Count of MAU using the `/remove_zoom` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181747_i_quickactions_remove_zoom_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_remove_zoom_weekly`
-
-Count of WAU using the `/remove_zoom` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181745_i_quickactions_remove_zoom_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_reopen_monthly`
-
-Count of MAU using the `/reopen` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181751_i_quickactions_reopen_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_reopen_weekly`
-
-Count of WAU using the `/reopen` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181749_i_quickactions_reopen_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_shrug_monthly`
-
-Count of MAU using the `/shrug` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181755_i_quickactions_shrug_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_shrug_weekly`
-
-Count of WAU using the `/shrug` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181753_i_quickactions_shrug_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_spend_add_monthly`
-
-Count of MAU using the `/spend` quick action to add time spent
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181802_i_quickactions_spend_add_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_spend_add_weekly`
-
-Count of WAU using the `/spend` quick action to add time spent
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181800_i_quickactions_spend_add_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_spend_subtract_monthly`
-
-Count of MAU using the `/spend` quick action to subtract time spent
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181758_i_quickactions_spend_subtract_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_spend_subtract_weekly`
-
-Count of WAU using the `/spend` quick action to subtract time spent
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181756_i_quickactions_spend_subtract_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_submit_review_monthly`
-
-Count of MAU using the `/submit_review` quick action on Merge Requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181806_i_quickactions_submit_review_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_submit_review_weekly`
-
-Count of WAU using the `/submit_review` quick action on Merge Requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181804_i_quickactions_submit_review_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_subscribe_monthly`
-
-Count of MAU using the `/subscribe` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181809_i_quickactions_subscribe_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_subscribe_weekly`
-
-Count of WAU using the `/subscribe` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181808_i_quickactions_subscribe_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_tableflip_monthly`
-
-Count of MAU using the `/tableflip` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181813_i_quickactions_tableflip_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_tableflip_weekly`
-
-Count of WAU using the `/tableflip` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181811_i_quickactions_tableflip_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_tag_monthly`
-
-Count of MAU using the `/tag` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181817_i_quickactions_tag_monthly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_tag_weekly`
-
-Count of WAU using the `/tag` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181815_i_quickactions_tag_weekly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_target_branch_monthly`
-
-Count of MAU using the `/target_branch` quick action on Merge Requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181821_i_quickactions_target_branch_monthly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_target_branch_weekly`
-
-Count of WAU using the `/target_branch` quick action on Merge Requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181819_i_quickactions_target_branch_weekly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_title_monthly`
-
-Count of MAU using the `/title` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181824_i_quickactions_title_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_title_weekly`
-
-Count of WAU using the `/title` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181822_i_quickactions_title_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_todo_monthly`
-
-Count of MAU using the `/todo` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181828_i_quickactions_todo_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_todo_weekly`
-
-Count of WAU using the `/todo` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181826_i_quickactions_todo_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_unassign_all_monthly`
-
-Count of MAU using the `/unassign` quick action on Merge Requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181835_i_quickactions_unassign_all_monthly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_unassign_all_weekly`
-
-Count of WAU using the `/unassign` quick action on Merge Requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181833_i_quickactions_unassign_all_weekly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_unassign_reviewer_monthly`
-
-Count of MAU using the `/unassign_reviewer` or `/remove_reviewer` quick action on Merge Requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181839_i_quickactions_unassign_reviewer_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_unassign_reviewer_weekly`
-
-Count of WAU using the `/unassign_reviewer` or `/remove_reviewer` quick action on Merge Requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181837_i_quickactions_unassign_reviewer_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_unassign_specific_monthly`
-
-Count of MAU using the `/unassign @user1` quick action on Merge Requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181832_i_quickactions_unassign_specific_monthly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_unassign_specific_weekly`
-
-Count of WAU using the `/unassign @user1` quick action on Merge Requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181830_i_quickactions_unassign_specific_weekly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_unlabel_all_monthly`
-
-Count of MAU using the `/unlabel` quick action to remove all labels
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181846_i_quickactions_unlabel_all_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_unlabel_all_weekly`
-
-Count of WAU using the `/unlabel` quick action to remove all labels
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181845_i_quickactions_unlabel_all_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_unlabel_specific_monthly`
-
-Count of MAU using the `/unlabel` or `/remove_label` quick action to remove one or more specific labels
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181843_i_quickactions_unlabel_specific_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_unlabel_specific_weekly`
-
-Count of WAU using the `/unlabel` or `/remove_label` quick action to remove one or more specific labels
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181841_i_quickactions_unlabel_specific_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_unlock_monthly`
-
-Count of MAU using the `/unlock` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181850_i_quickactions_unlock_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_unlock_weekly`
-
-Count of WAU using the `/unlock` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181848_i_quickactions_unlock_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_unsubscribe_monthly`
-
-Count of MAU using the `/unsubscribe` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181854_i_quickactions_unsubscribe_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_unsubscribe_weekly`
-
-Count of WAU using the `/unsubscribe` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181852_i_quickactions_unsubscribe_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_weight_monthly`
-
-Count of MAU using the `/weight` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181857_i_quickactions_weight_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_weight_weekly`
-
-Count of WAU using the `/weight` quick action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216181856_i_quickactions_weight_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_wip_monthly`
-
-Count of MAU using the `/wip` quick action on Merge Requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181901_i_quickactions_wip_monthly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_wip_weekly`
-
-Count of WAU using the `/wip` quick action on Merge Requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181859_i_quickactions_wip_weekly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_zoom_monthly`
-
-Count of MAU using the `/zoom` quick action on Issues
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181905_i_quickactions_zoom_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.i_quickactions_zoom_weekly`
-
-Count of WAU using the `/zoom` quick action on Issues
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216181903_i_quickactions_zoom_weekly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.quickactions_total_unique_counts_monthly`
-
-Count of MAU using one or more quick actions
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184803_quickactions_total_unique_counts_monthly.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.quickactions.quickactions_total_unique_counts_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184801_quickactions_total_unique_counts_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.search.i_search_advanced_monthly`
-
-Calculated unique users to perform Advanced searches by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216180427_i_search_advanced_monthly.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.search.i_search_advanced_weekly`
-
-Calculated unique users to perform Advanced searches by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216180425_i_search_advanced_weekly.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.search.i_search_paid_monthly`
-
-Calculated unique users to perform a search with a paid license enabled by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216184035_i_search_paid_monthly.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.search.i_search_paid_weekly`
-
-Calculated unique users to perform a search with a paid license enabled by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184033_i_search_paid_weekly.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.search.i_search_total_monthly`
-
-Calculated unique users to perform Basic or Advanced searches by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180424_i_search_total_monthly.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.search.i_search_total_weekly`
-
-Calculated unique users to perform Basic or Advanced searches by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180422_i_search_total_weekly.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.search.search_total_unique_counts_monthly`
-
-Total unique users for i_search_total, i_search_advanced, i_search_paid for recent 28 days. This metric is redundant because advanced will be a subset of paid and paid will be a subset of total. i_search_total is more appropriate if you just want the total
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180431_search_total_unique_counts_monthly.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.search.search_total_unique_counts_weekly`
-
-Calculated unique users to perform Basic or Advanced searches by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216180429_search_total_unique_counts_weekly.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.secure.users_expanding_secure_security_report_monthly`
-
-Count of expanding the security report widget
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210409095855_users_expanding_secure_security_report_monthly.yml)
-
-Group: `group::static analysis`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.secure.users_expanding_secure_security_report_weekly`
-
-Count of expanding the security report widget
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210409095855_users_expanding_secure_security_report_weekly.yml)
-
-Group: `group::static analysis`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.snippets.i_snippets_show_monthly`
-
-Monthly number of users viewing snippets
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184255_i_snippets_show_monthly.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.snippets.i_snippets_show_weekly`
-
-Weekly number of users viewing snippets
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184253_i_snippets_show_weekly.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.source_code.design_action_monthly`
-
-Count of total design actions (upload, delete, comment, reply)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216182106_design_action_monthly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.source_code.design_action_weekly`
-
-Count of total design actions (upload, delete, comment, reply)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216182104_design_action_weekly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.source_code.git_write_action_monthly`
-
-Count of unique Git write actions
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184047_git_write_action_monthly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.source_code.git_write_action_weekly`
-
-Count of unique Git write actions
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184045_git_write_action_weekly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.source_code.i_source_code_code_intelligence_monthly`
-
-Count of unique users who use code intelligence
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175117_i_source_code_code_intelligence_monthly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.source_code.i_source_code_code_intelligence_weekly`
-
-Count of unique users who use code intelligence
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175114_i_source_code_code_intelligence_weekly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.source_code.merge_request_action_monthly`
-
-Count of unique users who perform an action on a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175113_merge_request_action_monthly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.source_code.merge_request_action_weekly`
-
-Count of unique users who perform an action on a merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216175111_merge_request_action_weekly.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.source_code.project_action_monthly`
-
-Count of unique actions done on projects and related resources (create, edit, delete, comment)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216182109_project_action_monthly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.source_code.project_action_weekly`
-
-Count of unique actions done on projects and related resources (create, edit, delete, comment)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216182107_project_action_weekly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.source_code.wiki_action_monthly`
-
-Count of unique actions done on a wiki (create, edit, delete)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216182102_wiki_action_monthly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.source_code.wiki_action_weekly`
-
-Count of unique actions done on a wiki (create, edit, delete)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216182100_wiki_action_weekly.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.terraform.p_terraform_state_api_unique_users_monthly`
-
-Monthly active users of GitLab Managed Terraform states
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184259_p_terraform_state_api_unique_users_monthly.yml)
-
-Group: `group::configure`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.terraform.p_terraform_state_api_unique_users_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184257_p_terraform_state_api_unique_users_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `redis_hll_counters.testing.i_testing_full_code_quality_report_total_monthly`
-
-Count of unique users per week|month who visit the full code quality report
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182147_i_testing_full_code_quality_report_total_monthly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_full_code_quality_report_total_weekly`
-
-Count of unique users per week who visit the full code quality report
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216182145_i_testing_full_code_quality_report_total_weekly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_group_code_coverage_project_click_total_monthly`
-
-Aggregated count of unique users who have clicked from group code coverage page to an individual project page each month.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182153_i_testing_group_code_coverage_project_click_total_monthly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_group_code_coverage_project_click_total_weekly`
-
-Aggregated count of unique users who have clicked from group code coverage page to an individual project page each week.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184132_i_testing_group_code_coverage_project_click_total_weekly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_group_code_coverage_visit_total_monthly`
-
-Count of unique users per month who visited the group code coverage page
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182143_i_testing_group_code_coverage_visit_total_monthly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_group_code_coverage_visit_total_weekly`
-
-Count of unique users per week who visited the group code coverage page
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216182141_i_testing_group_code_coverage_visit_total_weekly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_load_performance_widget_total_monthly`
-
-Count of unique users per month who expanded the load performance report MR widget
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182156_i_testing_load_performance_widget_total_monthly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_load_performance_widget_total_weekly`
-
-Count of unique users per week who expanded the load performance report MR widget
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216182154_i_testing_load_performance_widget_total_weekly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_metrics_report_artifact_uploaders_monthly`
-
-Tracks number of metrics reports uploaded monthly.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182200_i_testing_metrics_report_artifact_uploaders_monthly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_metrics_report_artifact_uploaders_weekly`
-
-Count of unique users per week who trigger a pipeline that uploads a metrics report.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216182158_i_testing_metrics_report_artifact_uploaders_weekly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_metrics_report_widget_total_monthly`
-
-Count of unique users per month who expanded the metrics report MR widget
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182139_i_testing_metrics_report_widget_total_monthly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_metrics_report_widget_total_weekly`
-
-Count of unique users per week who expanded the metrics report MR widget
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216182138_i_testing_metrics_report_widget_total_weekly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_summary_widget_total_monthly`
-
-Unique users that expand the test summary merge request widget by month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210413205507_i_testing_summary_widget_total_monthly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_summary_widget_total_weekly`
-
-Unique users that expand the test summary merge request widget by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210413205507_i_testing_summary_widget_total_weekly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_test_case_parsed_monthly`
-
-Internal Tracking to count number of unit tests parsed for planning of future code testing features. Data available [here](https://app.periscopedata.com/app/gitlab/788674/Verify:Testing-Group-Metrics?widget=10454394&udv=0)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216182136_i_testing_test_case_parsed_monthly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_test_case_parsed_weekly`
-
-Internal Tracking to count number of unit tests parsed for planning of future code testing features. Data available [here](https://app.periscopedata.com/app/gitlab/788674/Verify:Testing-Group-Metrics?widget=10454394&udv=0)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216182134_i_testing_test_case_parsed_weekly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_web_performance_widget_total_monthly`
-
-Count of unique users per month who expanded the browser performance report MR widget
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182151_i_testing_web_performance_widget_total_monthly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.testing.i_testing_web_performance_widget_total_weekly`
-
-Count of unique users per week who expanded the browser performance report MR widget
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216182149_i_testing_web_performance_widget_total_weekly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.testing.testing_total_unique_counts_monthly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184140_testing_total_unique_counts_monthly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`
-
-### `redis_hll_counters.testing.testing_total_unique_counts_weekly`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216184138_testing_total_unique_counts_weekly.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `premium`, `ultimate`
-
-### `redis_hll_counters.testing.users_expanding_testing_accessibility_report_monthly`
-
-Count of expanding the accessibility report widget
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210409100628_users_expanding_testing_accessibility_report_monthly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.testing.users_expanding_testing_accessibility_report_weekly`
-
-Count of expanding the accessibility report widget
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210409100628_users_expanding_testing_accessibility_report_weekly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.testing.users_expanding_testing_code_quality_report_monthly`
-
-Count of expanding the code quality widget
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210409100451_users_expanding_testing_code_quality_report_monthly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.testing.users_expanding_testing_code_quality_report_weekly`
-
-Count of expanding the code quality widget
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210409100451_users_expanding_testing_code_quality_report_weekly.yml)
-
-Group: `group::testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_composer_user_monthly`
-
-A monthly count of users that have published a Composer package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184854_i_package_composer_user_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_composer_user_weekly`
-
-A weekly count of users that have published a Composer package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184852_i_package_composer_user_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_conan_user_monthly`
-
-A monthly count of users that have published a Conan package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184858_i_package_conan_user_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_conan_user_weekly`
-
-A weekly count of users that have published a Conan package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184856_i_package_conan_user_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_container_user_monthly`
-
-A monthly count of users that have published a container image to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184902_i_package_container_user_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_container_user_weekly`
-
-A weekly count of users that have published a container image to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184900_i_package_container_user_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_debian_user_monthly`
-
-A monthly count of users that have published a Debian package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184906_i_package_debian_user_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_debian_user_weekly`
-
-A weekly count of users that have published a Debian package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184904_i_package_debian_user_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_generic_user_monthly`
-
-A monthly count of users that have published a generic package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184910_i_package_generic_user_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `broken`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_generic_user_weekly`
-
-A weekly count of users that have published a generic package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184908_i_package_generic_user_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `broken`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_golang_user_monthly`
-
-A monthly count of users that have published a Go moduleto the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184913_i_package_golang_user_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_golang_user_weekly`
-
-A weekly count of users that have published a Go module to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184911_i_package_golang_user_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_helm_user_monthly`
-
-Distinct user count events for Helm packages in recent 28 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210517075259_i_package_helm_user_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_helm_user_weekly`
-
-Distinct user count events for Helm packages in recent 7 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210517075252_i_package_helm_user_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_maven_user_monthly`
-
-A monthly count of users that have published a Maven package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184917_i_package_maven_user_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_maven_user_weekly`
-
-A weekly count of users that have published a Maven package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184916_i_package_maven_user_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_npm_user_monthly`
-
-A monthly count of users that have published an npm package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184921_i_package_npm_user_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_npm_user_weekly`
-
-A weekly count of users that have published an npm package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184919_i_package_npm_user_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_nuget_user_monthly`
-
-A monthly count of users that have published a NuGet package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184925_i_package_nuget_user_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_nuget_user_weekly`
-
-A weekly count of users that have published a NuGet package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184923_i_package_nuget_user_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_pypi_user_monthly`
-
-A monthly count of users that have published a PyPI package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184929_i_package_pypi_user_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_pypi_user_weekly`
-
-A weekly count of users that have published a Python package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184927_i_package_pypi_user_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_rubygems_user_monthly`
-
-Distinct user count of RubyGems packages published in recent 28 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210303154654_i_package_rubygems_user_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_rubygems_user_weekly`
-
-A weekly count of distinct RubyGems packages published by a user
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210303154652_i_package_rubygems_user_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_tag_user_monthly`
-
-A monthly count of users that have published a package tag to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184933_i_package_tag_user_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_tag_user_weekly`
-
-A weekly count of users that have published a package with a tag to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184931_i_package_tag_user_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_terraform_module_user_monthly`
-
-Number of distinct users creating Terraform Module packages in recent 28 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210410012208_i_package_terraform_module_user_monthly.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.i_package_terraform_module_user_weekly`
-
-Number of distinct users creating Terraform Module packages in recent 7 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210410012209_i_package_terraform_module_user_weekly.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.user_packages_total_unique_counts_monthly`
-
-A monthly count of users that have published a package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216184937_user_packages_total_unique_counts_monthly.yml)
-
-Group: `group::package`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `redis_hll_counters.user_packages.user_packages_total_unique_counts_weekly`
-
-A weekly count of users that have published a package to the registry
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_7d/20210216184935_user_packages_total_unique_counts_weekly.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `reply_by_email_enabled`
-
-Whether incoming email is setup
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210204124916_reply_by_email_enabled.yml)
-
-Group: `group::certify`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `search_unique_visits.i_search_advanced`
-
-Calculated unique users to perform Advanced searches by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180418_i_search_advanced.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `search_unique_visits.i_search_paid`
-
-Calculated unique users to perform a search with a paid license enabled by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180420_i_search_paid.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `search_unique_visits.i_search_total`
-
-Calculated unique users to perform Basic or Advanced searches by week
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180416_i_search_total.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `search_unique_visits.search_unique_visits_for_any_target_monthly`
-
-Total unique users for i_search_total, i_search_advanced, i_search_paid for recent 28 days. This metric is redundant because advanced will be a subset of paid and paid will be a subset of total. i_search_total is more appropriate if you just want the total
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183922_search_unique_visits_for_any_target_monthly.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `search_unique_visits.search_unique_visits_for_any_target_weekly`
-
-Total unique users for i_search_total, i_search_advanced, i_search_paid for recent 7 days. This metric is redundant because advanced will be a subset of paid and paid will be a subset of total. i_search_total is more appropriate if you just want the total
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210216183920_search_unique_visits_for_any_target_weekly.yml)
-
-Group: `group::global search`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `settings.collected_data_categories`
-
-List of collected data categories corresponding to instance settings
-
-[Object JSON schema](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/objects_schemas/collected_data_categories_schema.json)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210702140138_collected_data_categories.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Standard`
-
-Status: `implemented`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `settings.gitaly_apdex`
-
-Gitaly application performance
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210321224827_gitaly_apdex.yml)
-
-Group: `group::gitaly`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `settings.ldap_encrypted_secrets_enabled`
-
-Is encrypted LDAP secrets configured?
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210216175606_ldap_encrypted_secrets_enabled.yml)
-
-Group: `group::distribution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `settings.operating_system`
-
-Information about the operating system running GitLab
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210225045628_operating_system.yml)
-
-Group: `group::distribution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `signup_enabled`
-
-Whether public signup is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210204124918_signup_enabled.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `topology`
-
-Topology data
-
-[Object JSON schema](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/objects_schemas/topology_schema.json)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210323120839_topology.yml)
-
-Group: `group::memory`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.clusters_applications_cert_managers`
-
-Total GitLab Managed clusters with GitLab Managed App:Cert Manager installed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175329_clusters_applications_cert_managers.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.clusters_applications_helm`
-
-Total GitLab Managed clusters with GitLab Managed App:Helm enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175331_clusters_applications_helm.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.clusters_applications_ingress`
-
-Total GitLab Managed clusters with GitLab Managed App:Ingress installed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175333_clusters_applications_ingress.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.clusters_applications_knative`
-
-Total GitLab Managed clusters with GitLab Managed App:Knative installed
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175335_clusters_applications_knative.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.clusters_disabled`
-
-Total GitLab Managed disabled clusters
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175339_clusters_disabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.clusters_enabled`
-
-Total GitLab Managed clusters currently enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175341_clusters_enabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.clusters_management_project`
-
-Total GitLab Managed clusters with defined cluster management project
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175337_clusters_management_project.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.clusters_platforms_eks`
-
-Total GitLab Managed clusters provisioned with GitLab on AWS EKS
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175345_clusters_platforms_eks.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.clusters_platforms_gke`
-
-Total GitLab Managed clusters provisioned with GitLab on GCE GKE
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175343_clusters_platforms_gke.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.clusters_platforms_user`
-
-Total GitLab Managed clusters that are user provisioned
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175346_clusters_platforms_user.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.group_clusters_disabled`
-
-Total GitLab Managed disabled clusters attached to groups
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175352_group_clusters_disabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.group_clusters_enabled`
-
-Total GitLab Managed enabled clusters attached to groups
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175354_group_clusters_enabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.instance_clusters_disabled`
-
-Total GitLab Managed disabled clusters attached to the instance
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175348_instance_clusters_disabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.instance_clusters_enabled`
-
-Total GitLab Managed enabled clusters attached to the instance
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175350_instance_clusters_enabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.project_clusters_disabled`
-
-Total GitLab Managed disabled clusters attached to projects
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175356_project_clusters_disabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.project_clusters_enabled`
-
-Total GitLab Managed enabled clusters attached to projects
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175358_project_clusters_enabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.configure.projects_slack_notifications_active`
-
-Unique projects with Slack webhook enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175400_projects_slack_notifications_active.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `usage_activity_by_stage.configure.projects_slack_slash_active`
-
-Unique projects with Slack ‘/’ commands enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175402_projects_slack_slash_active.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `usage_activity_by_stage.configure.projects_with_prometheus_alerts`
-
-Projects with Prometheus alerting enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175403_projects_with_prometheus_alerts.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.approval_project_rules`
-
-Total number of project approval rules
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182030_approval_project_rules.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.approval_project_rules_with_exact_required_approvers`
-
-Number of approval rules with the exact number of required approvers.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216183355_approval_project_rules_with_exact_required_approvers.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.approval_project_rules_with_less_approvers_than_required`
-
-Number of approval rules with fewer approvers than required.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216183354_approval_project_rules_with_less_approvers_than_required.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.approval_project_rules_with_more_approvers_than_required`
-
-Number of approval rules with more approvers than required.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216183352_approval_project_rules_with_more_approvers_than_required.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.approval_project_rules_with_target_branch`
-
-Number of project approval rules scoped to a specific repo branch.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182032_approval_project_rules_with_target_branch.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.deploy_keys`
-
-Count of users creating deploy keys.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182010_deploy_keys.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.keys`
-
-Count of users creating regular keys.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182012_keys.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.merge_requests`
-
-Count of the number of users creating merge requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175045_merge_requests.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.merge_requests_with_added_rules`
-
-Merge requests with added rules
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175047_merge_requests_with_added_rules.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.merge_requests_with_optional_codeowners`
-
-Count of merge requests with optional codeowner approval rules
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175049_merge_requests_with_optional_codeowners.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.merge_requests_with_overridden_project_rules`
-
-Number of merge requests that have overridden rules created at the project level.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216183339_merge_requests_with_overridden_project_rules.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.merge_requests_with_required_codeowners`
-
-Count of merge requests with required codeowner approval rules
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175051_merge_requests_with_required_codeowners.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.projects_enforcing_code_owner_approval`
-
-Count of users creating projects that require approval by code owners for code changes.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182019_projects_enforcing_code_owner_approval.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.projects_imported_from_github`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180630_projects_imported_from_github.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.create.projects_with_disable_overriding_approvers_per_merge_request`
-
-Total count of projects that do not allow overriding approvers on discrete merge requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182014_projects_with_disable_overriding_approvers_per_merge_request.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.projects_with_repositories_enabled`
-
-Count of projects that have a matching Git repository, result of a Git push action
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182023_projects_with_repositories_enabled.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.projects_with_sectional_code_owner_rules`
-
-Count of projects using code owners with code owners section feature
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182021_projects_with_sectional_code_owner_rules.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.projects_without_disable_overriding_approvers_per_merge_request`
-
-Count of total projects that do not disable overriding approvers per discrete merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182015_projects_without_disable_overriding_approvers_per_merge_request.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.protected_branches`
-
-Count of users creating projects with repositories making use of at least one protected branch.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182025_protected_branches.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.remote_mirrors`
-
-Count of users creating projects with remote mirrors.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182017_remote_mirrors.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.snippets`
-
-Count of distinct author_id from snippets
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180316_snippets.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.suggestions`
-
-Count of unique users who create suggestions in merge request comments
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175053_suggestions.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.total_number_of_locked_files`
-
-The total number of files which have been locked via the GitLab UI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182028_total_number_of_locked_files.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.total_number_of_path_locks`
-
-Number of paths/directories manually locked through the UI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182027_total_number_of_path_locks.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.users_using_lfs_locks`
-
-Number of unique users who have locked files or directories using LFS via the command line
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216183346_users_using_lfs_locks.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.create.users_using_path_locks`
-
-Number of users who have manually locked paths/directories through the UI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216183344_users_using_path_locks.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.enablement.counts.geo_node_usage.git_fetch_event_count_weekly`
-
-Number of Git fetch events from Prometheus on the Geo secondary
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210309194425_git_fetch_event_count_weekly.yml)
-
-Group: `group::geo`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.enablement.counts.geo_node_usage.git_push_event_count_weekly`
-
-Number of Git push events from Prometheus on the Geo secondary
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_7d/20210604110603_git_push_event_count_weekly.yml)
-
-Group: `group::geo`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.enablement.geo_secondary_web_oauth_users`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210427212450_geo_secondary_web_oauth_users.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.bulk_imports.gitlab`
-
-Distinct count of users that triggered an import using the Group Migration tool
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180634_gitlab.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.bulk_imports.gitlab_v1`
-
-Count of imports using GitLab Migration
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180636_gitlab_v1.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.compliance_frameworks_with_pipeline`
-
-Count of compliance frameworks that have a pipeline configuration
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210622123800_compliance_frameworks_with_pipeline.yml)
-
-Group: `compliance`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.manage.custom_compliance_frameworks`
-
-Total count of all custom compliance framework labels
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210430081610_custom_compliance_frameworks.yml)
-
-Group: `compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.events`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180754_events.yml)
-
-Group: `group::manage`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.group_imports.gitlab_migration`
-
-Count of groups imported using GitLab Migration
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180703_gitlab_migration.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.group_imports.group_import`
-
-Count of group imports using Group Import/Export
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180702_group_import.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.group_saml_enabled`
-
-Has the instance enabled Group SAML SSO `https://docs.gitlab.com/ee/user/group/saml_sso/` on at least 1 group?
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/settings/20210216180813_group_saml_enabled.yml)
-
-Group: `group::manage`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`
-
-### `usage_activity_by_stage.manage.groups`
-
-Number of users who are group members.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180756_groups.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.groups_imported`
-
-Distinct count of users that imported groups using Group Import
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180729_groups_imported.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.issue_imports.csv`
-
-Count of (attempted) imports from csv files
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180700_csv.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.issue_imports.fogbugz`
-
-Count of projects imported from fogbugz
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180656_fogbugz.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.issue_imports.jira`
-
-Count of projects imported from Jira
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180654_jira.yml)
-
-Group: `group::import`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.issue_imports.phabricator`
-
-Count of projects imported from phabricator
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180658_phabricator.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.issues_imported.csv`
-
-Distinct count of users that imported issues into projects using CSV upload
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180727_csv.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.issues_imported.fogbugz`
-
-Distinct count of users that imported issues into projects using FogBugz
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180724_fogbugz.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.issues_imported.jira`
-
-Distinct count of users that imported issues into projects using Jira
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180722_jira.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.issues_imported.phabricator`
-
-Distinct count of users that imported issues into projects using Phabricator
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180726_phabricator.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.ldap_admin_sync_enabled`
-
-Has the instance configured [LDAP Admin Sync](https://docs.gitlab.com/ee/administration/auth/ldap/#administrator-sync)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/settings/20210216180811_ldap_admin_sync_enabled.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.ldap_group_sync_enabled`
-
-Has the instance configured [LDAP Group Sync](https://docs.gitlab.com/ee/administration/auth/ldap/#group-sync)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/settings/20210216180809_ldap_group_sync_enabled.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.ldap_keys`
-
-Number of users creating keys synced as part of LDAP
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180800_ldap_keys.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.ldap_servers`
-
-Number of [LDAP servers configured for the instance](https://docs.gitlab.com/ee/administration/auth/ldap/#multiple-ldap-servers)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180807_ldap_servers.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.ldap_users`
-
-Number of users that are linked to LDAP
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180801_ldap_users.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.omniauth_providers`
-
-Number of unique user logins using an OmniAuth provider
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183400_omniauth_providers.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.project_imports.bitbucket`
-
-Count of projects imported from Bitbucket
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180643_bitbucket.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.project_imports.bitbucket_server`
-
-Count of projects imported from Bitbucket Server
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180645_bitbucket_server.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.project_imports.git`
-
-Count of projects imported by URL
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180649_git.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.project_imports.gitea`
-
-Count of projects imported from Gitea
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180647_gitea.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.project_imports.github`
-
-Count of projects imported from GitHub
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180641_github.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.project_imports.gitlab`
-
-Count of projects imported from GitLab.com
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180639_gitlab.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.project_imports.gitlab_migration`
-
-Count of projects imported using GitLab Migration
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180652_gitlab_migration.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.project_imports.gitlab_project`
-
-Count of projects imported using Project Import/Export
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180638_gitlab_project.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.project_imports.manifest`
-
-Count of projects imported using manifst file
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180650_manifest.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.project_imports.total`
-
-Count number of projects imported monthly
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210514141520_project_imports_total.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.projects_imported.bitbucket`
-
-Distinct count of users that imported projects from Bitbucket Cloud
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180713_bitbucket.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.projects_imported.bitbucket_server`
-
-Distinct count of users that imported projects from Bitbucket Server
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180715_bitbucket_server.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.projects_imported.git`
-
-Distinct count of users that imported projects using Import by URL
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180718_git.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.projects_imported.gitea`
-
-Distinct count of users that imported projects from Gitea
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180716_gitea.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.projects_imported.github`
-
-Distinct count of users that imported projects from GitHub
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180711_github.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.projects_imported.gitlab`
-
-Distinct count of users that imported projects from GitLab.com
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180709_gitlab.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.projects_imported.gitlab_project`
-
-Distinct count of users that imported projects using Project Import/Export
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180707_gitlab_project.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.projects_imported.manifest`
-
-Distinct count of users that imported projects using Manifest file
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180720_manifest.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.projects_imported.total`
-
-Total count of all projects imported with import_source NOT NULL
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180705_total.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.projects_with_compliance_framework`
-
-Number of projects labeled with a compliance framework label [see](https://gitlab.com/gitlab-org/gitlab/-/issues/118671)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180805_projects_with_compliance_framework.yml)
-
-Group: `group::manage`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `usage_activity_by_stage.manage.unique_users_all_imports`
-
-Distinct count of users that triggered any kind of import
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180632_unique_users_all_imports.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.manage.user_auth_by_provider.google_oauth2`
-
-Number of unique user logins using Google OAuth authentication
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183410_google_oauth2.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.user_auth_by_provider.standard`
-
-Number of unique user logins using password authentication
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183408_standard.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.user_auth_by_provider.two-factor`
-
-Number of unique user logins using two factor authentication
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183402_two-factor.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.user_auth_by_provider.two-factor-via-u2f-device`
-
-Number of unique user logins using two factor via a U2F device
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183404_two-factor-via-u2f-device.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.user_auth_by_provider.two-factor-via-webauthn-device`
-
-Number of unique user logins using two factor via a WebAuthn device
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183406_two-factor-via-webauthn-device.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.users_created`
-
-Number of users
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180758_users_created.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.manage.value_stream_management_customized_group_stages`
-
-Number of custom value stream analytics stages.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180803_value_stream_management_customized_group_stages.yml)
-
-Group: `group::optimize`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.monitor.clusters`
-
-Users creating clusters.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180945_clusters.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.monitor.clusters_applications_prometheus`
-
-Users creating clusters with Prometheus enabled.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180947_clusters_applications_prometheus.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.monitor.operations_dashboard_default_dashboard`
-
-Active users with enabled operations dashboard
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180949_operations_dashboard_default_dashboard.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`
-
-### `usage_activity_by_stage.monitor.operations_dashboard_users_with_projects_added`
-
-Active users with projects on operations dashboard
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180953_operations_dashboard_users_with_projects_added.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.monitor.projects_incident_sla_enabled`
-
-Projects where Incident SLA is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180522_projects_incident_sla_enabled.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.monitor.projects_with_alert_incidents`
-
-Count of unique projects with an incident from an alert
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180520_projects_with_alert_incidents.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.monitor.projects_with_enabled_alert_integrations_histogram`
-
-Histogram (buckets 1 to 100) of projects with at least 1 enabled integration.
-
-[Object JSON schema](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/objects_schemas/projects_with_enabled_alert_integrations_histogram.json)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210309165717_projects_with_enabled_alert_integrations_histogram.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.monitor.projects_with_error_tracking_enabled`
-
-Projects where error tracking is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180517_projects_with_error_tracking_enabled.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.monitor.projects_with_incidents`
-
-Count of unique projects with an incident
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180518_projects_with_incidents.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.monitor.projects_with_tracing_enabled`
-
-Projects with tracing enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180951_projects_with_tracing_enabled.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.package.projects_with_packages`
-
-Projects with package registry enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181055_projects_with_packages.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.plan.assignee_lists`
-
-Count of users creating assignee lists on Boards
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216181132_assignee_lists.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.plan.epics`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181134_epics.yml)
-
-Group: `group::plan`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.plan.issues`
-
-Count of users creating Issues
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181115_issues.yml)
-
-Group: `group::project management`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.plan.label_lists`
-
-Count of users creating label lists on Boards
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181135_label_lists.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.plan.milestone_lists`
-
-Count of users creating milestone lists on Boards
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216181137_milestone_lists.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.plan.notes`
-
-Count of users creating Notes on Issues
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181117_notes.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.plan.projects`
-
-Count of users creating projects
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181119_projects.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.plan.projects_jira_active`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181126_projects_jira_active.yml)
-
-Group: `group::plan`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.plan.projects_jira_dvcs_cloud_active`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181128_projects_jira_dvcs_cloud_active.yml)
-
-Group: `group::plan`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.plan.projects_jira_dvcs_server_active`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181130_projects_jira_dvcs_server_active.yml)
-
-Group: `group::plan`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.plan.service_desk_enabled_projects`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181122_service_desk_enabled_projects.yml)
-
-Group: `group::plan`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.plan.service_desk_issues`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181124_service_desk_issues.yml)
-
-Group: `group::plan`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.plan.todos`
-
-Count of users todos created
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181121_todos.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.release.deployments`
-
-Unique users triggering deployments
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181926_deployments.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.release.failed_deployments`
-
-Total failed deployments
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181928_failed_deployments.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.release.projects_mirrored_with_pipelines_enabled`
-
-Count creator_id from projects with repository mirroring enabled.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216181934_projects_mirrored_with_pipelines_enabled.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage.release.releases`
-
-Unique users creating release tags
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181930_releases.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.release.successful_deployments`
-
-Total successful deployments
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181932_successful_deployments.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.secure.api_fuzzing_scans`
-
-Counts API fuzzing jobs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180353_api_fuzzing_scans.yml)
-
-Group: `group::fuzz testing`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers:
-
-### `usage_activity_by_stage.secure.cluster_image_scanning_scans`
-
-Counts cluster image scanning jobs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210618124854_cluster_image_scanning_scans.yml)
-
-Group: `group::container security`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.container_scanning_scans`
-
-Counts container scanning jobs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175503_container_scanning_scans.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.coverage_fuzzing_scans`
-
-Counts fuzzing jobs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216180352_coverage_fuzzing_scans.yml)
-
-Group: `group::fuzz testing`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers:
-
-### `usage_activity_by_stage.secure.dast_scans`
-
-Counts dast jobs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182122_dast_scans.yml)
-
-Group: `group::dynamic analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.dependency_scanning_scans`
-
-Total number of users running Dependency Scanning Scans
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175220_dependency_scanning_scans.yml)
-
-Group: `group::composition analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.sast_scans`
-
-Counts sast jobs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182120_sast_scans.yml)
-
-Group: `group::static analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.secret_detection_scans`
-
-counts secret detection jobs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182123_secret_detection_scans.yml)
-
-Group: `group::static analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.user_api_fuzzing_dnd_jobs`
-
-Count of API Fuzzing `docker-in-docker` jobs by job name
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180350_user_api_fuzzing_dnd_jobs.yml)
-
-Group: `group::fuzz testing`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.secure.user_api_fuzzing_jobs`
-
-Count of API Fuzzing jobs by job name
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216180348_user_api_fuzzing_jobs.yml)
-
-Group: `group::fuzz testing`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.secure.user_api_fuzzing_scans`
-
-Number of users who have run a API Fuzzing scan
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210607044126_user_api_fuzzing_scans.yml)
-
-Group: `category::fuzz testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.user_container_scanning_jobs`
-
-Distinct count per user of Container Scanning jobs run
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175501_user_container_scanning_jobs.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.user_container_scanning_scans`
-
-Number of users who have run a Container Scanning scan
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210607043902_user_container_scanning_scans.yml)
-
-Group: `group::composition analysis`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.user_coverage_fuzzing_jobs`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216183514_user_coverage_fuzzing_jobs.yml)
-
-Group: ``
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.secure.user_coverage_fuzzing_scans`
-
-Number of users who have run a Coverage Fuzzing scan
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210607044040_user_coverage_fuzzing_scans.yml)
-
-Group: `category::fuzz testing`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.user_dast_jobs`
-
-Count of DAST jobs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175614_user_dast_jobs.yml)
-
-Group: `group::dynamic analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.secure.user_dast_scans`
-
-Number of users who have run a DAST scan
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210607043109_user_dast_scans.yml)
-
-Group: `group::dynamic analysis`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.user_dependency_scanning_jobs`
-
-Total number of users running Dependency Scanning jobs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175216_user_dependency_scanning_jobs.yml)
-
-Group: `group::composition analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.user_dependency_scanning_scans`
-
-Number of users who have run a Dependency Scanning scan
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210607043819_user_dependency_scanning_scans.yml)
-
-Group: `group::composition analysis`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.user_license_management_jobs`
-
-Total number of users running License Scanning jobs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175218_user_license_management_jobs.yml)
-
-Group: `group::composition analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.user_preferences_group_overview_security_dashboard`
-
-Users who set personal preference to see Details on Group information page
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216182207_user_preferences_group_overview_security_dashboard.yml)
-
-Group: `group::threat insights`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.user_sast_jobs`
-
-Count of SAST jobs per user
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182116_user_sast_jobs.yml)
-
-Group: `group::static analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.secure.user_sast_scans`
-
-Number of users who have run a SAST scan
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210607043741_user_sast_scans.yml)
-
-Group: `group::static analysis`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.user_secret_detection_jobs`
-
-Count of Secret Detection Jobs per user
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216182118_user_secret_detection_jobs.yml)
-
-Group: `group::static analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.secure.user_secret_detection_scans`
-
-Number of users who have run a Secret Detection scan
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210607043957_user_secret_detection_scans.yml)
-
-Group: `group::static analysis`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage.secure.user_unique_users_all_secure_scanners`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181954_user_unique_users_all_secure_scanners.yml)
-
-Group: `group::secure`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage.verify.ci_builds`
-
-Unique count of builds in project
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175525_ci_builds.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.verify.ci_external_pipelines`
-
-Total pipelines in external repositories
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175527_ci_external_pipelines.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.verify.ci_internal_pipelines`
-
-Total pipelines in GitLab repositories
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175529_ci_internal_pipelines.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.verify.ci_pipeline_config_auto_devops`
-
-Total pipelines from an Auto DevOps template
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175531_ci_pipeline_config_auto_devops.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.verify.ci_pipeline_config_repository`
-
-Total Pipelines from templates in repository
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175533_ci_pipeline_config_repository.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.verify.ci_pipeline_schedules`
-
-Pipeline schedules in GitLab
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175535_ci_pipeline_schedules.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.verify.ci_pipelines`
-
-Distinct Users triggering Total pipelines
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175537_ci_pipelines.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.verify.ci_triggers`
-
-Total configured Triggers in project
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216175539_ci_triggers.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.verify.clusters_applications_runner`
-
-Count of users creating managed clusters with Runner enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_all/20210216181949_clusters_applications_runner.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage.verify.projects_reporting_ci_cd_back_to_github`
-
-Projects with a GitHub service pipeline enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216175540_projects_reporting_ci_cd_back_to_github.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.clusters_applications_cert_managers`
-
-Total GitLab Managed clusters with Cert Manager enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175405_clusters_applications_cert_managers.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.clusters_applications_helm`
-
-Total GitLab Managed clusters with Helm enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175407_clusters_applications_helm.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.clusters_applications_ingress`
-
-Total GitLab Managed clusters with Ingress enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175409_clusters_applications_ingress.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.clusters_applications_knative`
-
-Total GitLab Managed clusters with Knative enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175411_clusters_applications_knative.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.clusters_disabled`
-
-Total GitLab Managed disabled clusters
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175415_clusters_disabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.clusters_enabled`
-
-Total GitLab Managed clusters currently enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175417_clusters_enabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.clusters_management_project`
-
-Number of Kubernetes clusters with clusters management project being set
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175413_clusters_management_project.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.clusters_platforms_eks`
-
-Total GitLab Managed clusters provisioned with GitLab on AWS EKS
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175420_clusters_platforms_eks.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.clusters_platforms_gke`
-
-Total GitLab Managed clusters provisioned with GitLab on GCE GKE
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175419_clusters_platforms_gke.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.clusters_platforms_user`
-
-Total GitLab Managed clusters that are user provisioned
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175422_clusters_platforms_user.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.group_clusters_disabled`
-
-Total GitLab Managed disabled clusters attached to groups
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175428_group_clusters_disabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.group_clusters_enabled`
-
-Total GitLab Managed enabled clusters attached to groups
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175430_group_clusters_enabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.instance_clusters_disabled`
-
-Total GitLab Managed disabled clusters attached to the instance
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175424_instance_clusters_disabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.instance_clusters_enabled`
-
-Total GitLab Managed enabled clusters attached to the instance
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175426_instance_clusters_enabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.project_clusters_disabled`
-
-Total GitLab Managed disabled clusters attached to projects
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175432_project_clusters_disabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.project_clusters_enabled`
-
-Total GitLab Managed enabled clusters attached to projects
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175434_project_clusters_enabled.yml)
-
-Group: `group::configure`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.projects_slack_notifications_active`
-
-Unique projects created in the past 28 days that have Slack notifications enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216175436_projects_slack_notifications_active.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.projects_slack_slash_active`
-
-Unique projects created in the past 28 days that have Slack ‘/’ commands enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216175437_projects_slack_slash_active.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.configure.projects_with_prometheus_alerts`
-
-Projects with Prometheus alerting enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180955_projects_with_prometheus_alerts.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `removed`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.action_monthly_active_users_design_management`
-
-Monthly active users for design management
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180745_action_monthly_active_users_design_management.yml)
-
-Group: `group::product planning`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.action_monthly_active_users_git_write`
-
-Aggregated value for wiki, design, and project repo Git write actions
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216182041_action_monthly_active_users_git_write.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.action_monthly_active_users_ide_edit`
-
-Number of unique users per month who edited a file from any web editor
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180327_action_monthly_active_users_ide_edit.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.action_monthly_active_users_project_repo`
-
-Count of monthly active users who have performed any Git operation (read/write/push)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216182040_action_monthly_active_users_project_repo.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.action_monthly_active_users_sfe_edit`
-
-Number of users using single file editor
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180321_action_monthly_active_users_sfe_edit.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.action_monthly_active_users_snippet_editor_edit`
-
-Number of users using the snippet editor
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180323_action_monthly_active_users_snippet_editor_edit.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.action_monthly_active_users_sse_edit`
-
-Number of users using the static site editor
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180325_action_monthly_active_users_sse_edit.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.action_monthly_active_users_web_ide_edit`
-
-Number of users editing using web IDE
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180319_action_monthly_active_users_web_ide_edit.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.action_monthly_active_users_wiki_repo`
-
-Unique monthly active users of the Wiki
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180747_action_monthly_active_users_wiki_repo.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.approval_project_rules`
-
-Total number of project approval rules
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182056_approval_project_rules.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.approval_project_rules_with_exact_required_approvers`
-
-Number of approval rules with the exact number of required approvers.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216183622_approval_project_rules_with_exact_required_approvers.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.approval_project_rules_with_less_approvers_than_required`
-
-Number of approval rules with fewer approvers than required.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216183620_approval_project_rules_with_less_approvers_than_required.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.approval_project_rules_with_more_approvers_than_required`
-
-Number of approval rules with more approvers than required.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216183618_approval_project_rules_with_more_approvers_than_required.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.approval_project_rules_with_target_branch`
-
-Number of project approval rules scoped to a specific repo branch.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182058_approval_project_rules_with_target_branch.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.deploy_keys`
-
-Count of users creating deploy keys in last 28 days.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216182034_deploy_keys.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.keys`
-
-Count of users creating regular keys in last 28 days.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216182036_keys.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.merge_requests`
-
-Count of the number of users creating merge requests
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175055_merge_requests.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.merge_requests_users`
-
-Monthly count of the number of merge request users
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175101_merge_requests_users.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.merge_requests_with_added_rules`
-
-Merge requests with added rules
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216175103_merge_requests_with_added_rules.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.merge_requests_with_optional_codeowners`
-
-Count of merge requests with optional codeowner approval rules
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216175105_merge_requests_with_optional_codeowners.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.merge_requests_with_overridden_project_rules`
-
-Number of merge requests which have overriden rules created at the project level
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182047_merge_requests_with_overridden_project_rules.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.merge_requests_with_required_codeowners`
-
-Count of merge requests with required codeowner approval rules
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216175107_merge_requests_with_required_codeowners.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.projects_enforcing_code_owner_approval`
-
-Count of total projects that require approval by code owners for code changes
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182043_projects_enforcing_code_owner_approval.yml)
-
-Group: `group::source code`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.projects_imported_from_github`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180731_projects_imported_from_github.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.create.projects_with_disable_overriding_approvers_per_merge_request`
-
-Count of the number of projects with setting to disable overriding approvers per merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175057_projects_with_disable_overriding_approvers_per_merge_request.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.projects_with_repositories_enabled`
-
-Count of users creating projects that have a matching Git repository, result of a Git push action, for last 28 days.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182049_projects_with_repositories_enabled.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.projects_with_sectional_code_owner_rules`
-
-Count of projects using code owners with code owners section feature
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182045_projects_with_sectional_code_owner_rules.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.projects_without_disable_overriding_approvers_per_merge_request`
-
-Count of the number of projects without setting to disable overriding approvers per merge request
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175059_projects_without_disable_overriding_approvers_per_merge_request.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.protected_branches`
-
-Count of users creating projects with repositories making use of at least one protected branch in last 28 days.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216182051_protected_branches.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.remote_mirrors`
-
-Count of users creating projects with remote mirrors. Includes both push and pull mirrors.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216182038_remote_mirrors.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.snippets`
-
-Count of distinct author_id from snippets for last 28 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180317_snippets.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.suggestions`
-
-Count of unique users per month who create suggestions in merge request comments
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175109_suggestions.yml)
-
-Group: `group::code review`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.total_number_of_locked_files`
-
-The total number of files which have been locked via the GitLab UI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216183614_total_number_of_locked_files.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.total_number_of_path_locks`
-
-Number of paths/directories manually locked through the UI
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216183613_total_number_of_path_locks.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.users_using_lfs_locks`
-
-Number of unique users who have locked files or directories using LFS via the command line
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182054_users_using_lfs_locks.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.create.users_using_path_locks`
-
-Number of users creating path_locks in last 28 days.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182053_users_using_path_locks.yml)
-
-Group: `group::source code`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.enablement.geo_secondary_web_oauth_users`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210427213346_geo_secondary_web_oauth_users.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.bulk_imports.gitlab`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183640_gitlab.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.bulk_imports.gitlab_v1`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183642_gitlab_v1.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.compliance_frameworks_with_pipeline`
-
-Count of compliance frameworks that have a pipeline configuration
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210622091519_compliance_frameworks_with_pipeline.yml)
-
-Group: `compliance`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.custom_compliance_frameworks`
-
-Monthly count of all custom compliance framework labels
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210507165054_custom_compliance_frameworks.yml)
-
-Group: `compliance`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.events`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180814_events.yml)
-
-Group: `group::manage`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.group_imports.gitlab_migration`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183711_gitlab_migration.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.group_imports.group_import`
-
-Number of group import states
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183709_group_import.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.group_saml_enabled`
-
-Whether group SAML is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/settings/20210216180833_group_saml_enabled.yml)
-
-Group: `group:access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.groups`
-
-Number of users who are group members for last 28 days
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180816_groups.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.groups_imported`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183737_groups_imported.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.issue_imports.csv`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183707_csv.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.issue_imports.fogbugz`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183703_fogbugz.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.issue_imports.jira`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183701_jira.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.issue_imports.phabricator`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183705_phabricator.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.issues_imported.csv`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183735_csv.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.issues_imported.fogbugz`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183731_fogbugz.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.issues_imported.jira`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183730_jira.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.issues_imported.phabricator`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183733_phabricator.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.ldap_admin_sync_enabled`
-
-Whether LDAP admin sync is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/settings/20210216180831_ldap_admin_sync_enabled.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.ldap_group_sync_enabled`
-
-Has the instance configured [LDAP Group Sync](https://docs.gitlab.com/ee/administration/auth/ldap/#group-sync)
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/settings/20210216180829_ldap_group_sync_enabled.yml)
-
-Group: `group::acess`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.ldap_keys`
-
-Number of users creating keys synced as part of LDAP for last 28 days.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216180820_ldap_keys.yml)
-
-Group: `group::acess`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.ldap_servers`
-
-Number of LDAP servers configured
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216180827_ldap_servers.yml)
-
-Group: `group::manage`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.ldap_users`
-
-Number of users that are linked to LDAP
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216180822_ldap_users.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.omniauth_providers`
-
-Number of unique user logins using an OmniAuth provider
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183627_omniauth_providers.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.project_imports.bitbucket`
-
-Count of projects imported from Bitbucket
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183650_bitbucket.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.project_imports.bitbucket_server`
-
-Count of projects imported from Bitbucket Server
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183652_bitbucket_server.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.project_imports.git`
-
-Count of projects imported from Git
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183655_git.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.project_imports.gitea`
-
-Count of projects imported from Gitea
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183653_gitea.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.project_imports.github`
-
-Count of projects imported from GitHub
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183648_github.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.project_imports.gitlab`
-
-Count of projects imported from GitLab using Project Export/Import
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183646_gitlab.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.project_imports.gitlab_migration`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183659_gitlab_migration.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.project_imports.gitlab_project`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183644_gitlab_project.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.project_imports.manifest`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183657_manifest.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.project_imports.total`
-
-Total count of projects imported
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210520111133_total.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.projects_imported.bitbucket`
-
-Count of projects imported from Bitbucket
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183720_bitbucket.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.projects_imported.bitbucket_server`
-
-Count of projects imported from Bitbucket Server
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183722_bitbucket_server.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.projects_imported.git`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183726_git.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.projects_imported.gitea`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183724_gitea.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.projects_imported.github`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183718_github.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.projects_imported.gitlab`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183716_gitlab.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.projects_imported.gitlab_project`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183714_gitlab_project.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.projects_imported.manifest`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183728_manifest.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.projects_imported.total`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183712_total.yml)
-
-Group: ``
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.manage.projects_with_compliance_framework`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216180825_projects_with_compliance_framework.yml)
-
-Group: `group::manage`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers:
-
-### `usage_activity_by_stage_monthly.manage.unique_users_all_imports`
-
-Number of users from projects imported
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183638_unique_users_all_imports.yml)
-
-Group: `group::import`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.user_auth_by_provider.google_oauth2`
-
-Number of unique user logins using Google OAuth authentication
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183636_google_oauth2.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.user_auth_by_provider.standard`
-
-Number of unique user logins using password authentication
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183634_standard.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.user_auth_by_provider.two-factor`
-
-Number of unique user logins using two factor authentication
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183629_two-factor.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.user_auth_by_provider.two-factor-via-u2f-device`
-
-Number of unique user logins using two factor via a U2F device
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183631_two-factor-via-u2f-device.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.user_auth_by_provider.two-factor-via-webauthn-device`
-
-Number of unique user logins using two factor via a WebAuthn device
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183633_two-factor-via-webauthn-device.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.users_created`
-
-Number of users created in the month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180818_users_created.yml)
-
-Group: `group::access`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.manage.value_stream_management_customized_group_stages`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216180824_value_stream_management_customized_group_stages.yml)
-
-Group: `group::manage`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.monitor.clusters`
-
-Count users creating clusters in last 28 days.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180956_clusters.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.monitor.clusters_applications_prometheus`
-
-Users creating clusters with Prometheus enabled in last 28 days.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180958_clusters_applications_prometheus.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.monitor.operations_dashboard_default_dashboard`
-
-Active users with enabled operations dashboard
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181000_operations_dashboard_default_dashboard.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.monitor.operations_dashboard_users_with_projects_added`
-
-Active users with projects on operations dashboard
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181006_operations_dashboard_users_with_projects_added.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.monitor.projects_incident_sla_enabled`
-
-Count of projects with Incident SLA enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_all/20210216183753_projects_incident_sla_enabled.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `deprecated`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.monitor.projects_with_alert_incidents`
-
-Count of unique projects with an incident from an alert created in the last month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180526_projects_with_alert_incidents.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.monitor.projects_with_error_tracking_enabled`
-
-Count of users creating projects with error tracking enabled.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181004_projects_with_error_tracking_enabled.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.monitor.projects_with_incidents`
-
-Count of unique projects with an incident created in the last month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180524_projects_with_incidents.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.monitor.projects_with_tracing_enabled`
-
-Projects with tracing enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181002_projects_with_tracing_enabled.yml)
-
-Group: `group::monitor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.package.projects_with_packages`
-
-The total number of projects in a given month with at least one package
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181057_projects_with_packages.yml)
-
-Group: `group::package`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.plan.assignee_lists`
-
-Count of MAU creating assignee lists on Boards
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181156_assignee_lists.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.plan.epics`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181158_epics.yml)
-
-Group: `group::plan`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.plan.issues`
-
-Count of users creating Issues in last 28 days.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181139_issues.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.plan.label_lists`
-
-Count of MAU creating label lists on Boards
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181200_label_lists.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.plan.milestone_lists`
-
-Count of MAU created milestone lists on Boards
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181201_milestone_lists.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.plan.notes`
-
-Count of MAU commenting on an issuable
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181141_notes.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.plan.projects`
-
-Count of MAU creating projects
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181143_projects.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.plan.projects_jira_active`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181150_projects_jira_active.yml)
-
-Group: `group::plan`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.plan.projects_jira_dvcs_cloud_active`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181152_projects_jira_dvcs_cloud_active.yml)
-
-Group: `group::plan`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.plan.projects_jira_dvcs_server_active`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181154_projects_jira_dvcs_server_active.yml)
-
-Group: `group::plan`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.plan.service_desk_enabled_projects`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181147_service_desk_enabled_projects.yml)
-
-Group: `group::plan`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.plan.service_desk_issues`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181148_service_desk_issues.yml)
-
-Group: `group::plan`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.plan.todos`
-
-Count of MAU creating todos
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181145_todos.yml)
-
-Group: `group::project management`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.release.deployments`
-
-Unique users triggering deployments
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181935_deployments.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.release.failed_deployments`
-
-Total failed deployments
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181937_failed_deployments.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.release.projects_mirrored_with_pipelines_enabled`
-
-Count creator_id from projects with repository mirroring enabled.
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216181943_projects_mirrored_with_pipelines_enabled.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.release.releases`
-
-Unique users creating release tags
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181939_releases.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.release.successful_deployments`
-
-Total successful deployments
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181941_successful_deployments.yml)
-
-Group: `group::release`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.secure.api_fuzzing_pipeline`
-
-Counts of Pipelines that have at least 1 API Fuzzing Testing job
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216180401_api_fuzzing_pipeline.yml)
-
-Group: `group::fuzz testing`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.api_fuzzing_scans`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183838_api_fuzzing_scans.yml)
-
-Group: ``
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.secure.cluster_image_scanning_pipeline`
-
-Pipelines containing a Cluster Image Scanning job
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210618125224_cluster_image_scanning_pipeline.yml)
-
-Group: `group::container security`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.cluster_image_scanning_scans`
-
-Counts cluster image scanning jobs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210618101233_cluster_image_scanning_scans.yml)
-
-Group: `group::container security`
-
-Data Category: `Optional`
-
-Status: `implemented`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.container_scanning_pipeline`
-
-Pipelines containing a Container Scanning job
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216175507_container_scanning_pipeline.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.container_scanning_scans`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183830_container_scanning_scans.yml)
-
-Group: ``
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.secure.coverage_fuzzing_pipeline`
-
-Counts of Pipelines that have at least 1 coverage-guided Fuzz Testing job
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216180359_coverage_fuzzing_pipeline.yml)
-
-Group: `group::fuzz testing`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.coverage_fuzzing_scans`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183836_coverage_fuzzing_scans.yml)
-
-Group: ``
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.secure.dast_pipeline`
-
-Count of pipelines that have at least 1 DAST job
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175618_dast_pipeline.yml)
-
-Group: `group::dynamic analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.dast_scans`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183832_dast_scans.yml)
-
-Group: ``
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.secure.dependency_scanning_pipeline`
-
-Count of pipelines with successful Dependency Scanning jobs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216175226_dependency_scanning_pipeline.yml)
-
-Group: `group::composition analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.dependency_scanning_scans`
-
-Monthly number of users running Dependency Scanning Scans
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216183828_dependency_scanning_scans.yml)
-
-Group: `group::composition analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.sast_pipeline`
-
-Counts of Pipelines that have at least 1 SAST job
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216182129_sast_pipeline.yml)
-
-Group: `group::static analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.sast_scans`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183826_sast_scans.yml)
-
-Group: ``
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.secure.secret_detection_pipeline`
-
-Counts of Pipelines that have at least 1 Secret Detection job
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216182131_secret_detection_pipeline.yml)
-
-Group: `group::static analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.secret_detection_scans`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183834_secret_detection_scans.yml)
-
-Group: ``
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.secure.user_api_fuzzing_dnd_jobs`
-
-Count of API Fuzzing `docker-in-docker` jobs by job names
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180357_user_api_fuzzing_dnd_jobs.yml)
-
-Group: `group::fuzz testing`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.secure.user_api_fuzzing_jobs`
-
-Count of API Fuzzing jobs by job name
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216180355_user_api_fuzzing_jobs.yml)
-
-Group: `group::fuzz testing`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.secure.user_api_fuzzing_scans`
-
-Number of users who have run a API Fuzzing scan
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210607043622_user_api_fuzzing_scans.yml)
-
-Group: `category::fuzz testing`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.user_container_scanning_jobs`
-
-Distinct count per user of Container Scanning jobs run monthly
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216175505_user_container_scanning_jobs.yml)
-
-Group: `group::container security`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.user_container_scanning_scans`
-
-Number of users who have run a Container Scanning scan
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210607043336_user_container_scanning_scans.yml)
-
-Group: `group::composition analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.user_coverage_fuzzing_jobs`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216183817_user_coverage_fuzzing_jobs.yml)
-
-Group: ``
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.secure.user_coverage_fuzzing_scans`
-
-Number of users who have run a Coverage Fuzzing scan
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210607043509_user_coverage_fuzzing_scans.yml)
-
-Group: `category::fuzz testing`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.user_dast_jobs`
-
-Users who run a DAST job
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175616_user_dast_jobs.yml)
-
-Group: `group::dynamic analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.secure.user_dast_scans`
-
-Number of users who have run a DAST scan
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210607041718_user_dast_scans.yml)
-
-Group: `group::dynamic analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.user_dependency_scanning_jobs`
-
-Monthly number of users creating Dependency Scanning jobs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216175222_user_dependency_scanning_jobs.yml)
-
-Group: `group::composition analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.user_dependency_scanning_scans`
-
-Number of users who have run a Dependency Scanning scan
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210607043301_user_dependency_scanning_scans.yml)
-
-Group: `group::composition analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.user_license_management_jobs`
-
-Monthly number of users running License Scanning jobs
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216175224_user_license_management_jobs.yml)
-
-Group: `group::composition analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.user_preferences_group_overview_security_dashboard`
-
-Users who set personal preference to see Security Dashboard on Group information page
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216182209_user_preferences_group_overview_security_dashboard.yml)
-
-Group: `group::threat insights`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.user_sast_jobs`
-
-Users who run a SAST job
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216182125_user_sast_jobs.yml)
-
-Group: `group::static analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.user_sast_scans`
-
-Number of users who have run a SAST scan
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210607043218_user_sast_scans.yml)
-
-Group: `group::static analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.user_secret_detection_jobs`
-
-Users who run a Secret Detection job
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216182127_user_secret_detection_jobs.yml)
-
-Group: `group::static analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.user_secret_detection_scans`
-
-Number of users who have run a Secret Detection scan
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210607043410_user_secret_detection_scans.yml)
-
-Group: `group::static analysis`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `ultimate`
-
-### `usage_activity_by_stage_monthly.secure.user_unique_users_all_secure_scanners`
-
-Missing description
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181956_user_unique_users_all_secure_scanners.yml)
-
-Group: `group::secure`
-
-Data Category: `Operational`
-
-Status: `data_available`
-
-Tiers: `free`
-
-### `usage_activity_by_stage_monthly.verify.ci_builds`
-
-Unique monthly builds in project
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175542_ci_builds.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.verify.ci_external_pipelines`
-
-Total pipelines in external repositories in a month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175544_ci_external_pipelines.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.verify.ci_internal_pipelines`
-
-Total pipelines in GitLab repositories in a month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175546_ci_internal_pipelines.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.verify.ci_pipeline_config_auto_devops`
-
-Total pipelines from an Auto DevOps template
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175548_ci_pipeline_config_auto_devops.yml)
-
-Group: `group::configure`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.verify.ci_pipeline_config_repository`
-
-Total Monthly Pipelines from templates in repository
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175550_ci_pipeline_config_repository.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.verify.ci_pipeline_schedules`
-
-Total monthly Pipeline schedules in GitLab
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175552_ci_pipeline_schedules.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.verify.ci_pipelines`
-
-Distinct users triggering pipelines in a month
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175554_ci_pipelines.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`, `free`
-
-### `usage_activity_by_stage_monthly.verify.ci_triggers`
-
-Total configured Triggers in project
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216175556_ci_triggers.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.verify.clusters_applications_runner`
-
-Total GitLab Managed clusters with Runner enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/counts_28d/20210216181951_clusters_applications_runner.yml)
-
-Group: `group::runner`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `usage_activity_by_stage_monthly.verify.projects_reporting_ci_cd_back_to_github`
-
-Projects with a GitHub repository mirror pipeline enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/config/metrics/counts_28d/20210216175558_projects_reporting_ci_cd_back_to_github.yml)
-
-Group: `group::pipeline execution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `premium`, `ultimate`
-
-### `uuid`
-
-GitLab instance unique identifier
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/license/20210201124933_uuid.yml)
-
-Group: `group::product intelligence`
-
-Data Category: `Standard`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `version`
-
-Version of GitLab instance
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/license/20210216175601_version.yml)
-
-Group: `group::distribution`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
-
-### `web_ide_clientside_preview_enabled`
-
-Whether Web IDE clientside preview is enabled
-
-[YAML definition](https://gitlab.com/gitlab-org/gitlab/-/blob/master/config/metrics/settings/20210204124920_web_ide_clientside_preview_enabled.yml)
-
-Group: `group::editor`
-
-Data Category: `Optional`
-
-Status: `data_available`
-
-Tiers: `free`, `premium`, `ultimate`
diff --git a/doc/development/verifying_database_capabilities.md b/doc/development/verifying_database_capabilities.md
index 195e8c5c77e..c5e854701c2 100644
--- a/doc/development/verifying_database_capabilities.md
+++ b/doc/development/verifying_database_capabilities.md
@@ -12,13 +12,13 @@ necessary to add database (version) specific behavior.
To facilitate this we have the following methods that you can use:
-- `Gitlab::Database.version`: returns the PostgreSQL version number as a string
+- `Gitlab::Database.main.version`: returns the PostgreSQL version number as a string
in the format `X.Y.Z`.
This allows you to write code such as:
```ruby
-if Gitlab::Database.version.to_f >= 11.7
+if Gitlab::Database.main.version.to_f >= 11.7
run_really_fast_query
else
run_fast_query
diff --git a/doc/development/what_requires_downtime.md b/doc/development/what_requires_downtime.md
deleted file mode 100644
index abf49d31de2..00000000000
--- a/doc/development/what_requires_downtime.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: 'avoiding_downtime_in_migrations.md'
-remove_date: '2021-07-01'
----
-
-This document was moved to [another location](avoiding_downtime_in_migrations.md).
-
-<!-- This redirect file can be deleted after <2021-07-01>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/gitlab-basics/create-your-ssh-keys.md b/doc/gitlab-basics/create-your-ssh-keys.md
deleted file mode 100644
index 673fb2911fa..00000000000
--- a/doc/gitlab-basics/create-your-ssh-keys.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: '../ssh/index.md'
-remove_date: '2021-07-04'
----
-
-This document was moved to [another location](../ssh/index.md).
-
-<!-- This redirect file can be deleted after <2021-07-04>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page --> \ No newline at end of file
diff --git a/doc/gitlab-basics/start-using-git.md b/doc/gitlab-basics/start-using-git.md
index 9b26e1f102c..dfd1f09e297 100644
--- a/doc/gitlab-basics/start-using-git.md
+++ b/doc/gitlab-basics/start-using-git.md
@@ -450,11 +450,11 @@ You can learn more about the different ways Git can undo changes in the
### Merge a branch with default branch
When you are ready to add your changes to
-the default branch, you `merge` the two together:
+the default branch, you merge the feature branch into it:
```shell
-git checkout <feature-branch>
-git merge <default-branch>
+git checkout <default-branch>
+git merge <feature-branch>
```
In GitLab, you typically use a [merge request](../user/project/merge_requests/) to merge your changes, instead of using the command line.
diff --git a/doc/install/aws/index.md b/doc/install/aws/index.md
index 5abc4bd3122..ca024f685f1 100644
--- a/doc/install/aws/index.md
+++ b/doc/install/aws/index.md
@@ -277,7 +277,7 @@ On the Route 53 dashboard, click **Hosted zones** in the left navigation bar:
1. Click **Create**.
1. If you registered your domain through Route 53, you're done. If you used a different domain registrar, you need to update your DNS records with your domain registrar. You'll need to:
1. Click on **Hosted zones** and select the domain you added above.
- 1. You'll see a list of `NS` records. From your domain registrar's admin panel, add each of these as `NS` records to your domain's DNS records. These steps may vary between domain registrars. If you're stuck, Google **"name of your registrar" add DNS records** and you should find a help article specific to your domain registrar.
+ 1. You'll see a list of `NS` records. From your domain registrar's administrator panel, add each of these as `NS` records to your domain's DNS records. These steps may vary between domain registrars. If you're stuck, Google **"name of your registrar" add DNS records** and you should find a help article specific to your domain registrar.
The steps for doing this vary depending on which registrar you use and is beyond the scope of this guide.
diff --git a/doc/install/azure/index.md b/doc/install/azure/index.md
index 9d9d06b2206..38d423fbcdf 100644
--- a/doc/install/azure/index.md
+++ b/doc/install/azure/index.md
@@ -214,6 +214,14 @@ To set up the GitLab external URL:
sudo gitlab-ctl reconfigure
```
+1. To prevent the domain name from
+ [resetting after a reboot](https://docs.bitnami.com/aws/apps/gitlab/configuration/change-default-address/),
+ rename the utility that Bitnami uses:
+
+ ```shell
+ sudo mv /opt/bitnami/apps/gitlab/bnconfig /opt/bitnami/apps/gitlab/bnconfig.bak
+ ```
+
You can now visit GitLab with your browser at the new external URL.
### Visit GitLab for the first time
diff --git a/doc/install/docker.md b/doc/install/docker.md
index a6bc18bd374..7be97a1f2e6 100644
--- a/doc/install/docker.md
+++ b/doc/install/docker.md
@@ -119,9 +119,16 @@ sudo docker logs -f gitlab
After starting a container you can visit `gitlab.example.com` (or
`http://192.168.59.103` if you used boot2docker on macOS). It might take a while
before the Docker container starts to respond to queries.
-The very first time you visit GitLab, you will be asked to set up the admin
-password. After you change it, you can log in with username `root` and the
-password you set up.
+
+Visit the GitLab URL, and log in with username `root`
+and the password from the following command:
+
+```shell
+sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
+```
+
+NOTE:
+The password file will be automatically deleted in the first reconfigure run after 24 hours.
### Install GitLab using Docker Compose
diff --git a/doc/install/installation.md b/doc/install/installation.md
index 9db8631a6a5..a0587c6ef8a 100644
--- a/doc/install/installation.md
+++ b/doc/install/installation.md
@@ -40,7 +40,7 @@ can't be terminated and its memory usage grows over time.
## Select a version to install
-Make sure you view [this installation guide](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/install/installation.md) from the branch (version) of GitLab you would like to install (e.g., `11-7-stable`).
+Make sure you view [this installation guide](https://gitlab.com/gitlab-org/gitlab/-/blob/master/doc/install/installation.md) from the branch (version) of GitLab you would like to install (for example, `11-7-stable`).
You can select the branch in the version dropdown in the top left corner of GitLab (below the menu bar).
If the highest number stable branch is unclear, check the [GitLab blog](https://about.gitlab.com/blog/) for installation guide links by version.
diff --git a/doc/install/postgresql_extensions.md b/doc/install/postgresql_extensions.md
index 99c85f4f808..8d1cf9afc5c 100644
--- a/doc/install/postgresql_extensions.md
+++ b/doc/install/postgresql_extensions.md
@@ -17,7 +17,7 @@ You must load the following extensions into the main GitLab database (defaults t
| `btree_gist` | 13.1 |
| `plpgsql` | 11.7 |
-If you are using [GitLab Geo](https://about.gitlab.com/solutions/geo/), you must load the following
+If you are using [GitLab Geo](https://about.gitlab.com/solutions/geo/), you must load the following
extensions into all secondary tracking databases (defaults to `gitlabhq_geo_production`):
| Extension | Minimum GitLab version |
diff --git a/doc/install/requirements.md b/doc/install/requirements.md
index 71d00e3f688..ba515de417f 100644
--- a/doc/install/requirements.md
+++ b/doc/install/requirements.md
@@ -296,10 +296,10 @@ The GitLab Runner server requirements depend on:
Since the nature of the jobs varies for each use case, you need to experiment by adjusting the job concurrency to get the optimum setting.
-For reference, GitLab.com's [auto-scaling shared runner](../user/gitlab_com/index.md#shared-runners) is configured so that a **single job** runs in a **single instance** with:
+For reference, the GitLab.com Build Cloud [auto-scaling runner for Linux](../ci/runners/build_cloud/linux_build_cloud.md) is configured so that a **single job** runs in a **single instance** with:
-- 1vCPU.
-- 3.75GB of RAM.
+- 1 vCPU.
+- 3.75 GB of RAM.
## Supported web browsers
diff --git a/doc/integration/README.md b/doc/integration/README.md
deleted file mode 100644
index 7c03b957686..00000000000
--- a/doc/integration/README.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: 'index.md'
-remove_date: '2021-07-30'
----
-
-This document was moved to [another location](index.md).
-
-<!-- This redirect file can be deleted after <2021-07-30>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/integration/akismet.md b/doc/integration/akismet.md
index ba2b25caeff..a652025387e 100644
--- a/doc/integration/akismet.md
+++ b/doc/integration/akismet.md
@@ -1,14 +1,14 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
# Akismet **(FREE)**
-GitLab leverages [Akismet](https://akismet.com/) to protect against spam.
-GitLab uses Akismet to prevent the creation of spam issues on public projects. Issues
-created through the web UI or the API can be submitted to Akismet for review.
+GitLab uses [Akismet](https://akismet.com/) to prevent the creation of
+spam issues on public projects. Issues created through the web UI or the API can be submitted to
+Akismet for review.
Detected spam is rejected, and an entry is added in the **Spam Log** section of the
Admin page.
@@ -19,7 +19,10 @@ NOTE:
In GitLab 8.11 and later, all issues are submitted to Akismet.
In earlier GitLab versions, this only applied to API and non-project members.
-## Configuration
+Akismet configuration is available to users on self-managed GitLab. Akismet is already enabled on
+GitLab SaaS (GitLab.com), where it's configuration and management are handled by GitLab Inc.
+
+## Configuration **(FREE SELF)**
To use Akismet:
@@ -35,7 +38,7 @@ To use Akismet:
![Screenshot of Akismet settings](img/akismet_settings.png)
-## Training
+## Training **(FREE SELF)**
To better differentiate between spam and ham, you can train the Akismet
filter whenever there is a false positive or false negative.
diff --git a/doc/integration/auth0.md b/doc/integration/auth0.md
index 6b8b07c3707..34ee326d6d5 100644
--- a/doc/integration/auth0.md
+++ b/doc/integration/auth0.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/integration/azure.md b/doc/integration/azure.md
index 61a8290e664..dceb135ad89 100644
--- a/doc/integration/azure.md
+++ b/doc/integration/azure.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/integration/bitbucket.md b/doc/integration/bitbucket.md
index a492b891248..44aca1ca6b1 100644
--- a/doc/integration/bitbucket.md
+++ b/doc/integration/bitbucket.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/integration/cas.md b/doc/integration/cas.md
index 59f41ab4368..be54c31ec01 100644
--- a/doc/integration/cas.md
+++ b/doc/integration/cas.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/integration/datadog.md b/doc/integration/datadog.md
index 38ff004a203..e06cca19e60 100644
--- a/doc/integration/datadog.md
+++ b/doc/integration/datadog.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
@@ -8,25 +8,44 @@ info: To determine the technical writer assigned to the Stage/Group associated w
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/270123) in GitLab 14.1
-This integration allows sending CI/CD pipeline and job information to [Datadog](https://www.datadoghq.com/) for monitoring and troubleshooting of job failures and performance issues using the [CI Visibility](https://app.datadoghq.com/ci) product.
-
-You can find out more information on [Datadog's CI Visibility documentation site](https://docs.datadoghq.com/continuous_integration/).
-
-## How to configure it
-
-The integration is based on [Webhooks](../user/project/integrations/webhooks.md) and it only requires setup on GitLab.
-
-Configure the integration on a project or group by going to **Settings > Integrations > Datadog** for each project or group you want to instrument. You can also activate the integration for the entire GitLab instance.
-
-Fill in the integration configuration settings:
-
-- `Active` enables the integration.
-- `Datadog site` specifies which [Datadog site](https://docs.datadoghq.com/getting_started/site/) to send data to.
-- `API URL` (optional) allows overriding the API URL used for sending data directly, only used in advanced scenarios.
-- `API key` specifies which API key to use when sending data. You can generate one in the [APIs tab](https://app.datadoghq.com/account/settings#api) of the Integrations section on Datadog.
-- `Service` (optional) specifies which service name to attach to each span generated by the integration. Use this to differentiate between GitLab instances.
-- `Env` (optional) specifies which environment (`env` tag) to attach to each span generated by the integration. Use this to differentiate between groups of GitLab instances (i.e. staging vs production).
-
-You can test the integration with the `Test settings` button. After it’s successful, click `Save changes` to finish the integration set up.
-
-Data sent by the integration will be available in the [CI Visibility](https://app.datadoghq.com/ci) section of your Datadog account.
+This integration enables you to send CI/CD pipeline and job information to
+[Datadog](https://www.datadoghq.com/). Datadog's [CI Visibility](https://app.datadoghq.com/ci)
+product helps you monitor for job failures and performance issues, then troubleshoot them.
+It's based on [Webhooks](../user/project/integrations/webhooks.md),
+and only requires configuration on GitLab.
+
+## Configure the integration
+
+Users with the **Administrator** role can configure the integration at the
+project, group, or instance level:
+
+1. If you do not have a Datadog API key:
+ 1. Sign in to Datadog.
+ 1. Go to the **Integrations** section.
+ 1. Generate an API key in the [APIs tab](https://app.datadoghq.com/account/settings#api).
+ Copy this value, as you need it in a later step.
+1. *For project-level or group-level integrations:* In GitLab, go to your project or group.
+1. *For instance-level integrations:*
+ 1. Sign in to GitLab as a user with the [Administrator role](../user/permissions.md).
+ 1. On the top bar, select **Menu >** **{admin}** **Admin**.
+1. In the left sidebar, select **Settings > Integrations**.
+1. Scroll to **Add an integration**, and select **Datadog**.
+1. Select **Active** to enable the integration.
+1. Specify the [**Datadog site**](https://docs.datadoghq.com/getting_started/site/) to send data to.
+1. (Optional) To override the API URL used to send data directly, provide an **API URL**.
+ Used only in advanced scenarios.
+1. Provide your Datadog **API key**.
+1. (Optional) If you use more than one GitLab instance, provide a unique **Service** name
+ to differentiate between your GitLab instances.
+1. (Optional) If you use groups of GitLab instances (such as staging and production
+ environments), provide an **Env** name. This value is attached to each span
+ the integration generates.
+1. (Optional) Select **Test settings** to test your integration.
+1. Select **Save changes**.
+
+When the integration sends data, you can view it in the [CI Visibility](https://app.datadoghq.com/ci)
+section of your Datadog account.
+
+## Related links
+
+- [Datadog's CI Visibility](https://docs.datadoghq.com/continuous_integration/) documentation.
diff --git a/doc/integration/elasticsearch.md b/doc/integration/elasticsearch.md
index 23ca57cb8b8..20b66411a7e 100644
--- a/doc/integration/elasticsearch.md
+++ b/doc/integration/elasticsearch.md
@@ -238,7 +238,7 @@ The following Elasticsearch settings are available:
| `Password` | The password of your Elasticsearch instance. |
| `Number of Elasticsearch shards` | Elasticsearch indexes are split into multiple shards for performance reasons. In general, you should use at least 5 shards, and indexes with tens of millions of documents need to have more shards ([see below](#guidance-on-choosing-optimal-cluster-configuration)). Changes to this value do not take effect until the index is recreated. You can read more about tradeoffs in the [Elasticsearch documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/scalability.html). |
| `Number of Elasticsearch replicas` | Each Elasticsearch shard can have a number of replicas. These are a complete copy of the shard, and can provide increased query performance or resilience against hardware failure. Increasing this value will greatly increase total disk space required by the index. |
-| `Limit namespaces and projects that can be indexed` | Enabling this will allow you to select namespaces and projects to index. All other namespaces and projects will use database search instead. Please note that if you enable this option but do not select any namespaces or projects, none will be indexed. [Read more below](#limiting-namespaces-and-projects).
+| `Limit namespaces and projects that can be indexed` | Enabling this will allow you to select namespaces and projects to index. All other namespaces and projects will use database search instead. If you enable this option but do not select any namespaces or projects, none will be indexed. [Read more below](#limiting-namespaces-and-projects).
| `Using AWS hosted Elasticsearch with IAM credentials` | Sign your Elasticsearch requests using [AWS IAM authorization](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html), [AWS EC2 Instance Profile Credentials](https://docs.aws.amazon.com/codedeploy/latest/userguide/getting-started-create-iam-instance-profile.html#getting-started-create-iam-instance-profile-cli), or [AWS ECS Tasks Credentials](https://docs.aws.amazon.com/AmazonECS/latest/userguide/task-iam-roles.html). Please refer to [Identity and Access Management in Amazon Elasticsearch Service](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-ac.html) for details of AWS hosted Elasticsearch domain access policy configuration. |
| `AWS Region` | The AWS region in which your Elasticsearch service is located. |
| `AWS Access Key` | The AWS access key. |
@@ -567,7 +567,7 @@ For basic guidance on choosing a cluster configuration you may refer to [Elastic
### Advanced Search integration settings guidance
-- The `Number of Elasticsearch shards` setting usually corresponds with the number of CPUs available in your cluster. For example, if you have a 3-node cluster with 4 cores each, this means you will benefit from having at least 3*4=12 shards in the cluster. Please note, it's only possible to change the shards number by using [Split index API](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-split-index.html) or by reindexing to a different index with a changed number of shards.
+- The `Number of Elasticsearch shards` setting usually corresponds with the number of CPUs available in your cluster. For example, if you have a 3-node cluster with 4 cores each, this means you will benefit from having at least 3*4=12 shards in the cluster. It's only possible to change the shards number by using [Split index API](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-split-index.html) or by reindexing to a different index with a changed number of shards.
- The `Number of Elasticsearch replicas` setting should most of the time be equal to `1` (each shard will have 1 replica). Using `0` is not recommended, because losing one node will corrupt the index.
### Indexing large instances
diff --git a/doc/integration/external-issue-tracker.md b/doc/integration/external-issue-tracker.md
index 38bcc2b9932..19f789832b9 100644
--- a/doc/integration/external-issue-tracker.md
+++ b/doc/integration/external-issue-tracker.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/integration/facebook.md b/doc/integration/facebook.md
index c901fdfdd10..ded89dd93a4 100644
--- a/doc/integration/facebook.md
+++ b/doc/integration/facebook.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/integration/github.md b/doc/integration/github.md
index 7459691831c..f3192e0af6c 100644
--- a/doc/integration/github.md
+++ b/doc/integration/github.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/integration/gitlab.md b/doc/integration/gitlab.md
index 7e21685fd54..a0b438c9ffa 100644
--- a/doc/integration/gitlab.md
+++ b/doc/integration/gitlab.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/integration/gitpod.md b/doc/integration/gitpod.md
index d8aee6e0fd2..e3cd3075bc9 100644
--- a/doc/integration/gitpod.md
+++ b/doc/integration/gitpod.md
@@ -17,7 +17,9 @@ your Git branches like a CI/CD server.
This means you don't have to wait for dependencies to be downloaded and builds to finish, you can start
coding immediately. With Gitpod you can start coding instantly on any project, branch, and merge
-request from any device, at any time.
+request from any device, at any time, from your browser:
+
+![Gitpod interface](img/gitpod_web_interface_v13_4.png)
To use the GitLab Gitpod integration, it must be enabled for your GitLab instance. Users of:
@@ -52,15 +54,28 @@ For GitLab self-managed instances, a GitLab administrator needs to:
1. Add your Gitpod instance URL (for example, `https://gitpod.example.com`).
1. Select the **Save changes** button.
-Your users then need to [enable it for themselves](#enable-gitpod-in-your-user-settings).
+Your users can then [enable it for themselves](#enable-gitpod-in-your-user-settings).
## Launch Gitpod in GitLab
-You can launch Gitpod directly from GitLab by clicking the **Gitpod** button from the **Web IDE**
-dropdown on the project page:
+You can launch Gitpod directly from GitLab in one of these ways:
-![Gitpod Button on Project Page](img/gitpod_button_project_page_v13_4.png)
+- *From your project's page:*
+ 1. Go to your project, and navigate to the page you want to edit.
+ 1. Select the caret **(angle-down)** next to **Web IDE**, and select **Gitpod**
+ from the list:
-A project launched in GitLab looks like:
+ ![Gitpod Button on Project Page](img/gitpod_button_project_page_v13_4.png)
-![Gitpod interface](img/gitpod_web_interface_v13_4.png)
+ 1. Select **Open in Gitpod**.
+- *From a merge request:*
+ 1. Go to your merge request, and select **Overview** in the tab menu.
+ 1. Scroll to the end of the merge request description.
+ 1. Select the caret **(angle-down)** next to **Web IDE**, then select **Gitpod**
+ from the list:
+
+ ![Gitpod button on the merge request page](img/gitpod-button_v14_2.png)
+
+ 1. Select **Open in Gitpod**.
+
+Gitpod builds your development environment for your branch.
diff --git a/doc/integration/gmail_action_buttons_for_gitlab.md b/doc/integration/gmail_action_buttons_for_gitlab.md
index fa0e79d4c0b..f0bcc00c0fa 100644
--- a/doc/integration/gmail_action_buttons_for_gitlab.md
+++ b/doc/integration/gmail_action_buttons_for_gitlab.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/integration/google.md b/doc/integration/google.md
index 0e4c9b78b5f..a08944f65f1 100644
--- a/doc/integration/google.md
+++ b/doc/integration/google.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/integration/img/gitpod-button_v14_2.png b/doc/integration/img/gitpod-button_v14_2.png
new file mode 100644
index 00000000000..04dd5b50a7f
--- /dev/null
+++ b/doc/integration/img/gitpod-button_v14_2.png
Binary files differ
diff --git a/doc/integration/index.md b/doc/integration/index.md
index c725cc08556..00b65263d32 100644
--- a/doc/integration/index.md
+++ b/doc/integration/index.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
comments: false
---
@@ -49,6 +49,7 @@ GitLab has integrated with several security partners. For more information, see
GitLab can be integrated with the following external service for continuous integration:
- [Jenkins](jenkins.md) CI.
+- [Datadog](datadog.md), to monitor for CI/CD job failures and performance issues.
## Feature enhancements
diff --git a/doc/integration/jenkins.md b/doc/integration/jenkins.md
index b6d720d2714..8910e0978b0 100644
--- a/doc/integration/jenkins.md
+++ b/doc/integration/jenkins.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/integration/jenkins_deprecated.md b/doc/integration/jenkins_deprecated.md
index 61d1deace4f..b7e4c4f0e26 100644
--- a/doc/integration/jenkins_deprecated.md
+++ b/doc/integration/jenkins_deprecated.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/integration/jira/configure.md b/doc/integration/jira/configure.md
new file mode 100644
index 00000000000..b11f367258d
--- /dev/null
+++ b/doc/integration/jira/configure.md
@@ -0,0 +1,59 @@
+---
+stage: Ecosystem
+group: Integrations
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# Configure the Jira integration in GitLab
+
+You can set up the [Jira integration](index.md#jira-integration)
+by configuring your project settings in GitLab.
+You can also configure these settings at a [group level](../../user/admin_area/settings/project_integration_management.md#manage-group-level-default-settings-for-a-project-integration),
+and for self-managed GitLab, at an [instance level](../../user/admin_area/settings/project_integration_management.md#manage-instance-level-default-settings-for-a-project-integration).
+
+Prerequisites:
+
+- Ensure your GitLab installation does not use a [relative URL](development_panel.md#limitations).
+- For **Jira Server**, ensure you have a Jira username and password.
+ See [authentication in Jira](index.md#authentication-in-jira).
+- For **Jira on Atlassian cloud**, ensure you have an API token
+ and the email address you used to create the token.
+ See [authentication in Jira](index.md#authentication-in-jira).
+
+To configure your project:
+
+1. Go to your project and select [**Settings > Integrations**](../../user/project/integrations/overview.md#accessing-integrations).
+1. Select **Jira**.
+1. Select **Enable integration**.
+1. Select **Trigger** actions. Your choice determines whether a mention of Jira issue
+ (in a GitLab commit, merge request, or both) creates a cross-link in Jira back to GitLab.
+1. To comment in the Jira issue when a **Trigger** action is made in GitLab, select
+ **Enable comments**.
+1. To transition Jira issues when a
+ [closing reference](../../user/project/issues/managing_issues.md#closing-issues-automatically)
+ is made in GitLab, select **Enable Jira transitions**.
+1. Provide Jira configuration information:
+ - **Web URL**: The base URL to the Jira instance web interface you're linking to
+ this GitLab project, such as `https://jira.example.com`.
+ - **Jira API URL**: The base URL to the Jira instance API, such as `https://jira-api.example.com`.
+ Defaults to the **Web URL** value if not set. Leave blank if using **Jira on Atlassian cloud**.
+ - **Username or Email**:
+ For **Jira Server**, use `username`. For **Jira on Atlassian cloud**, use `email`.
+ - **Password/API token**:
+ Use `password` for **Jira Server** or `API token` for **Jira on Atlassian cloud**.
+1. To enable users to view Jira issues inside the GitLab project **(PREMIUM)**, select **Enable Jira issues** and
+ enter a Jira project key.
+
+ You can display issues only from a single Jira project in a given GitLab project.
+
+ WARNING:
+ If you enable Jira issues with this setting, all users with access to this GitLab project
+ can view all issues from the specified Jira project.
+
+1. To enable issue creation for vulnerabilities **(ULTIMATE)**, select **Enable Jira issues creation from vulnerabilities**.
+1. Select the **Jira issue type**. If the dropdown is empty, select refresh (**{retry}**) and try again.
+1. To verify the Jira connection is working, select **Test settings**.
+1. Select **Save changes**.
+
+Your GitLab project can now interact with all Jira projects in your instance and the project now
+displays a Jira link that opens the Jira project.
diff --git a/doc/integration/jira/connect-app.md b/doc/integration/jira/connect-app.md
index fcee3f7a637..d8b1e9aa867 100644
--- a/doc/integration/jira/connect-app.md
+++ b/doc/integration/jira/connect-app.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
@@ -53,7 +53,7 @@ After a namespace is added:
are synced to Jira.
- From GitLab 13.8, past merge request data is synced to Jira.
-Support for syncing past branch and commit data [is planned](https://gitlab.com/gitlab-org/gitlab/-/issues/263240).
+Support for syncing past branch and commit data is tracked [in this issue](https://gitlab.com/gitlab-org/gitlab/-/issues/263240).
## Install the GitLab.com for Jira Cloud app for self-managed instances **(FREE SELF)**
@@ -130,4 +130,4 @@ The GitLab.com for Jira Cloud app uses an iframe to add namespaces on the settin
> "You need to sign in or sign up before continuing."
-In this case, use [Firefox](https://www.mozilla.org/en-US/firefox/) or enable cross-site cookies in your browser.
+In this case, use [Firefox](https://www.mozilla.org/en-US/firefox/), [Google Chrome](https://www.google.com/chrome/), or enable cross-site cookies in your browser.
diff --git a/doc/integration/jira/development_panel.md b/doc/integration/jira/development_panel.md
index 9057267d55e..c8ea224f18e 100644
--- a/doc/integration/jira/development_panel.md
+++ b/doc/integration/jira/development_panel.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
@@ -37,7 +37,8 @@ After the integration is [set up on GitLab and Jira](#configure-the-integration)
- Refer to any Jira issue by its ID (in uppercase) in GitLab branch names,
commit messages, and merge request titles.
-- See the linked branches, commits, and merge requests in Jira issues:
+- See the linked branches, commits, and merge requests in Jira issues.
+- Create GitLab branches from Jira issues ([introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66032) in GitLab 14.2).
At this time, merge requests are called "pull requests" in Jira issues.
This name may change in a future Jira release.
@@ -68,8 +69,8 @@ To simplify administration, we recommend that a GitLab group maintainer or group
| Jira usage | GitLab.com customers need | GitLab self-managed customers need |
|------------|---------------------------|------------------------------------|
-| [Atlassian cloud](https://www.atlassian.com/cloud) | The [GitLab.com for Jira Cloud](https://marketplace.atlassian.com/apps/1221011/gitlab-com-for-jira-cloud?hosting=cloud&tab=overview) application installed from the [Atlassian Marketplace](https://marketplace.atlassian.com). This offers real-time sync between GitLab and Jira. | The [GitLab.com for Jira Cloud](https://marketplace.atlassian.com/apps/1221011/gitlab-com-for-jira-cloud?hosting=cloud&tab=overview), using a workaround process. See the documentation for [installing the GitLab Jira Cloud application for self-managed instances](connect-app.md#install-the-gitlabcom-for-jira-cloud-app-for-self-managed-instances) for more information. |
-| Your own server | The Jira DVCS (distributed version control system) connector. This syncs data hourly. | The [Jira DVCS Connector](dvcs.md). |
+| [Atlassian cloud](https://www.atlassian.com/cloud) | The [GitLab.com for Jira Cloud](https://marketplace.atlassian.com/apps/1221011/gitlab-com-for-jira-cloud?hosting=cloud&tab=overview) application installed from the [Atlassian Marketplace](https://marketplace.atlassian.com). This offers real-time sync between GitLab and Jira. For more information, see the documentation for the [GitLab.com for Jira Cloud app](connect-app.md). | The [GitLab.com for Jira Cloud](https://marketplace.atlassian.com/apps/1221011/gitlab-com-for-jira-cloud?hosting=cloud&tab=overview), using a workaround process. See the documentation for [installing the GitLab Jira Cloud application for self-managed instances](connect-app.md#install-the-gitlabcom-for-jira-cloud-app-for-self-managed-instances) for more information. |
+| Your own server | The [Jira DVCS (distributed version control system) connector](dvcs.md). This syncs data hourly. | The [Jira DVCS Connector](dvcs.md). |
Each GitLab project can be configured to connect to an entire Jira instance. That means after
configuration, one GitLab project can interact with all Jira projects in that instance. For:
@@ -82,57 +83,6 @@ configuration, one GitLab project can interact with all Jira projects in that in
If you have a single Jira instance, you can pre-fill the settings. For more information, read the
documentation for [central administration of project integrations](../../user/admin_area/settings/project_integration_management.md).
-To enable the integration in GitLab, you must:
-
-1. [Configure the project in Jira](index.md#jira-integration).
- The supported Jira versions are `v6.x`, `v7.x`, and `v8.x`.
-1. [Enter the correct values in GitLab](#configure-gitlab).
-
-### Configure GitLab
-
-To enable the integration in your GitLab project, after you
-[configure your Jira project](index.md#jira-integration):
-
-1. Ensure your GitLab installation does not use a relative URL, as described in
- [Limitations](#limitations).
-1. Go to your project and select [**Settings > Integrations**](../../user/project/integrations/overview.md#accessing-integrations).
-1. Select **Jira**.
-1. Select **Enable integration**.
-1. Select **Trigger** actions. Your choice determines whether a mention of Jira issue
- (in a GitLab commit, merge request, or both) creates a cross-link in Jira back to GitLab.
-1. To comment in the Jira issue when a **Trigger** action is made in GitLab, select
- **Enable comments**.
-1. To transition Jira issues when a
- [closing reference](../../user/project/issues/managing_issues.md#closing-issues-automatically)
- is made in GitLab, select **Enable Jira transitions**.
-1. Provide Jira configuration information:
- - **Web URL**: The base URL to the Jira instance web interface you're linking to
- this GitLab project, such as `https://jira.example.com`.
- - **Jira API URL**: The base URL to the Jira instance API, such as `https://jira-api.example.com`.
- Defaults to the **Web URL** value if not set. Leave blank if using **Jira on Atlassian cloud**.
- - **Username or Email**:
- For **Jira Server**, use `username`. For **Jira on Atlassian cloud**, use `email`.
- See [authentication in Jira](index.md#authentication-in-jira).
- - **Password/API token**:
- Use `password` for **Jira Server** or `API token` for **Jira on Atlassian cloud**.
- See [authentication in Jira](index.md#authentication-in-jira).
-1. To enable users to view Jira issues inside the GitLab project **(PREMIUM)**, select **Enable Jira issues** and
- enter a Jira project key.
-
- You can display issues only from a single Jira project in a given GitLab project.
-
- WARNING:
- If you enable Jira issues with this setting, all users with access to this GitLab project
- can view all issues from the specified Jira project.
-
-1. To enable issue creation for vulnerabilities **(ULTIMATE)**, select **Enable Jira issues creation from vulnerabilities**.
-1. Select the **Jira issue type**. If the dropdown is empty, select refresh (**{retry}**) and try again.
-1. To verify the Jira connection is working, select **Test settings**.
-1. Select **Save changes**.
-
-Your GitLab project can now interact with all Jira projects in your instance and the project now
-displays a Jira link that opens the Jira project.
-
## Limitations
This integration is not supported on GitLab instances under a
diff --git a/doc/integration/jira/dvcs.md b/doc/integration/jira/dvcs.md
index d69243e50a6..7d97312757e 100644
--- a/doc/integration/jira/dvcs.md
+++ b/doc/integration/jira/dvcs.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
@@ -213,7 +213,7 @@ Potential resolutions:
the query string.
1. If `scope=api` is missing from the URL, edit the
[GitLab account configuration](#configure-a-gitlab-application-for-dvcs). Review
- the **Scopes** field and ensure the `api` check box is selected.
+ the **Scopes** field and ensure the `api` checkbox is selected.
### Jira error adding account and no repositories listed
diff --git a/doc/integration/jira/img/jira_dev_panel_jira_setup_3.png b/doc/integration/jira/img/jira_dev_panel_jira_setup_3.png
index 4049a65f56b..c58f1d5cecc 100644
--- a/doc/integration/jira/img/jira_dev_panel_jira_setup_3.png
+++ b/doc/integration/jira/img/jira_dev_panel_jira_setup_3.png
Binary files differ
diff --git a/doc/integration/jira/index.md b/doc/integration/jira/index.md
index a85ffdd1feb..febd9907028 100644
--- a/doc/integration/jira/index.md
+++ b/doc/integration/jira/index.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
@@ -19,14 +19,14 @@ in your GitLab project with any of your projects in Jira.
### Jira integration
-This integration connects one or more GitLab project to a Jira instance. The Jira instance
+This integration connects one or more GitLab projects to a Jira instance. The Jira instance
can be hosted by you or in [Atlassian cloud](https://www.atlassian.com/cloud).
The supported Jira versions are `v6.x`, `v7.x`, and `v8.x`.
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i>
For an overview, see [Agile Management - GitLab-Jira Basic Integration](https://www.youtube.com/watch?v=fWvwkx5_00E&feature=youtu.be).
-To set up the integration, [configure the project settings](development_panel.md#configure-gitlab) in GitLab.
+To set up the integration, [configure the project settings](configure.md) in GitLab.
You can also configure these settings at a [group level](../../user/admin_area/settings/project_integration_management.md#manage-group-level-default-settings-for-a-project-integration),
and for self-managed GitLab, at an [instance level](../../user/admin_area/settings/project_integration_management.md#manage-instance-level-default-settings-for-a-project-integration).
@@ -49,13 +49,14 @@ To set up the Jira development panel integration:
| Capability | Jira integration | Jira Development panel integration |
|-|-|-|
| Mention a Jira issue ID in a GitLab commit or merge request, and a link to the Jira issue is created. | Yes. | No. |
-| Mention a Jira issue ID in GitLab and the Jira issue shows the GitLab issue or merge request. | Yes. A Jira comment with the GitLab issue or MR title links to GitLab. The first mention is also added to the Jira issue under **Web links**. | Yes, in the issue's Development panel. |
-| Mention a Jira issue ID in a GitLab commit message and the Jira issue shows the commit message. | Yes. The entire commit message is displayed in the Jira issue as a comment and under **Web links**. Each message links back to the commit in GitLab. | Yes, in the issue's Development panel and optionally with a custom comment on the Jira issue using Jira [Smart Commits](https://confluence.atlassian.com/fisheye/using-smart-commits-960155400.html). |
+| Mention a Jira issue ID in GitLab and the Jira issue shows the GitLab issue or merge request. | Yes. A Jira comment with the GitLab issue or MR title links to GitLab. The first mention is also added to the Jira issue under **Web links**. | Yes, in the issue's [development panel](https://support.atlassian.com/jira-software-cloud/docs/view-development-information-for-an-issue/). |
+| Mention a Jira issue ID in a GitLab commit message and the Jira issue shows the commit message. | Yes. The entire commit message is displayed in the Jira issue as a comment and under **Web links**. Each message links back to the commit in GitLab. | Yes, in the issue's [development panel](https://support.atlassian.com/jira-software-cloud/docs/view-development-information-for-an-issue/) and optionally with a custom comment on the Jira issue using Jira [Smart Commits](https://confluence.atlassian.com/fisheye/using-smart-commits-960155400.html). |
| Mention a Jira issue ID in a GitLab branch name and the Jira issue shows the branch name. | No. | Yes, in the issue's [development panel](https://support.atlassian.com/jira-software-cloud/docs/view-development-information-for-an-issue/). |
| Add Jira time tracking to an issue. | No. | Yes. Time can be specified using Jira Smart Commits. |
| Use a Git commit or merge request to transition or close a Jira issue. | Yes. Only a single transition type, typically configured to close the issue by setting it to Done. | Yes. Transition to any state using Jira Smart Commits. |
| Display a list of Jira issues. | Yes. **(PREMIUM)** | No. |
| Create a Jira issue from a vulnerability or finding. | Yes. **(ULTIMATE)** | No. |
+| Create a GitLab branch from a Jira issue. | No. | Yes, in the issue's [development panel](https://support.atlassian.com/jira-software-cloud/docs/view-development-information-for-an-issue/). |
## Authentication in Jira
@@ -82,26 +83,31 @@ If these features do not work as expected, it is likely due to a problem with th
### GitLab is unable to comment on a Jira issue
-Make sure that the Jira user you set up for the integration has the
-correct access permission to post comments on a Jira issue and also to transition
-the issue, if you'd like GitLab to also be able to do so.
+If GitLab cannot comment on Jira issues, make sure the Jira user you
+set up for the integration has permission to:
+
+- Post comments on a Jira issue.
+- Transition the Jira issue.
+
Jira issue references and update comments do not work if the GitLab issue tracker is disabled.
### GitLab is unable to close a Jira issue
-Make sure the `Transition ID` you set within the Jira settings matches the one
+Make sure the `Transition ID` you set in the Jira settings matches the one
your project needs to close an issue.
-Make sure that the Jira issue is not already marked as resolved; that is,
-the Jira issue resolution field is not set. (It should not be struck through in
-Jira lists.)
+Make sure that the Jira issue is not already marked as resolved. That is,
+the Jira issue resolution field is not set, and the issue is not struck through in
+Jira lists.
### CAPTCHA
-CAPTCHA may be triggered after several consecutive failed login attempts
+CAPTCHA may be triggered after several consecutive failed login attempts,
which may lead to a `401 unauthorized` error when testing your Jira integration.
If CAPTCHA has been triggered, you can't use Jira's REST API to
-authenticate with the Jira site. You need to log in to your Jira instance
+authenticate with the Jira site.
+
+To fix this error, sign in to your Jira instance
and complete the CAPTCHA.
## Third-party Jira integrations
diff --git a/doc/integration/jira/issues.md b/doc/integration/jira/issues.md
index 34ca5481b85..0373506062c 100644
--- a/doc/integration/jira/issues.md
+++ b/doc/integration/jira/issues.md
@@ -1,13 +1,13 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
# Jira integration issue management **(FREE)**
Integrating issue management with Jira requires you to [configure Jira](index.md#jira-integration)
-and [enable the Jira service](development_panel.md#configure-gitlab) in GitLab.
+and [enable the Jira integration](configure.md) in GitLab.
After you configure and enable the integration, you can reference and close Jira
issues by mentioning the Jira ID in GitLab commits and merge requests.
@@ -45,21 +45,18 @@ ENTITY_TITLE
You can [disable comments](#disable-comments-on-jira-issues) on issues.
-### Require associated Jira issue for merge requests to be merged
+### Require associated Jira issue for merge requests to be merged **(ULTIMATE)**
-> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/280766) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 13.12 behind a feature flag, disabled by default.
-> - [Deployed behind a feature flag](../../user/feature_flags.md), disabled by default.
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/280766) in GitLab 13.12, disabled behind `jira_issue_association_on_merge_request` [feature flag](../../administration/feature_flags.md).
> - [Enabled by default](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/61722) in GitLab 14.1.
-> - Enabled on GitLab.com.
-> - Recommended for production use.
-> - For GitLab self-managed instances, GitLab administrators can opt to [disable it](#enable-or-disable-the-ability-to-require-an-associated-jira-issue-on-merge-requests). **(ULTIMATE SELF)**
+> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/335280) in GitLab 14.2.
You can prevent merge requests from being merged if they do not refer to a Jira issue.
To enforce this:
1. Navigate to your project's **Settings > General** page.
1. Expand the **Merge requests** section.
-1. Under **Merge checks**, select the **Require an associated issue from Jira** check box.
+1. Under **Merge checks**, select the **Require an associated issue from Jira** checkbox.
1. Select **Save** for the changes to take effect.
After you enable this feature, a merge request that doesn't reference an associated
@@ -102,7 +99,7 @@ Consider this example:
> [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/3622) in [GitLab Premium](https://about.gitlab.com/pricing/) 13.2.
You can browse, search, and view issues from a selected Jira project directly in GitLab,
-if your GitLab administrator [has configured it](development_panel.md#configure-gitlab).
+if your GitLab administrator [has configured it](configure.md).
To do this, in GitLab, go to your project and select **Jira > Issues list**. The issue list
sorts by **Created date** by default, with the newest issues listed at the top:
@@ -149,8 +146,8 @@ When you configure automatic issue transitions, you can transition a referenced
Jira issue to the next available status with a category of **Done**. To configure
this setting:
-1. Refer to the [Configure GitLab](development_panel.md#configure-gitlab) instructions.
-1. Select the **Enable Jira transitions** check box.
+1. Refer to the [Configure GitLab](configure.md) instructions.
+1. Select the **Enable Jira transitions** checkbox.
1. Select the **Move to Done** option.
## Custom issue transitions
@@ -167,7 +164,7 @@ For advanced workflows, you can specify custom Jira transition IDs:
**action** parameter in the URL.
The transition ID may vary between workflows (for example, a bug instead of a
story), even if the status you're changing to is the same.
-1. Refer to the [Configure GitLab](development_panel.md#configure-gitlab) instructions.
+1. Refer to the [Configure GitLab](configure.md) instructions.
1. Select the **Enable Jira transitions** setting.
1. Select the **Custom transitions** option.
1. Enter your transition IDs in the text field. If you insert multiple transition IDs
@@ -179,24 +176,5 @@ For advanced workflows, you can specify custom Jira transition IDs:
GitLab can cross-link source commits or merge requests with Jira issues without
adding a comment to the Jira issue:
-1. Refer to the [Configure GitLab](development_panel.md#configure-gitlab) instructions.
-1. Clear the **Enable comments** check box.
-
-## Enable or disable the ability to require an associated Jira issue on merge requests
-
-The ability to require an associated Jira issue on merge requests is under development
-but ready for production use. It is deployed behind a feature flag that is
-**enabled by default**.
-[GitLab administrators with access to the GitLab Rails console](../../administration/feature_flags.md) can opt to disable it.
-
-To enable it:
-
-```ruby
-Feature.enable(:jira_issue_association_on_merge_request)
-```
-
-To disable it:
-
-```ruby
-Feature.disable(:jira_issue_association_on_merge_request)
-```
+1. Refer to the [Configure GitLab](configure.md) instructions.
+1. Clear the **Enable comments** checkbox.
diff --git a/doc/integration/jira/jira_cloud_configuration.md b/doc/integration/jira/jira_cloud_configuration.md
index 7b3f2bcb249..e42a102e030 100644
--- a/doc/integration/jira/jira_cloud_configuration.md
+++ b/doc/integration/jira/jira_cloud_configuration.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
@@ -15,8 +15,8 @@ on Atlassian cloud. To create the API token:
1. Select **Create API token** to display a modal window with an API token.
1. To copy the API token, select **Copy to clipboard**, or select **View** and write
down the new API token. You need this value when you
- [configure GitLab](development_panel.md#configure-gitlab).
+ [configure GitLab](configure.md).
You need the newly created token, and the email
address you used when you created it, when you
-[configure GitLab](development_panel.md#configure-gitlab).
+[configure GitLab](configure.md).
diff --git a/doc/integration/jira/jira_server_configuration.md b/doc/integration/jira/jira_server_configuration.md
index 21348416b73..52e7e5e412b 100644
--- a/doc/integration/jira/jira_server_configuration.md
+++ b/doc/integration/jira/jira_server_configuration.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
@@ -80,4 +80,4 @@ After creating the group in Jira, grant permissions to the group by creating a p
Write down the new Jira username and its
password, as you need them when
-[configuring GitLab](development_panel.md#configure-gitlab).
+[configuring GitLab](configure.md).
diff --git a/doc/integration/jira_development_panel.md b/doc/integration/jira_development_panel.md
deleted file mode 100644
index 7bfebc18f47..00000000000
--- a/doc/integration/jira_development_panel.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: 'jira/index.md'
-remove_date: '2021-06-24'
----
-
-This document was moved to [another location](jira/index.md).
-
-<!-- This redirect file can be deleted after <2021-06-24>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/integration/kerberos.md b/doc/integration/kerberos.md
index 5b827d23772..ba3f246f5f5 100644
--- a/doc/integration/kerberos.md
+++ b/doc/integration/kerberos.md
@@ -261,7 +261,7 @@ offers only `basic` authentication.
kerberos:
# 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
+ # nginx to proxy GitLab on an extra port (for example: 8443) and uncomment the following lines
# to dedicate this port to Kerberos authentication. (default: false)
use_dedicated_port: true
port: 8443
diff --git a/doc/integration/oauth2_generic.md b/doc/integration/oauth2_generic.md
index 84490757c16..867108d4597 100644
--- a/doc/integration/oauth2_generic.md
+++ b/doc/integration/oauth2_generic.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/integration/oauth_provider.md b/doc/integration/oauth_provider.md
index 7540a02e520..596fff47716 100644
--- a/doc/integration/oauth_provider.md
+++ b/doc/integration/oauth_provider.md
@@ -51,10 +51,13 @@ To add a new application for your user:
1. In the left sidebar, select **Applications**.
1. Enter a **Name**, **Redirect URI** and OAuth 2 scopes as defined in [Authorized Applications](#authorized-applications).
The **Redirect URI** is the URL where users are sent after they authorize with GitLab.
-1. Select **Save application**. GitLab displays:
+1. Select **Save application**. GitLab provides:
- - Application ID: OAuth 2 Client ID.
- - Secret: OAuth 2 Client Secret.
+ - The OAuth 2 Client ID in the **Application ID** field.
+ - The OAuth 2 Client Secret, accessible:
+ - In the **Secret** field in GitLab 14.1 and earlier.
+ - Using the **Copy** button on the **Secret** field
+ [in GitLab 14.2 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/332844).
## Group owned applications
@@ -66,10 +69,13 @@ To add a new application for a group:
1. On the left sidebar, select **Settings > Applications**.
1. Enter a **Name**, **Redirect URI** and OAuth 2 scopes as defined in [Authorized Applications](#authorized-applications).
The **Redirect URI** is the URL where users are sent after they authorize with GitLab.
-1. Select **Save application**. GitLab displays:
+1. Select **Save application**. GitLab provides:
- - Application ID: OAuth 2 Client ID.
- - Secret: OAuth 2 Client Secret.
+ - The OAuth 2 Client ID in the **Application ID** field.
+ - The OAuth 2 Client Secret, accessible:
+ - In the **Secret** field in GitLab 14.1 and earlier.
+ - Using the **Copy** button on the **Secret** field
+ [in GitLab 14.2 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/332844).
## Instance-wide applications
diff --git a/doc/integration/omniauth.md b/doc/integration/omniauth.md
index d5f49041f41..bba3252fe76 100644
--- a/doc/integration/omniauth.md
+++ b/doc/integration/omniauth.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
@@ -162,19 +162,26 @@ The chosen OmniAuth provider is now active and can be used to sign in to GitLab
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/36664) in GitLab 13.4.
You can automatically link OmniAuth users with existing GitLab users if their email addresses match.
-For example, the following setting is used to enable the auto link feature for both a SAML provider and the Twitter OAuth provider:
+Automatic linking using this method works for all providers
+[except the SAML provider](https://gitlab.com/gitlab-org/gitlab/-/issues/338293). For automatic
+linking using the SAML provider, see [SAML-specific](saml.md#general-setup) instructions.
+
+As an example, the following configuration is used to enable the auto link feature for both:
+
+- OpenID Connect provider.
+- Twitter OAuth provider.
**For Omnibus installations**
```ruby
-gitlab_rails['omniauth_auto_link_user'] = ["saml", "twitter"]
+gitlab_rails['omniauth_auto_link_user'] = ["openid_connect", "twitter"]
```
**For installations from source**
```yaml
omniauth:
- auto_link_user: ["saml", "twitter"]
+ auto_link_user: ["openid_connect", "twitter"]
```
## Configure OmniAuth Providers as External
@@ -264,7 +271,7 @@ To enable/disable an OmniAuth provider:
1. On the top bar, select **Menu >** **{admin}** **Admin**.
1. In the left sidebar, go to **Settings**.
1. Scroll to the **Sign-in Restrictions** section, and click **Expand**.
-1. Below **Enabled OAuth Sign-In sources**, select the check box for each provider you want to enable or disable.
+1. Below **Enabled OAuth Sign-In sources**, select the checkbox for each provider you want to enable or disable.
![Enabled OAuth Sign-In sources](img/enabled-oauth-sign-in-sources_v13_10.png)
diff --git a/doc/integration/openid_connect_provider.md b/doc/integration/openid_connect_provider.md
index b37c5064063..84457485382 100644
--- a/doc/integration/openid_connect_provider.md
+++ b/doc/integration/openid_connect_provider.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/integration/recaptcha.md b/doc/integration/recaptcha.md
index 9ffc89e2c13..656ed8b8647 100644
--- a/doc/integration/recaptcha.md
+++ b/doc/integration/recaptcha.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/integration/salesforce.md b/doc/integration/salesforce.md
index 102b89298a1..56d9feb14e0 100644
--- a/doc/integration/salesforce.md
+++ b/doc/integration/salesforce.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/integration/saml.md b/doc/integration/saml.md
index 8e34f115072..ee3e2f574c7 100644
--- a/doc/integration/saml.md
+++ b/doc/integration/saml.md
@@ -707,7 +707,7 @@ Examples:
- [Auth0](https://auth0.com/docs/protocols/saml-protocol/configure-auth0-as-saml-identity-provider)
- [PingOne by Ping Identity](https://docs.pingidentity.com/bundle/pingone/page/xsh1564020480660-1.html)
-Please note that GitLab provides the following setup notes for guidance only.
+GitLab provides the following setup notes for guidance only.
If you have any questions on configuring the SAML app, please contact your provider's support.
### Okta setup notes
diff --git a/doc/integration/slash_commands.md b/doc/integration/slash_commands.md
index 1f2259a2d57..b9b5f394e3c 100644
--- a/doc/integration/slash_commands.md
+++ b/doc/integration/slash_commands.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/integration/trello_power_up.md b/doc/integration/trello_power_up.md
index e8956271508..df1d9270bd5 100644
--- a/doc/integration/trello_power_up.md
+++ b/doc/integration/trello_power_up.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/integration/twitter.md b/doc/integration/twitter.md
index 58e111be73c..1d711ea271e 100644
--- a/doc/integration/twitter.md
+++ b/doc/integration/twitter.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/legal/developer_certificate_of_origin.md b/doc/legal/developer_certificate_of_origin.md
new file mode 100644
index 00000000000..87185284e58
--- /dev/null
+++ b/doc/legal/developer_certificate_of_origin.md
@@ -0,0 +1,35 @@
+---
+stage: none
+group: unassigned
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# Developer Certificate of Origin Version 1.1
+
+Copyright (C) 2004, 2006 The Linux Foundation and its contributors, 1 Letterman Drive, Suite D4700, San Francisco, CA 94129, USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+By making a contribution to this project, I certify that:
+
+(a) The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or
+
+(b) The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as indicated in the file; or
+
+(c) The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it.
+
+(d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved.
+
+## License
+
+All documentation content is licensed to this project under [Creative Commons: CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/legalcode).
+
+All contributions to this project are licensed under the following license:
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/doc/migrate_ci_to_ce/README.md b/doc/migrate_ci_to_ce/README.md
deleted file mode 100644
index dbe5a2730b5..00000000000
--- a/doc/migrate_ci_to_ce/README.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: 'https://docs.gitlab.com/'
-remove_date: '2021-06-14'
----
-
-This document was moved to [another location](https://docs.gitlab.com/).
-
-<!-- This redirect file can be deleted after <2021-09-14>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/migrate_ci_to_ce/index.md b/doc/migrate_ci_to_ce/index.md
deleted file mode 100644
index dbe5a2730b5..00000000000
--- a/doc/migrate_ci_to_ce/index.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: 'https://docs.gitlab.com/'
-remove_date: '2021-06-14'
----
-
-This document was moved to [another location](https://docs.gitlab.com/).
-
-<!-- This redirect file can be deleted after <2021-09-14>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/operations/error_tracking.md b/doc/operations/error_tracking.md
index baaefcc3a0b..9234ca36634 100644
--- a/doc/operations/error_tracking.md
+++ b/doc/operations/error_tracking.md
@@ -27,21 +27,39 @@ least Maintainer [permissions](../user/permissions.md) to enable the Sentry inte
1. [Create](https://docs.sentry.io/product/sentry-basics/guides/integrate-frontend/create-new-project/) a new Sentry project. For each GitLab project that you want to integrate, we recommend that you create a new Sentry project.
1. [Find or generate](https://docs.sentry.io/api/auth/) a Sentry auth token for your Sentry project.
Make sure to give the token at least the following scopes: `event:read`, `project:read`, and `event:write` (for resolving events).
-1. In GitLab, navigate to your project's **Monitor > Error Tracking** page, and
- click **Enable Error Tracking**.
-1. Navigate to your project's **Settings > Monitor**. In the **Error Tracking** section,
- ensure the **Active** checkbox is set.
-1. In the **Sentry API URL** field, enter your Sentry hostname. For example, enter `https://sentry.example.com` if this is the address at which your Sentry instance is available. For the SaaS version of Sentry, the hostname is `https://sentry.io`.
-1. In the **Auth Token** field, enter the token you previously generated.
-1. Click the **Connect** button to test the connection to Sentry and populate the **Project** dropdown.
-1. From the **Project** dropdown, choose a Sentry project to link to your GitLab project.
-1. Click **Save changes** for the changes to take effect.
-1. You can now visit **Monitor > Error Tracking** in your project's sidebar to [view a list](#error-tracking-list) of Sentry errors.
+1. In GitLab, enable error tracking:
+ 1. On the top bar, select **Menu > Projects** and find your project.
+ 1. On the left sidebar, select **Monitor > Error Tracking**.
+ 1. Select **Enable error tracking**.
+1. In GitLab, ensure error tracking is active.
+ 1. On the left sidebar, select **Settings > Monitor**.
+ 1. Expand **Error Tracking**.
+ 1. Ensure the **Active** checkbox is selected.
+1. In the **Sentry API URL** box, enter your Sentry hostname. For example, enter `https://sentry.example.com`. For the SaaS version of Sentry, the hostname is `https://sentry.io`.
+1. In the **Auth Token** box, enter the token you previously generated.
+1. To test the connection to Sentry and populate the **Project** dropdown, select **Connect**.
+1. From the **Project** list, choose a Sentry project to link to your GitLab project.
+1. Select **Save changes**.
+
+You can now visit **Monitor > Error Tracking** in your project's sidebar to [view a list](#error-tracking-list) of Sentry errors.
### Enabling GitLab issues links
You may also want to enable Sentry's GitLab integration by following the steps in the [Sentry documentation](https://docs.sentry.io/product/integrations/gitlab/)
+### Enable GitLab Runner
+
+To configure GitLab Runner with Sentry, you must add the value for `sentry_dsn` to your GitLab
+Runner's `config.toml` configuration file, as referenced in [GitLab Runner Advanced Configuraton](https://docs.gitlab.com/runner/configuration/advanced-configuration.html).
+While setting up Sentry, select **Go** if you're asked for the project type.
+
+If you see the following error in your GitLab Runner logs, then you should specify the deprecated
+DSN in **Sentry.io > Project Settings > Client Keys (DSN) > Show deprecated DSN**.
+
+```plaintext
+ERROR: Sentry failure builds=0 error=raven: dsn missing private key
+```
+
## Error Tracking List
Users with at least Reporter [permissions](../user/permissions.md)
diff --git a/doc/operations/incident_management/alerts.md b/doc/operations/incident_management/alerts.md
index 7b6391cc76e..c6ff70103d9 100644
--- a/doc/operations/incident_management/alerts.md
+++ b/doc/operations/incident_management/alerts.md
@@ -91,10 +91,14 @@ your alerting rules, see [Embedding metrics based on alerts in incident issues](
[External Prometheus instances](../metrics/alerts.md#external-prometheus-instances) for information about setting up alerts for your self-managed Prometheus
instance.
+Prerequisite:
+
+- You must have at least the Developer [role](../../user/permissions.md).
+
To view the metrics for an alert:
-1. Sign in as a user with Developer or higher [permissions](../../user/permissions.md).
-1. Navigate to **Monitor > Alerts**.
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Monitor > Alerts**.
1. Select the alert you want to view.
1. Below the title of the alert, select the **Metrics** tab.
@@ -111,10 +115,14 @@ application incident and need to [explore logs](../metrics/dashboards/index.md#c
from across your application. These logs help you understand what's affecting
your application's performance and how to resolve any problems.
+Prerequisite:
+
+- You must have at least the Developer [role](../../user/permissions.md).
+
To view the logs for an alert:
-1. Sign in as a user with Developer or higher [permissions](../../user/permissions.md).
-1. Navigate to **Monitor > Alerts**.
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Monitor > Alerts**.
1. Select the alert you want to view.
1. Below the title of the alert, select the **Metrics** tab.
1. Select the [menu](../metrics/dashboards/index.md#chart-context-menu) of
@@ -167,17 +175,20 @@ difficult to track who is investigating and working on it. Assigning alerts ease
To assign an alert:
-1. To display the list of current alerts, navigate to **Monitor > Alerts**.
+1. Display the list of current alerts:
+
+ 1. On the top bar, select **Menu > Projects** and find your project.
+ 1. On the left sidebar, select **Monitor > Alerts**.
1. Select your desired alert to display its details.
![Alert Details View Assignee(s)](img/alert_details_assignees_v13_1.png)
1. If the right sidebar is not expanded, select
- **{angle-double-right}** **Expand sidebar** to expand it.
+ **Expand sidebar** (**{angle-double-right}**) to expand it.
-1. In the right sidebar, locate the **Assignee**, and then select **Edit**.
- From the dropdown menu, select each user you want to assign to the alert.
+1. On the right sidebar, locate the **Assignee**, and then select **Edit**.
+ From the list, select each user you want to assign to the alert.
GitLab creates a [to-do item](../../user/todos.md) for each user.
After completing their portion of investigating or fixing the alert, users can
@@ -192,13 +203,17 @@ You can manually create [To-Do list items](../../user/todos.md) for yourself
from the Alert details screen, and view them later on your **To-Do List**. To
add a to-do item:
-1. To display the list of current alerts, navigate to **Monitor > Alerts**.
+1. Display the list of current alerts:
+
+ 1. On the top bar, select **Menu > Projects** and find your project.
+ 1. On the left sidebar, select **Monitor > Alerts**.
+
1. Select your desired alert to display its **Alert Management Details View**.
-1. Select the **Add a to do** button in the right sidebar:
+1. On the right sidebar, select **Add a to do**:
![Alert Details Add a to do](img/alert_detail_add_todo_v13_9.png)
-Select the **To-Do List** **{todo-done}** in the navigation bar to view your current to-do list.
+To view your To-Do List, on the top bar, select **To-Do List** (**{todo-done}**).
## View the environment that generated the alert
diff --git a/doc/operations/incident_management/escalation_policies.md b/doc/operations/incident_management/escalation_policies.md
index 9df8f0dbf7f..b82aa5e5dc5 100644
--- a/doc/operations/incident_management/escalation_policies.md
+++ b/doc/operations/incident_management/escalation_policies.md
@@ -15,29 +15,48 @@ where you manage [On-call schedules](oncall_schedules.md).
## Add an escalation policy
-If you have at least Maintainer [permissions](../../user/permissions.md),
-you can create an escalation policy:
+Prerequisite:
-1. Go to **Operations > Escalation Policies** and select **Add an escalation policy**.
-1. In the **Add escalation policy** form, enter the policy's name and description, and create
+- You must have at least the Maintainer [role](../../user/permissions.md).
+- You must have an [on-call schedule](oncall_schedules.md).
+
+To create an escalation policy:
+
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Monitor > Escalation Policies**.
+1. Select **Add an escalation policy**.
+1. Enter the policy's name and description, and
escalation rules to follow when a primary responder misses an alert.
1. Select **Add escalation policy**.
![Escalation Policy](img/escalation_policy_v14_1.png)
-### Edit an escalation policy
+### Select the responder of an escalation rule
+
+When configuring an escalation rule, you can designate who to page:
+
+- **Email on-call user in schedule:** notifies the users who are on-call when the rule is triggered,
+ covering all rotations on the specified [on-call schedule](oncall_schedules.md).
+- **Email user:** notifies the specified user directly.
+
+When a notification is sent to a user through an on-call schedule or directly, a system note listing
+the paged users is created on the alert.
+
+## Edit an escalation policy
-Follow these steps to update an escalation policy:
+To update an escalation policy:
-1. Go to **Operations > Escalation Policies** and select the **Pencil** icon on the top right of the
- policy card, across from the policy name.
-1. In the **Edit policy** form, edit the information you wish to update.
-1. Select the **Edit policy** button to save your changes.
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Monitor > Escalation Policies**.
+1. Select **Edit escalation policy** (**{pencil}**).
+1. Edit the information.
+1. Select **Save changes**.
-### Delete an escalation policy
+## Delete an escalation policy
-Follow these steps to delete a policy:
+To delete an escalation policy:
-1. Go to **Operations > Escalation Policies** and select the **Trash Can** icon on the top right of
- the policy card.
-1. In the **Delete escalation policy** window, select the **Delete escalation policy** button.
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Monitor > Escalation Policies**.
+1. Select **Delete escalation policy** (**{remove}**).
+1. On the confirmation dialog, select **Delete escalation policy**.
diff --git a/doc/operations/incident_management/incidents.md b/doc/operations/incident_management/incidents.md
index 385030d56de..0cd0a645c15 100644
--- a/doc/operations/incident_management/incidents.md
+++ b/doc/operations/incident_management/incidents.md
@@ -238,6 +238,8 @@ Associate an incident to a milestone by selecting **Edit** next to the milestone
See [Incident List](#incident-list) for a full description of the severity levels available.
Select **Edit** in the right-hand side bar to change the severity of an incident.
+You can also change the severity using the [`/severity` quick action](../../user/project/quick_actions.md).
+
### Add a to-do item
Add a to-do for incidents that you want to track in your to-do list. Click the
diff --git a/doc/operations/incident_management/oncall_schedules.md b/doc/operations/incident_management/oncall_schedules.md
index 5d312ef672f..9e736f2cdec 100644
--- a/doc/operations/incident_management/oncall_schedules.md
+++ b/doc/operations/incident_management/oncall_schedules.md
@@ -13,24 +13,26 @@ responsibilities. Maintain the availability of your software services by putting
With an on-call schedule, your team is notified immediately when things go wrong so they can quickly
respond to service outages and disruptions.
-To use on-call schedules, users with Maintainer [permissions](../../user/permissions.md)
-must do the following:
+To use on-call schedules:
1. [Create a schedule](#schedules).
1. [Add a rotation to the schedule](#rotations).
-If you have at least Maintainer [permissions](../../user/permissions.md)
-to create a schedule, you can do this manually.
-
## Schedules
Set up an on-call schedule for your team to add rotations to.
-Follow these steps to create a schedule:
+Prerequisite:
+
+- You must have at least the Maintainer [role](../../user/permissions.md).
+
+To create an on-call schedule:
-1. Go to **Monitor > On-call Schedules** and select **Add a schedule**.
-1. In the **Add schedule** form, enter the schedule's name and description, and select a timezone.
-1. Click **Add schedule**.
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Monitor > On-call Schedules**.
+1. Select **Add a schedule**.
+1. Enter the schedule's name and description and select a timezone.
+1. Select **Add schedule**.
You now have an empty schedule with no rotations. This renders as an empty state, prompting you to
create [rotations](#rotations) for your schedule.
@@ -39,59 +41,64 @@ create [rotations](#rotations) for your schedule.
### Edit a schedule
-Follow these steps to update a schedule:
+To update a schedule:
-1. Go to **Monitor > On-call Schedules** and select the **Pencil** icon on the top right of the
- schedule card, across from the schedule name.
-1. In the **Edit schedule** form, edit the information you wish to update.
-1. Click the **Edit schedule** button to save your changes.
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Monitor > On-call Schedules**.
+1. Select **Edit schedule** (**{pencil}**).
+1. Edit the information.
+1. Select **Save changes**.
If you change the schedule's time zone, GitLab automatically updates the rotation's restricted time
interval (if one is set) to the corresponding times in the new time zone.
### Delete a schedule
-Follow these steps to delete a schedule:
+To delete a schedule:
-1. Go to **Monitor > On-call Schedules** and select the **Trash Can** icon on the top right of the
- schedule card.
-1. In the **Delete schedule** window, click the **Delete schedule** button.
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Monitor > On-call Schedules**.
+1. Select **Delete escalation policy** (**{remove}**).
+1. On the confirmation dialog, select **Delete schedule**.
## Rotations
Add rotations to an existing schedule to put your team members on-call.
-Follow these steps to create a rotation:
+To create a rotation:
-1. Go to **Monitor > On-call Schedules** and select **Add a rotation** on the top right of the
- current schedule.
-1. In the **Add rotation** form, enter the following:
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Monitor > On-call Schedules**.
+1. Select the **Add a rotation** link.
+1. Enter the following information:
- **Name:** Your rotation's name.
- **Participants:** The people you want in the rotation.
- **Rotation length:** The rotation's duration.
- **Starts on:** The date and time the rotation begins.
- - **Enable end date:** With the toggle set to on, you can select the date and time your rotation
+ - **Enable end date:** With the toggle on, you can select the date and time your rotation
ends.
- - **Restrict to time intervals:** With the toggle set to on, you can restrict your rotation to the
+ - **Restrict to time intervals:** With the toggle on, you can restrict your rotation to the
time period you select.
### Edit a rotation
-Follow these steps to edit a rotation:
+To edit a rotation:
-1. Go to **Monitor > On-call Schedules** and select the **Pencil** icon to the right of the title
- of the rotation that you want to update.
-1. In the **Edit rotation** form, make the changes that you want.
-1. Select the **Edit rotation** button.
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Monitor > On-call Schedules**.
+1. In the **Rotations** section, select **Edit rotation** (**{pencil}**).
+1. Edit the information.
+1. Select **Save changes**.
### Delete a rotation
-Follow these steps to delete a rotation:
+To delete a rotation:
-1. Go to **Monitor > On-call Schedules** and select the **Trash Can** icon to the right of the
- title of the rotation that you want to delete.
-1. In the **Delete rotation** window, select the **Delete rotation** button.
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Monitor > On-call Schedules**.
+1. In the **Rotations** section, select **Delete rotation** (**{remove}**).
+1. On the confirmation dialog, select **Delete rotation**.
## View schedule rotations
diff --git a/doc/operations/incident_management/paging.md b/doc/operations/incident_management/paging.md
index db419001343..6fdf880783a 100644
--- a/doc/operations/incident_management/paging.md
+++ b/doc/operations/incident_management/paging.md
@@ -27,10 +27,11 @@ Email notifications are available in projects for triggered alerts. Project
members with the **Owner** or **Maintainer** roles have the option to receive
a single email notification for new alerts.
-1. Navigate to **Settings > Monitor**.
-1. Expand the **Alerts** section.
-1. In the **Integration settings** tab, select the checkbox
- **Send a single email notification to Owners and Maintainers for new alerts**.
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Settings > Monitor**.
+1. Expand **Alerts**.
+1. On the **Alert settings** tab, select the
+ **Send a single email notification to Owners and Maintainers for new alerts** checkbox.
1. Select **Save changes**.
## Paging **(PREMIUM)**
diff --git a/doc/operations/incident_management/status_page.md b/doc/operations/incident_management/status_page.md
index d63d42e07c1..db7b55424dd 100644
--- a/doc/operations/incident_management/status_page.md
+++ b/doc/operations/incident_management/status_page.md
@@ -39,19 +39,23 @@ To configure a GitLab Status Page you must:
Only AWS S3 is supported as a deploy target.
+Prerequisite:
+
+- You must have at least the Maintainer [role](../../user/permissions.md).
+
To provide GitLab with the AWS account information needed to push content to your Status Page:
-1. Sign into GitLab as a user with Maintainer or greater [permissions](../../user/permissions.md).
-1. Navigate to **{settings}** **Settings > Monitor**. Next to **Status Page**,
- click **Expand**.
-1. Click **Active** to enable the Status Page feature.
-1. In **Status Page URL**, provide the URL to your external status page.
-1. Provide the **S3 Bucket name**. For more information, see
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Settings > Monitor**.
+1. Expand **Status Page**.
+1. Select the **Active** checkbox.
+1. In the **Status Page URL** box, provide the URL for your external status page.
+1. In the **S3 Bucket name** box, type the name of your S3 bucket. For more information, see
[Bucket configuration documentation](https://docs.aws.amazon.com/AmazonS3/latest/dev/HostingWebsiteOnS3Setup.html).
-1. Provide the **AWS region** for your bucket. For more information, see the
+1. In the **AWS region** box, type the region for your bucket. For more information, see the
[AWS documentation](https://github.com/aws/aws-sdk-ruby#configuration).
-1. Provide your **AWS access key ID** and **AWS Secret access key**.
-1. Click **Save changes**.
+1. Enter your **AWS access key ID** and **AWS Secret access key**.
+1. Select **Save changes**.
### Configure your AWS account
@@ -69,8 +73,8 @@ the necessary CI/CD variables to deploy the Status Page to AWS S3:
1. Fork the [Status Page](https://gitlab.com/gitlab-org/status-page) project.
You can do this through [Repository Mirroring](https://gitlab.com/gitlab-org/status-page#repository-mirroring),
which ensures you get the up-to-date Status Page features.
-1. Navigate to **{settings}** **Settings > CI/CD**.
-1. Scroll to **Variables**, and click **Expand**.
+1. On the left sidebar, select **Settings > CI/CD**.
+1. Expand **Variables**.
1. Add the following variables from your Amazon Console:
- `S3_BUCKET_NAME` - The name of the Amazon S3 bucket.
If no bucket with the provided name exists, the first pipeline run creates
@@ -80,8 +84,8 @@ the necessary CI/CD variables to deploy the Status Page to AWS S3:
- `AWS_DEFAULT_REGION` - The AWS region.
- `AWS_ACCESS_KEY_ID` - The AWS access key ID.
- `AWS_SECRET_ACCESS_KEY` - The AWS secret.
-1. Navigate to **CI/CD > Pipelines > Run Pipeline**, and run the pipeline to
- deploy the Status Page to S3.
+1. On the left sidebar, select **CI/CD > Pipelines**.
+1. To deploy the Status Page to S3, select **Run pipeline**.
WARNING:
Consider limiting who can access issues in this project, as any user who can view
@@ -92,7 +96,9 @@ the issue can potentially [publish comments to your GitLab Status Page](#publish
After creating the CI/CD variables, configure the Project you want to use for
Incident issues:
-1. To view the Status Page settings, navigate to **{settings}** **Settings > Monitor > Status Page**.
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Settings > Monitor**.
+1. Expand **Status page**.
1. Fill in your cloud provider's credentials and make sure to select the **Active** checkbox.
1. Select **Save changes**.
@@ -124,7 +130,7 @@ To publish an incident:
1. Create an issue in the project you enabled the GitLab Status Page settings in.
1. A [project or group owner](../../user/permissions.md) must use the
`/publish` [quick action](../../user/project/quick_actions.md) to publish the
- issue to the GitLab Status Page. Confidential issues can't be published.
+ issue to the GitLab Status Page. [Confidential issues](../../user/project/issues/confidential_issues.md) can't be published.
A background worker publishes the issue onto the Status Page using the credentials
you provided during setup. As part of publication, GitLab:
@@ -168,5 +174,6 @@ To change the incident status from `open` to `closed`, close the incident issue
within GitLab. Closing the issue triggers a background worker to update the
GitLab Status Page website.
-If you make a published issue confidential, GitLab unpublishes it from your
-GitLab Status Page website.
+If you
+[make a published issue confidential](../../user/project/issues/confidential_issues.md#making-an-issue-confidential),
+GitLab unpublishes it from your GitLab Status Page website.
diff --git a/doc/operations/metrics/dashboards/settings.md b/doc/operations/metrics/dashboards/settings.md
index 0e467623e05..f14d326a0d3 100644
--- a/doc/operations/metrics/dashboards/settings.md
+++ b/doc/operations/metrics/dashboards/settings.md
@@ -46,7 +46,7 @@ existing external dashboards:
1. Click **Save changes**.
GitLab displays a **View full dashboard** button in the top right corner of your
-[monitoring dashboard](../../../ci/environments/index.md#monitoring-environments)
+[monitoring dashboard](../../../ci/environments/index.md#monitor-environments)
which opens the URL you provided:
![External Dashboard Link](img/external_dashboard_link.png)
diff --git a/doc/operations/metrics/img/linked_runbooks_on_charts.png b/doc/operations/metrics/img/linked_runbooks_on_charts.png
deleted file mode 100644
index 335ba5dc172..00000000000
--- a/doc/operations/metrics/img/linked_runbooks_on_charts.png
+++ /dev/null
Binary files differ
diff --git a/doc/operations/metrics/img/prometheus_alert.png b/doc/operations/metrics/img/prometheus_alert.png
deleted file mode 100644
index 08680c88b23..00000000000
--- a/doc/operations/metrics/img/prometheus_alert.png
+++ /dev/null
Binary files differ
diff --git a/doc/operations/metrics/index.md b/doc/operations/metrics/index.md
index 09bc3237cb6..07e71fe79ef 100644
--- a/doc/operations/metrics/index.md
+++ b/doc/operations/metrics/index.md
@@ -117,7 +117,7 @@ Custom metrics can be monitored by adding them on the monitoring dashboard page.
After saving them, they display on the environment metrics dashboard provided that either:
- A [connected Kubernetes cluster](../../user/project/clusters/add_remove_clusters.md)
- with the matching [environment scope](../../ci/environments/index.md#scoping-environments-with-specs) is used and
+ with the matching [environment scope](../../ci/environments/index.md#scope-environments-with-specs) is used and
[Prometheus installed on the cluster](../../user/project/integrations/prometheus.md#enabling-prometheus-integration).
- Prometheus is [manually configured](../../user/project/integrations/prometheus.md#manual-configuration-of-prometheus).
diff --git a/doc/public_access/public_access.md b/doc/public_access/public_access.md
index 4a7e178072b..2cbcae31db3 100644
--- a/doc/public_access/public_access.md
+++ b/doc/public_access/public_access.md
@@ -15,6 +15,8 @@ GitLab allows [Owners](../user/permissions.md) to set a project's visibility as:
These visibility levels affect who can see the project in the public access directory (`/public`
for your GitLab instance). For example, <https://gitlab.com/public>.
+You can control the visibility of individual features with
+[project feature settings](../user/permissions.md#project-features).
## Public projects
@@ -26,7 +28,7 @@ They are listed in the public access directory (`/public`) for all users.
NOTE:
By default, `/public` is visible to unauthenticated users. However, if the
-[**Public** visibility level](../user/admin_area/settings/visibility_and_access_controls.md#restricted-visibility-levels)
+[**Public** visibility level](../user/admin_area/settings/visibility_and_access_controls.md#restrict-visibility-levels)
is restricted, `/public` is visible only to signed-in users.
## Internal projects
@@ -53,8 +55,15 @@ They appear in the public access directory (`/public`) for project members only.
## Change project visibility
-1. Go to your project's **Settings**.
-1. Change **Visibility Level** to either Public, Internal, or Private.
+Prerequisite:
+
+- You must have the Owner role for a project.
+
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Settings > General**.
+1. Expand **Visibility, project features, permissions**.
+1. Change **Project visibility** to either Public, Internal, or Private.
+1. Select **Save changes**.
## Restrict use of public or internal projects
@@ -62,7 +71,7 @@ You can restrict the use of visibility levels for users when they create a proje
This is useful to prevent users from publicly exposing their repositories by accident. The
restricted visibility settings do not apply to admin users.
-For details, see [Restricted visibility levels](../user/admin_area/settings/visibility_and_access_controls.md#restricted-visibility-levels).
+For details, see [Restricted visibility levels](../user/admin_area/settings/visibility_and_access_controls.md#restrict-visibility-levels).
<!-- ## Troubleshooting
diff --git a/doc/push_rules/push_rules.md b/doc/push_rules/push_rules.md
index 34a63f425eb..28dd3265465 100644
--- a/doc/push_rules/push_rules.md
+++ b/doc/push_rules/push_rules.md
@@ -88,13 +88,15 @@ at the project level or the [group level](../user/group/index.md#group-push-rule
To create global push rules:
1. On the top bar, select **Menu >** **{admin}** **Admin**.
-1. In the left sidebar, select **Push rules**.
+1. On the left sidebar, select **Push Rules**.
To override global push rules in a project's settings:
-1. Navigate to your project's **Settings > Repository** and expand **Push rules**.
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Settings > Repository**.
+1. Expand **Push rules**.
1. Set the rule you want.
-1. Select **Save Push Rules** for the changes to take effect.
+1. Select **Save push rules**.
The following options are available:
diff --git a/doc/raketasks/backup_restore.md b/doc/raketasks/backup_restore.md
index 73360c3ee4b..e9c9659d4f5 100644
--- a/doc/raketasks/backup_restore.md
+++ b/doc/raketasks/backup_restore.md
@@ -119,7 +119,7 @@ script on the GitLab task runner pod. For more details, see
[backing up a GitLab installation](https://gitlab.com/gitlab-org/charts/gitlab/blob/master/doc/backup-restore/backup.md#backing-up-a-gitlab-installation).
```shell
-kubectl exec -it <gitlab task-runner pod> backup-utility
+kubectl exec -it <gitlab task-runner pod> -- backup-utility
```
Similar to the Kubernetes case, if you have scaled out your GitLab cluster to
@@ -850,66 +850,6 @@ restoring the new data, which causes an error.
Read more about [configuring NFS mounts](../administration/nfs.md)
-### Restore for installation from source
-
-First, ensure your backup tar file is in the backup directory described in the
-`gitlab.yml` configuration:
-
-```yaml
-## Backup settings
-backup:
- path: "tmp/backups" # Relative paths are relative to Rails.root (default: tmp/backups/)
-```
-
-The default is `/home/git/gitlab/tmp/backups`, and it needs to be owned by the `git` user. Now, you can begin the backup procedure:
-
-```shell
-# Stop processes that are connected to the database
-sudo service gitlab stop
-
-sudo -u git -H bundle exec rake gitlab:backup:restore RAILS_ENV=production
-```
-
-Example output:
-
-```plaintext
-Unpacking backup... [DONE]
-Restoring database tables:
--- create_table("events", {:force=>true})
- -> 0.2231s
-[...]
-- Loading fixture events...[DONE]
-- Loading fixture issues...[DONE]
-- Loading fixture keys...[SKIPPING]
-- Loading fixture merge_requests...[DONE]
-- Loading fixture milestones...[DONE]
-- Loading fixture namespaces...[DONE]
-- Loading fixture notes...[DONE]
-- Loading fixture projects...[DONE]
-- Loading fixture protected_branches...[SKIPPING]
-- Loading fixture schema_migrations...[DONE]
-- Loading fixture services...[SKIPPING]
-- Loading fixture snippets...[SKIPPING]
-- Loading fixture taggings...[SKIPPING]
-- Loading fixture tags...[SKIPPING]
-- Loading fixture users...[DONE]
-- Loading fixture users_projects...[DONE]
-- Loading fixture web_hooks...[SKIPPING]
-- Loading fixture wikis...[SKIPPING]
-Restoring repositories:
-- Restoring repository abcd... [DONE]
-- Object pool 1 ...
-Deleting tmp directories...[DONE]
-```
-
-Next, restore `/home/git/gitlab/.secret` if necessary, [as previously mentioned](#restore-prerequisites).
-
-Restart GitLab:
-
-```shell
-sudo service gitlab restart
-```
-
### Restore for Omnibus GitLab installations
This procedure assumes that:
@@ -1027,6 +967,66 @@ issue.
The GitLab Helm chart uses a different process, documented in
[restoring a GitLab Helm chart installation](https://gitlab.com/gitlab-org/charts/gitlab/blob/master/doc/backup-restore/restore.md).
+### Restore for installation from source
+
+First, ensure your backup tar file is in the backup directory described in the
+`gitlab.yml` configuration:
+
+```yaml
+## Backup settings
+backup:
+ path: "tmp/backups" # Relative paths are relative to Rails.root (default: tmp/backups/)
+```
+
+The default is `/home/git/gitlab/tmp/backups`, and it needs to be owned by the `git` user. Now, you can begin the backup procedure:
+
+```shell
+# Stop processes that are connected to the database
+sudo service gitlab stop
+
+sudo -u git -H bundle exec rake gitlab:backup:restore RAILS_ENV=production
+```
+
+Example output:
+
+```plaintext
+Unpacking backup... [DONE]
+Restoring database tables:
+-- create_table("events", {:force=>true})
+ -> 0.2231s
+[...]
+- Loading fixture events...[DONE]
+- Loading fixture issues...[DONE]
+- Loading fixture keys...[SKIPPING]
+- Loading fixture merge_requests...[DONE]
+- Loading fixture milestones...[DONE]
+- Loading fixture namespaces...[DONE]
+- Loading fixture notes...[DONE]
+- Loading fixture projects...[DONE]
+- Loading fixture protected_branches...[SKIPPING]
+- Loading fixture schema_migrations...[DONE]
+- Loading fixture services...[SKIPPING]
+- Loading fixture snippets...[SKIPPING]
+- Loading fixture taggings...[SKIPPING]
+- Loading fixture tags...[SKIPPING]
+- Loading fixture users...[DONE]
+- Loading fixture users_projects...[DONE]
+- Loading fixture web_hooks...[SKIPPING]
+- Loading fixture wikis...[SKIPPING]
+Restoring repositories:
+- Restoring repository abcd... [DONE]
+- Object pool 1 ...
+Deleting tmp directories...[DONE]
+```
+
+Next, restore `/home/git/gitlab/.secret` if necessary, [as previously mentioned](#restore-prerequisites).
+
+Restart GitLab:
+
+```shell
+sudo service gitlab restart
+```
+
### Restoring only one or a few projects or groups from a backup
Although the Rake task used to restore a GitLab instance doesn't support
@@ -1050,9 +1050,10 @@ is being discussed in [issue #17517](https://gitlab.com/gitlab-org/gitlab/-/issu
## Alternative backup strategies
-If your GitLab server contains a lot of Git repository data, you may find the
-GitLab backup script to be too slow. In this case you can consider using
-file system snapshots as part of your backup strategy.
+If your GitLab instance contains a lot of Git repository data, you may find the
+GitLab backup script to be too slow. If your GitLab instance has a lot of forked
+projects, the regular backup task also duplicates the Git data for all of them.
+In these cases, consider using file system snapshots as part of your backup strategy.
Example: Amazon EBS
@@ -1074,6 +1075,71 @@ VM snapshots of the entire GitLab server. It's not uncommon however for a VM
snapshot to require you to power down the server, which limits this solution's
practical use.
+### Back up repository data separately
+
+First, ensure you back up existing GitLab data while [skipping repositories](#excluding-specific-directories-from-the-backup):
+
+```shell
+# for Omnibus GitLab package installations
+sudo gitlab-backup create SKIP=repositories
+
+# for installations from source:
+sudo -u git -H bundle exec rake gitlab:backup:create SKIP=repositories RAILS_ENV=production
+```
+
+For manually backing up the Git repository data on disk, there are multiple possible strategies:
+
+- Use snapshots, such as the previous examples of Amazon EBS drive snapshots, or LVM snapshots + rsync.
+- Use [GitLab Geo](../administration/geo/index.md) and rely on the repository data on a Geo secondary site.
+- [Prevent writes and copy the Git repository data](#prevent-writes-and-copy-the-git-repository-data).
+- [Create an online backup by marking repositories as read-only (experimental)](#online-backup-through-marking-repositories-as-read-only-experimental).
+
+#### Prevent writes and copy the Git repository data
+
+Git repositories must be copied in a consistent way. They should not be copied during concurrent write
+operations, as this can lead to inconsistencies or corruption issues. For more details,
+[issue 270422](https://gitlab.com/gitlab-org/gitlab/-/issues/270422 "Provide documentation on preferred method of migrating Gitaly servers")
+has a longer discussion explaining the potential problems.
+
+To prevent writes to the Git repository data, there are two possible approaches:
+
+- Use [maintenance mode](../administration/maintenance_mode/index.md) to place GitLab in a read-only state.
+- Create explicit downtime by stopping all Gitaly services before backing up the repositories:
+
+ ```shell
+ sudo gitlab-ctl stop gitaly
+ # execute git data copy step
+ sudo gitlab-ctl start gitaly
+ ```
+
+You can copy Git repository data using any method, as long as writes are prevented on the data being copied
+(to prevent inconsistencies and corruption issues). In order of preference and safety, the recommended methods are:
+
+1. Use `rsync` with archive-mode, delete, and checksum options, for example:
+
+ ```shell
+ rsync -aR --delete --checksum source destination # be extra safe with the order as it will delete existing data if inverted
+ ```
+
+1. Use a [`tar` pipe to copy the entire repository's directory to another server or location](../administration/operations/moving_repositories.md#tar-pipe-to-another-server).
+
+1. Use `sftp`, `scp`, `cp`, or any other copying method.
+
+#### Online backup through marking repositories as read-only (experimental)
+
+One way of backing up repositories without requiring instance-wide downtime
+is to programmatically mark projects as read-only while copying the underlying data.
+
+There are a few possible downsides to this:
+
+- Repositories are read-only for a period of time that scales with the size of the repository.
+- Backups take a longer time to complete due to marking each project as read-only, potentially leading to inconsistencies. For example,
+ a possible date discrepancy between the last data available for the first project that gets backed up compared to
+ the last project that gets backed up.
+- Fork networks should be entirely read-only while the projects inside get backed up to prevent potential changes to the pool repository.
+
+There is an **experimental** script that attempts to automate this process in [Snippet 2149205](https://gitlab.com/-/snippets/2149205).
+
## Backup and restore for installations using PgBouncer
Do NOT backup or restore GitLab through a PgBouncer connection. These
@@ -1406,3 +1472,47 @@ If this happens, examine the following:
- Confirm there is sufficient disk space for the Gzip operation.
- If NFS is being used, check if the mount option `timeout` is set. The
default is `600`, and changing this to smaller values results in this error.
+
+### `gitaly-backup` for repository backup and restore **(FREE SELF)**
+
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/333034) in GitLab 14.2.
+> - [Deployed behind a feature flag](../user/feature_flags.md), enabled by default.
+> - Recommended for production use.
+> - For GitLab self-managed instances, GitLab administrators can opt to [disable it](#disable-or-enable-gitaly-backup).
+
+There can be
+[risks when disabling released features](../administration/feature_flags.md#risks-when-disabling-released-features).
+Refer to this feature's version history for more details.
+
+`gitaly-backup` is used by the backup Rake task to create and restore repository backups from Gitaly.
+`gitaly-backup` replaces the previous backup method that directly calls RPCs on Gitaly from GitLab.
+
+The backup Rake task must be able to find this executable. It can be configured in Omnibus GitLab packages:
+
+1. Add the following to `/etc/gitlab/gitlab.rb`:
+
+ ```ruby
+ gitlab_rails['backup_gitaly_backup_path'] = '/path/to/gitaly-backup'
+ ```
+
+1. [Reconfigure GitLab](../administration/restart_gitlab.md#omnibus-gitlab-reconfigure)
+ for the changes to take effect
+
+#### Disable or enable `gitaly-backup`
+
+`gitaly-backup` is under development but ready for production use.
+It is deployed behind a feature flag that is **enabled by default**.
+[GitLab administrators with access to the GitLab Rails console](../administration/feature_flags.md)
+can opt to disable it.
+
+To disable it:
+
+```ruby
+Feature.disable(:gitaly_backup)
+```
+
+To enable it:
+
+```ruby
+Feature.enable(:gitaly_backup)
+```
diff --git a/doc/raketasks/import.md b/doc/raketasks/import.md
index b18413987a3..7f817f9c422 100644
--- a/doc/raketasks/import.md
+++ b/doc/raketasks/import.md
@@ -142,7 +142,7 @@ to do so. In a Rails console session, run the following to migrate a project:
```ruby
project = Project.find_by_full_path('gitlab-org/gitlab')
-project.write_repository_config
+project.set_full_path
```
In a Rails console session, run the following to migrate all of a namespace's
diff --git a/doc/raketasks/index.md b/doc/raketasks/index.md
index d3735fc7454..df71b8791f8 100644
--- a/doc/raketasks/index.md
+++ b/doc/raketasks/index.md
@@ -42,6 +42,7 @@ The following Rake tasks are available for use with GitLab:
| [Project import/export](../administration/raketasks/project_import_export.md) | Prepare for [project exports and imports](../user/project/settings/import_export.md). |
| [Sample Prometheus data](generate_sample_prometheus_data.md) | Generate sample Prometheus data. |
| [Sidekiq job migration](sidekiq_job_migration.md) | Migrate Sidekiq jobs scheduled for future dates to a new queue. |
+| [SMTP maintenance](../administration/raketasks/smtp.md) | SMTP-related tasks. |
| [SPDX license list import](spdx.md) | Import a local copy of the [SPDX license list](https://spdx.org/licenses/) for matching [License Compliance policies](../user/compliance/license_compliance/index.md). |
| [Repository storage](../administration/raketasks/storage.md) | List and migrate existing projects and attachments from legacy storage to hashed storage. |
| [Uploads migrate](../administration/raketasks/uploads/migrate.md) | Migrate uploads between local storage and object storage. |
diff --git a/doc/security/README.md b/doc/security/README.md
index 5ab8653dc35..0e6c2f63f9e 100644
--- a/doc/security/README.md
+++ b/doc/security/README.md
@@ -1,5 +1,6 @@
---
redirect_to: 'index.md'
+remove_date: '2021-09-28'
---
This document was moved to [another location](index.md).
diff --git a/doc/security/cicd_variables.md b/doc/security/cicd_variables.md
deleted file mode 100644
index 06fe0ff4276..00000000000
--- a/doc/security/cicd_variables.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: '../ci/variables/index.md#cicd-variable-security'
-remove_date: '2021-07-04'
----
-
-This document was moved to [another location](../ci/variables/index.md#cicd-variable-security).
-
-<!-- This redirect file can be deleted after <2021-07-04>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/ssh/README.md b/doc/ssh/README.md
index 5ab8653dc35..0e6c2f63f9e 100644
--- a/doc/ssh/README.md
+++ b/doc/ssh/README.md
@@ -1,5 +1,6 @@
---
redirect_to: 'index.md'
+remove_date: '2021-09-28'
---
This document was moved to [another location](index.md).
diff --git a/doc/ssh/index.md b/doc/ssh/index.md
index fd95a483344..c4e651a0072 100644
--- a/doc/ssh/index.md
+++ b/doc/ssh/index.md
@@ -205,18 +205,21 @@ To use SSH with GitLab, copy your public key to your GitLab account.
Replace `id_ed25519.pub` with your filename. For example, use `id_rsa.pub` for RSA.
1. Sign in to GitLab.
-1. In the top right corner, select your avatar.
+1. On the top bar, in the top right corner, select your avatar.
1. Select **Preferences**.
-1. From the left sidebar, select **SSH Keys**.
+1. On the left sidebar, select **SSH Keys**.
1. In the **Key** box, paste the contents of your public key.
If you manually copied the key, make sure you copy the entire key,
which starts with `ssh-ed25519` or `ssh-rsa`, and may end with a comment.
-1. In the **Title** text box, type a description, like _Work Laptop_ or
- _Home Workstation_.
+1. In the **Title** box, type a description, like `Work Laptop` or
+ `Home Workstation`.
1. Optional. In the **Expires at** box, select an expiration date. (Introduced in [GitLab 12.9](https://gitlab.com/gitlab-org/gitlab/-/issues/36243).)
- The expiration date is informational only, and does not prevent you from using
- the key. However, administrators can view expiration dates and
- use them for guidance when [deleting keys](../user/admin_area/credentials_inventory.md#delete-a-users-ssh-key).
+ In:
+ - GitLab 13.12 and earlier, the expiration date is informational only. It doesn't prevent
+ you from using the key. Administrators can view expiration dates and use them for
+ guidance when [deleting keys](../user/admin_area/credentials_inventory.md#delete-a-users-ssh-key).
+ - GitLab 14.0 and later, the expiration date is enforced. Administrators can
+ [allow expired keys to be used](../user/admin_area/settings/account_and_limit_settings.md#allow-expired-ssh-keys-to-be-used).
- GitLab checks all SSH keys at 02:00 AM UTC every day. It emails an expiration notice for all SSH keys that expire on the current date. ([Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/322637) in GitLab 13.11.)
- GitLab checks all SSH keys at 01:00 AM UTC every day. It emails an expiration notice for all SSH keys that are scheduled to expire seven days from now. ([Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/322637) in GitLab 13.11.)
1. Select **Add key**.
diff --git a/doc/subscriptions/gitlab_com/index.md b/doc/subscriptions/gitlab_com/index.md
index fad415807bd..55fb77fe927 100644
--- a/doc/subscriptions/gitlab_com/index.md
+++ b/doc/subscriptions/gitlab_com/index.md
@@ -94,6 +94,8 @@ The following table describes details of your subscription:
To view a list of seats being used, go to **Settings > Billing**.
Under **Seats currently in use**, select **See usage**.
+You can also see this information in your group settings by going to **Menu > Groups > Your Group > Settings > Usage Quotas**, and the information about **Seat usage** will be under the **Seats** tab.
+
The **Seat usage** page lists all users occupying seats. Details for each user include:
- Full name
@@ -120,6 +122,20 @@ For example:
| Amir | `ami` | Yes |
| Amir | `amr` | No |
+### Export seat usage
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/262877) in GitLab 14.2.
+
+To export seat usage data as a CSV file:
+
+1. On the top bar, select **Menu > Groups** and find your group.
+1. On the left sidebar, select **Settings > Billing**.
+1. Under **Seats currently in use**, select **See usage**.
+1. Select **Export list**.
+
+The generated list contains all seats being used,
+and is not affected by the current search.
+
## Subscription expiry
When your subscription expires, you can continue to use paid features of GitLab for 14 days.
diff --git a/doc/subscriptions/quarterly_reconciliation.md b/doc/subscriptions/quarterly_reconciliation.md
new file mode 100644
index 00000000000..af9fec1ddc4
--- /dev/null
+++ b/doc/subscriptions/quarterly_reconciliation.md
@@ -0,0 +1,20 @@
+---
+stage: Fulfillment
+group: Purchase
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# The quarterly subscription reconciliation process
+
+GitLab reviews your seat usage every quarter and sends you an invoice for
+any overages.
+
+Annual reviews, also known as the [annual true-up process](self_managed/index.md#users-over-license),
+require you to pay the full annual subscription fee for users added anytime during the year. With quarterly
+reviews, you only pay for the remaining period of your subscription term.
+
+For example, if you add users in the third quarter of your subscription term, you only
+pay 25% of what you would have paid previously. This results in substantial savings.
+
+If it's not possible for you to participate in quarterly reconciliations, you can opt out of the
+process by using a contract amendment. In that case, you default to the annual review.
diff --git a/doc/subscriptions/self_managed/index.md b/doc/subscriptions/self_managed/index.md
index 2f3d705c1fe..51913ac2650 100644
--- a/doc/subscriptions/self_managed/index.md
+++ b/doc/subscriptions/self_managed/index.md
@@ -38,22 +38,62 @@ for each tier, see the
## Subscription seats
A GitLab self-managed subscription uses a hybrid model. You pay for a subscription
-according to the maximum number of users enabled during the subscription period.
-For instances that are offline or on a closed network, the maximum number of
-simultaneous users in the GitLab self-managed installation is checked each quarter,
-using [Seat Link](#seat-link).
+according to the [maximum number](#maximum-users) of users enabled during the subscription period.
+For instances that aren't offline or on a closed network, the maximum number of
+simultaneous users in the GitLab self-managed installation is checked each quarter.
-### Billable users
+If an instance is unable to generate a quarterly usage report, the existing [true-up model](#users-over-license) is used.
+Prorated charges are not possible without a quarterly usage report.
+
+### View user totals
+
+You can view users for your license and determine if you've gone over your subscription.
+
+1. On the top bar, select **Menu >** **{admin}** **Admin**.
+1. On the left menu, select **Subscription**.
+
+The lists of users are displayed.
+
+#### Billable users
A _billable user_ counts against the number of subscription seats. Every user is considered a
billable user, with the following exceptions:
-- [Deactivated users](../../user/admin_area/moderate_users.md#deactivating-a-user) and
- [blocked users](../../user/admin_area/moderate_users.md#blocking-a-user) don't count as billable users in the current subscription. When they are either deactivated or blocked they release a _billable user_ seat. However, they may
+- [Deactivated users](../../user/admin_area/moderate_users.md#deactivate-a-user) and
+ [blocked users](../../user/admin_area/moderate_users.md#block-a-user) don't count as billable users in the current subscription. When they are either deactivated or blocked they release a _billable user_ seat. However, they may
count toward overages in the subscribed seat count.
-- Users who are [pending approval](../../user/admin_area/approving_users.md).
-- Members with Guest permissions on an Ultimate subscription.
-- GitLab-created service accounts: `Ghost User` and bots [(`Support Bot`](../../user/project/service_desk.md#support-bot-user), [`Project bot users`](../../user/project/settings/project_access_tokens.md#project-bot-users), and so on).
+- Users who are [pending approval](../../user/admin_area/moderate_users.md#users-pending-approval).
+- Members with the Guest role on an Ultimate subscription.
+- Users without project or group memberships on an Ultimate subscription.
+- GitLab-created service accounts: `Ghost User` and bots
+ ([`Support Bot`](../../user/project/service_desk.md#support-bot-user),
+ [`Project bot users`](../../user/project/settings/project_access_tokens.md#project-bot-users), and
+ so on.)
+
+**Billable users** as reported in the `/admin` section is updated once per day.
+
+#### Maximum users
+
+The number of _maximum users_ reflects the highest number of billable users for the current license period.
+
+#### Users over license
+
+The number of _users over license_ shows how many users are in excess of the number allowed by the license. This number reflects the current license period.
+
+For example, if:
+
+- The license allows 100 users and
+- **Maximum users** is 150,
+
+Then this value would be 50.
+
+If the **Maximum users** value is less than or equal to 100, then this value is 0.
+
+A trial license always displays zero for **Users over license**.
+
+If you add more users to your GitLab instance than you are licensed for, payment for the additional users is due [at the time of renewal](../quarterly_reconciliation.md).
+
+If you do not add these users during the renewal process, your license key will not work.
### Tips for managing users and subscription seats
@@ -74,6 +114,140 @@ GitLab has several features which can help you manage the number of users:
users manually.
- View a breakdown of users by role in the [Users statistics](../../user/admin_area/index.md#users-statistics) page.
+## Cloud licensing
+
+> Introduced in GitLab 14.1.
+
+Cloud licensing manages licenses for self-managed GitLab subscription plans. Cloud licensing includes:
+
+- Activation: Unlock plan features and activate your self-managed instance by using an activation code.
+- License sync: Sync subscription data between your self-managed instance and GitLab.
+
+### What cloud licensing includes
+
+#### Auto-renewals
+
+For renewals that occur on or after 2021-08-01, your subscriptions will auto-renew.
+You have the option to manually cancel in the Customers Portal any time until thirty (30) days before renewal.
+
+#### Cloud licensing
+
+You can activate and manage your GitLab licenses by using the Customers Portal.
+This feature was formerly known as Seat Link.
+
+#### Operational data
+
+Service data helps GitLab improve the product experience and provide proactive support.
+Most data is categorized as optional and can be disabled. Data that is categorized as
+operational, like number of issues, pipelines, merge requests, and version, is not configurable.
+
+Please see our [service usage privacy page](https://about.gitlab.com/handbook/legal/privacy/services-usage-data/)
+for details on what information is collected.
+
+#### Quarterly subscription reconciliation
+
+See the [quarterly subscription reconciliation section](../quarterly_reconciliation.md) for more information.
+
+### How cloud licensing works
+
+#### Activate your license
+
+1. When you purchase a GitLab self-managed plan, an activation code is generated.
+ This activation code is sent to the email address associated with the Customers Portal account.
+1. In GitLab, on the top bar, select **Menu >** **{admin}** **Admin**.
+1. On the left sidebar, select **Subscription** and paste the activation code in the text field.
+1. Select **Activate**.
+
+The page displays the details of the subscription.
+
+#### License sync
+
+Once a day, a job sends license data to the Customers Portal. This information automates activation,
+provisioning, co-terms, and renewals. The data is sent securely through an encrypted HTTPS connection
+to `customers.gitlab.com` on port `443`.
+
+This sync job runs daily around 3AM UTC. If the job fails, it is retried up to 12 times over approximately 17 hours.
+
+The daily job provides **only** the following information to the Customers Portal:
+
+- Date
+- Timestamp
+- License key
+- Historical maximum user count
+- Billable users count
+- GitLab version
+- Hostname
+- Instance ID
+- MD5 hash of license
+
+<details>
+<summary>Click here to view an example of a cloud licensing sync request.</summary>
+<pre><code>
+{
+ "gitlab_version": "14.1.0-pre",
+ "timestamp": "2021-06-14T12:00:09Z",
+ "date": "2021-06-14",
+ "license_key": "eyJkYXRhIjoiYlR2MFBPSEJPSnNOc1plbGtFRGZ6M
+ Ex1mWWhyM1Y3NWFOU0Zj\nak1xTmtLZHU1YzJJUWJzZzVxT3FQRU1PXG5
+ KRzErL2ZNd0JuKzBwZmQ3YnY4\nTkFrTDFsMFZyQi9NcG5DVEdkTXQyNT
+ R3NlR0ZEc0MjBoTTVna2VORlVcbjAz\nbUgrNGl5N0NuenRhZlljd096R
+ nUzd2JIWEZ3NzV2V2lqb3FuQ3RYZWppWVFU\neDdESkgwSUIybFJhZlxu
+ Y2k0Mzl3RWlKYjltMkJoUzExeGIwWjN3Uk90ZGp1\nNXNNT3dtL0Vtc3l
+ zWVowSHE3ekFILzBjZ2FXSXVQXG5ENWJwcHhOZzRlcFhr\neFg0K3d6Zk
+ w3cHRQTTJMTGdGb2Vwai90S0VJL0ZleXhxTEhvaUc2NzVIbHRp\nVlRcb
+ nYzY090bmhsdTMrc0VGZURJQ3VmcXFFUS9ISVBqUXRhL3ZTbW9SeUNh\n
+ SjdDTkU4YVJnQTlBMEF5OFBiZlxuT0VORWY5WENQVkREdUMvTTVCb25Re
+ ENv\nK0FrekFEWWJ6VGZLZ1dBRjgzUXhyelJWUVJGTTErWm9TeTQ4XG5V
+ aWdXV0d4\nQ2graGtoSXQ1eXdTaUFaQzBtZGd2aG1YMnl1KzltcU9WMUx
+ RWXE4a2VSOHVn\nV3BMN1VFNThcbnMvU3BtTk1JZk5YUHhOSmFlVHZqUz
+ lXdjlqMVZ6ODFQQnFx\nL1phaTd6MFBpdG5NREFOVnpPK3h4TE5CQ1xub
+ GtacHNRdUxTZmtWWEZVUnB3\nWTZtWGdhWE5GdXhURjFndWhyVDRlTE92
+ bTR3bW1ac0pCQnBkVWJIRGNyXG5z\nUjVsTWJxZEVUTXJNRXNDdUlWVlZ
+ CTnJZVTA2M2dHblc4eVNXZTc0enFUcW1V\nNDBrMUZpN3RTdzBaZjBcbm
+ 16UGNYV0RoelpkVk02cWR1dTl0Q1VqU05tWWlU\nOXlwRGZFaEhXZWhjb
+ m50RzA5UWVjWEM5em52Y1BjU1xueFU0MDMvVml5R3du\nQXNMTHkyajN5
+ b3hhTkJUSWpWQ1BMUjdGeThRSEVnNGdBd0x6RkRHVWg1M0Qz\nMHFRXG5
+ 5eWtXdHNHN3VBREdCNmhPODFJanNSZnEreDhyb2ZpVU5JVXo4NCtD\nem
+ Z1V1Q0K1l1VndPTngyc1l0TU5cbi9WTzlaaVdPMFhtMkZzM2g1NlVXcGI
+ y\nSUQzRnRlbW5vZHdLOWU4L0tiYWRESVRPQmgzQnIxbDNTS2tHN1xuQ3
+ hpc29D\nNGh4UW5mUmJFSmVoQkh6eHV1dkY5aG11SUsyVmVDQm1zTXZCY
+ nZQNGdDbHZL\ndUExWnBEREpDXG41eEhEclFUd3E1clRYS2VuTjhkd3BU
+ SnVLQXgvUjlQVGpy\ncHJLNEIzdGNMK0xIN2JKcmhDOTlabnAvLzZcblZ
+ HbXk5SzJSZERIcXp3U2c3\nQjFwSmFPcFBFUHhOUFJxOUtnY2hVR0xWMF
+ d0Rk9vPVxuIiwia2V5IjoiUURM\nNU5paUdoRlVwZzkwNC9lQWg5bFY0Q
+ 3pkc2tSQjBDeXJUbG1ZNDE2eEpPUzdM\nVXkrYXRhTFdpb0lTXG5sTWlR
+ WEU3MVY4djFJaENnZHJGTzJsTUpHbUR5VHY0\ndWlSc1FobXZVWEhpL3h
+ vb1J4bW9XbzlxK2Z1OGFcblB6anp1TExhTEdUQVdJ\nUDA5Z28zY3JCcz
+ ZGOEVLV28xVzRGWWtUUVh2TzM0STlOSjVHR1RUeXkzVkRB\nc1xubUdRe
+ jA2eCtNNkFBM1VxTUJLZXRMUXRuNUN2R3l3T1VkbUx0eXZNQ3JX\nSWVQ
+ TElrZkJwZHhPOUN5Z1dCXG44UkpBdjRSQ1dkMlFhWVdKVmxUMllRTXc5\
+ nL29LL2hFNWRQZ1pLdWEyVVZNRWMwRkNlZzg5UFZrQS9mdDVcbmlETWlh
+ YUZz\nakRVTUl5SjZSQjlHT2ovZUdTRTU5NVBBMExKcFFiVzFvZz09XG4
+ iLCJpdiI6\nImRGSjl0YXlZWit2OGlzbGgyS2ZxYWc9PVxuIn0=\n",
+ "max_historical_user_count": 75,
+ "billable_users_count": 75,
+ "hostname": "gitlab.example.com",
+ "instance_id": "9367590b-82ad-48cb-9da7-938134c29088",
+ "license_md5": "002f02470fe45ef6a333a4282aca6222"
+}
+</code></pre>
+</details>
+
+#### Sync subscription details
+
+You can manually sync your subscription details at any time.
+
+1. On the top bar, select **Menu >** **{admin}** **Admin**.
+1. On the left sidebar, select **Subscription**.
+1. In the **Subscription details** section, select **Sync subscription details**.
+
+A job is queued. When the job finishes, the subscription details are updated.
+
+#### Troubleshooting cloud licensing sync
+
+If the sync job is not working, ensure you allow network traffic from your GitLab instance
+to IP address `104.46.106.135:443` (`customers.gitlab.com`).
+
## Obtain a subscription
To subscribe to GitLab through a GitLab self-managed installation:
@@ -183,7 +357,7 @@ Starting 30 days before a subscription expires, GitLab notifies administrators o
We recommend following these steps during renewal:
-1. Prune any inactive or unwanted users by [blocking them](../../user/admin_area/moderate_users.md#blocking-a-user).
+1. Prune any inactive or unwanted users by [blocking them](../../user/admin_area/moderate_users.md#block-a-user).
1. Determine if you have a need for user growth in the upcoming subscription.
1. Log in to the [Customers Portal](https://customers.gitlab.com/customers/sign_in) and select the **Renew** button beneath your existing subscription.
@@ -198,117 +372,6 @@ We recommend following these steps during renewal:
An invoice is generated for the renewal and available for viewing or download on the [View invoices](https://customers.gitlab.com/receipts) page. If you have difficulty during the renewal process, contact our [support team](https://support.gitlab.com/hc/en-us/requests/new?ticket_form_id=360000071293) for assistance.
-### Seat Link
-
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/208832) in GitLab 12.9.
-
-Seat Link allows GitLab Inc. to provide our GitLab self-managed customers with prorated charges for user growth throughout the year using a quarterly reconciliation process.
-
-Seat Link daily sends a count of all users in connected GitLab self-managed instances to GitLab. That information is used to automate prorated reconciliations. The data is sent securely through an encrypted HTTPS connection to `customers.gitlab.com` on port `443`.
-
-Seat Link provides **only** the following information to GitLab:
-
-- Date
-- Timestamp
-- License key
-- Historical maximum user count
-- Billable users count
-- GitLab version
-- Hostname
-- Instance ID
-- MD5 hash of license
-
-For offline or closed network customers, the existing [true-up model](#users-over-license) is used. Prorated charges are not possible without user count data.
-
-<details>
-<summary>Click here to view example content of a Seat Link POST request.</summary>
-
-<pre><code>
-{
- gitlab_version: '13.12.0',
- timestamp: '2020-01-29T18:25:57+00:00',
- date: '2020-01-29',
- license_key: 'ZXlKa1lYUmhJam9pWm5WNmVsTjVZekZ2YTJoV2NucDBh
-RXRxTTA5amQxcG1VMVZqDQpXR3RwZEc5SGIyMVhibmxuZDJ0NWFrNXJTVzVH
-UzFCT1hHNVRiVFIyT0ZaUFlVSm1OV1ZGV0VObE1uVk4NCk4xY3ZkM1F4Y2to
-MFFuVklXSFJvUWpSM01VdE9SVE5rYkVjclZrdDJORkpOTlhka01qaE5aalpj
-YmxSMg0KWVd3MFNFTldTRmRtV1ZGSGRDOUhPR05oUVZvNUsxVnRXRUZIZFU1
-U1VqUm5aVFZGZUdwTWIxbDFZV1EyDQphV1JTY1V4c1ZYSjNPVGhrYVZ4dVlu
-TkpWMHRJZUU5dmF6ZEJRVVkxTlVWdFUwMTNSMGRHWm5SNlJFcFYNClQyVkJl
-VXc0UzA0NWFFb3ZlSFJrZW0xbVRqUlZabkZ4U1hWcWNXRnZYRzVaTm5GSmVW
-UnJVR1JQYTJKdA0KU0ZZclRHTmFPRTVhZEVKMUt6UjRkSE15WkRCT1UyNWlS
-MGRJZDFCdmRFWk5Za2h4Tm5sT1VsSktlVlYyDQpXRmhjYmxSeU4wRnRNMU5q
-THpCVWFGTmpTMnh3UWpOWVkyc3pkbXBST1dnelZHY3hUV3hxVDIwdlZYRlQN
-Ck9EWTJSVWx4WlVOT01EQXhVRlZ3ZGs1Rk0xeHVSVEJTTDFkMWJUQTVhV1ZK
-WjBORFdWUktaRXNyVnpsTw0KTldkWWQwWTNZa05VWlZBMmRUVk9kVUpxT1hV
-Mk5VdDFTUzk0TUU5V05XbFJhWGh0WEc1cVkyWnhaeTlXDQpTMEpyZWt0cmVY
-bzBOVGhFVG1oU1oxSm5WRFprY0Uwck0wZEdhVUpEV1d4a1RXZFRjVU5tYTB0
-a2RteEQNCmNWTlFSbFpuWlZWY2JpdFVVbXhIV0d4MFRuUnRWbkJKTkhwSFJt
-TnRaMGsyV0U1MFFUUXJWMUJVTWtOSA0KTVhKUWVGTkxPVTkzV1VsMlVUUldk
-R3hNTWswNU1USlNjRnh1U1UxTGJTdHRRM1l5YTFWaWJtSlBTMkUxDQplRkpL
-SzJSckszaG1hVXB1ZVRWT1UwdHZXV0ZOVG1WamMyVjRPV0pSUlZkUU9UUnpU
-VWh2Wlc5cFhHNUgNClNtRkdVMDUyY1RGMWNGTnhVbU5JUkZkeGVWcHVRMnBh
-VTBSUGR6VnRNVGhvWTFBM00zVkZlVzFOU0djMA0KY1ZFM1FWSlplSFZ5UzFS
-aGIxTmNia3BSUFQxY2JpSXNJbxRsZVNJNkltZFhiVzFGVkRZNWNFWndiV2Rt
-DQpNWEIyY21SbFFrdFNZamxaYURCdVVHcHhiRlV3Tm1WQ2JGSlFaSFJ3Y0Rs
-cFMybGhSMnRPTkZOMWNVNU0NClVGeHVTa3N6TUUxcldVOTVWREl6WVVWdk5U
-ZGhWM1ZvVjJkSFRtZFBZVXRJTkVGcE55dE1NRE5dWnpWeQ0KWlV0aWJsVk9T
-RmRzVVROUGRHVXdWR3hEWEc1MWjWaEtRMGQ2YTAxWFpUZHJURTVET0doV00w
-ODRWM0V2DQphV2M1YWs5cWFFWk9aR3BYTm1aVmJXNUNaazlXVUVRMWRrMXpj
-bTFDV0V4dldtRmNibFpTTWpWU05VeFMNClEwTjRNMWxWCUtSVGEzTTJaV2xE
-V0hKTFRGQmpURXRsZFVaQlNtRnJTbkpPZGtKdlUyUmlNVWxNWWpKaQ0KT0dw
-c05YbE1kVnh1YzFWbk5VZDFhbU56ZUM5Tk16TXZUakZOVW05cVpsVTNObEo0
-TjJ4eVlVUkdkWEJtDQpkSHByYWpreVJrcG9UVlo0Y0hKSU9URndiV2RzVFdO
-VlhHNXRhVmszTkV0SVEzcEpNMWRyZEVoRU4ydHINCmRIRnFRVTlCVUVVM1pV
-SlRORE4xUjFaYVJGb3JlWGM5UFZ4dUlpd2lhWFlpt2lKV00yRnNVbk5RTjJk
-Sg0KU1hNMGExaE9SVGR2V2pKQlBUMWNiaUo5DQo=',
- hostname: 'gitlab.example.com',
- instance_id: 'c1ac02cb-cb3f-4120-b7fe-961bbfa3abb7',
- license_md5: '7cd897fffb3517dddf01b79a0889b515'
-}
-</code></pre>
-
-</details>
-
-You can view the exact JSON payload in the administration panel. To view the payload:
-
-1. On the top bar, select **Menu >** **{admin}** **Admin**.
-1. On the left sidebar, select **Settings > Metrics and profiling** and expand **Seat Link**.
-1. Select **Preview payload**.
-
-#### Disable Seat Link
-
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/212375) in GitLab 12.10.
-
-Seat Link is enabled by default.
-
-To disable this feature:
-
-1. On the top bar, select **Menu >** **{admin}** **Admin**.
-1. On the left sidebar, select **Settings > Metrics and profiling** and expand **Seat Link**.
-1. Clear the **Enable Seat Link** checkbox.
-1. Select **Save changes**.
-
-To disable Seat Link in an Omnibus GitLab installation, and prevent it from
-being configured in the future through the administration panel, set the following in
-[`gitlab.rb`](https://docs.gitlab.com/omnibus/settings/configuration.html#configuration-options):
-
-```ruby
-gitlab_rails['seat_link_enabled'] = false
-```
-
-To disable Seat Link in a GitLab source installation, and prevent it from
-being configured in the future through the administration panel,
-set the following in `gitlab.yml`:
-
-```yaml
-production: &base
- # ...
- gitlab:
- # ...
- seat_link_enabled: false
-```
-
## Upgrade your subscription tier
To upgrade your [GitLab tier](https://about.gitlab.com/pricing/):
diff --git a/doc/system_hooks/system_hooks.md b/doc/system_hooks/system_hooks.md
index 7fabe099f38..f86d3940a33 100644
--- a/doc/system_hooks/system_hooks.md
+++ b/doc/system_hooks/system_hooks.md
@@ -55,7 +55,7 @@ To create a system hook:
1. On the top bar, select **Menu >** **{admin}** **Admin**.
1. In the left sidebar, select **System Hooks**.
1. Provide the **URL** and **Secret Token**.
-1. Select the check box next to each **Trigger** you want to enable.
+1. Select the checkbox next to each **Trigger** you want to enable.
1. Select **Enable SSL verification**, if desired.
1. Click **Add system hook**.
diff --git a/doc/topics/autodevops/customize.md b/doc/topics/autodevops/customize.md
index 8f48b1fc57a..72f688a0ed5 100644
--- a/doc/topics/autodevops/customize.md
+++ b/doc/topics/autodevops/customize.md
@@ -208,6 +208,10 @@ If you need to specifically remove a part of the file, you can also copy and pas
[Auto DevOps template](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Auto-DevOps.gitlab-ci.yml)
into your project and edit it as needed.
+## Use multiple Kubernetes clusters
+
+See [Multiple Kubernetes clusters for Auto DevOps](multiple_clusters_auto_devops.md).
+
## Customizing the Kubernetes namespace
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/27630) in GitLab 12.6.
@@ -338,7 +342,7 @@ You must define environment-scoped CI/CD variables for `POSTGRES_ENABLED` and
`DATABASE_URL` in your project's CI/CD settings:
1. Disable the built-in PostgreSQL installation for the required environments using
- environment-scoped [CI/CD variables](../../ci/environments/index.md#scoping-environments-with-specs).
+ environment-scoped [CI/CD variables](../../ci/environments/index.md#scope-environments-with-specs).
For this use case, it's likely that only `production` must be added to this
list. The built-in PostgreSQL setup for Review Apps and staging is sufficient.
@@ -379,6 +383,7 @@ applications.
| `AUTO_DEVOPS_CHART_REPOSITORY_NAME` | From GitLab 11.11, used to set the name of the Helm repository. Defaults to `gitlab`. |
| `AUTO_DEVOPS_CHART_REPOSITORY_USERNAME` | From GitLab 11.11, used to set a username to connect to the Helm repository. Defaults to no credentials. Also set `AUTO_DEVOPS_CHART_REPOSITORY_PASSWORD`. |
| `AUTO_DEVOPS_CHART_REPOSITORY_PASSWORD` | From GitLab 11.11, used to set a password to connect to the Helm repository. Defaults to no credentials. Also set `AUTO_DEVOPS_CHART_REPOSITORY_USERNAME`. |
+| `AUTO_DEVOPS_CHART_REPOSITORY_PASS_CREDENTIALS` | From GitLab 14.2, set to a non-empty value to enable forwarding of the Helm repository credentials to the chart server when the chart artifacts are on a different host than repository. |
| `AUTO_DEVOPS_DEPLOY_DEBUG` | From GitLab 13.1, if this variable is present, Helm outputs debug logs. |
| `AUTO_DEVOPS_ALLOW_TO_FORCE_DEPLOY_V<N>` | From [auto-deploy-image](https://gitlab.com/gitlab-org/cluster-integration/auto-deploy-image) v1.0.0, if this variable is present, a new major version of chart is forcibly deployed. For more information, see [Ignore warnings and continue deploying](upgrading_auto_deploy_dependencies.md#ignore-warnings-and-continue-deploying). |
| `BUILDPACK_URL` | Buildpack's full URL. [Must point to a URL supported by Pack or Herokuish](#custom-buildpacks). |
@@ -587,7 +592,7 @@ service:
> [Introduced](https://gitlab.com/gitlab-org/gitlab-ci-yml/-/merge_requests/160) in GitLab 10.8.
NOTE:
-You can also set this inside your [project's settings](index.md#deployment-strategy).
+You can also set this inside your [project's settings](requirements.md#auto-devops-deployment-strategy).
The normal behavior of Auto DevOps is to use continuous deployment, pushing
automatically to the `production` environment every time a new pipeline is run
@@ -616,7 +621,7 @@ If you define `CANARY_ENABLED` with a non-empty value, then two manual jobs are
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/5415) in GitLab 10.8.
NOTE:
-You can also set this inside your [project's settings](index.md#deployment-strategy).
+You can also set this inside your [project's settings](requirements.md#auto-devops-deployment-strategy).
When you're ready to deploy a new version of your app to production, you may want
to use an incremental rollout to replace just a few pods with the latest code to
@@ -673,7 +678,7 @@ removed in the future.
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/7545) in GitLab 11.4.
NOTE:
-You can also set this inside your [project's settings](index.md#deployment-strategy).
+You can also set this inside your [project's settings](requirements.md#auto-devops-deployment-strategy).
This configuration is based on
[incremental rollout to production](#incremental-rollout-to-production).
diff --git a/doc/topics/autodevops/img/guide_cluster_apps_v12_3.png b/doc/topics/autodevops/img/guide_cluster_apps_v12_3.png
deleted file mode 100644
index 9be414434c7..00000000000
--- a/doc/topics/autodevops/img/guide_cluster_apps_v12_3.png
+++ /dev/null
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_first_pipeline_v12_3.png b/doc/topics/autodevops/img/guide_first_pipeline_v12_3.png
deleted file mode 100644
index 9b51b5cfdd8..00000000000
--- a/doc/topics/autodevops/img/guide_first_pipeline_v12_3.png
+++ /dev/null
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_gitlab_gke_details_v12_3.png b/doc/topics/autodevops/img/guide_gitlab_gke_details_v12_3.png
deleted file mode 100644
index 2f3f8259316..00000000000
--- a/doc/topics/autodevops/img/guide_gitlab_gke_details_v12_3.png
+++ /dev/null
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_google_auth_v12_3.png b/doc/topics/autodevops/img/guide_google_auth_v12_3.png
deleted file mode 100644
index b97b2be9f15..00000000000
--- a/doc/topics/autodevops/img/guide_google_auth_v12_3.png
+++ /dev/null
Binary files differ
diff --git a/doc/topics/autodevops/img/guide_google_signin_v12_3.png b/doc/topics/autodevops/img/guide_google_signin_v12_3.png
deleted file mode 100644
index 58bcc5e67b6..00000000000
--- a/doc/topics/autodevops/img/guide_google_signin_v12_3.png
+++ /dev/null
Binary files differ
diff --git a/doc/topics/autodevops/index.md b/doc/topics/autodevops/index.md
index beb5f6a58f6..f4936e9162d 100644
--- a/doc/topics/autodevops/index.md
+++ b/doc/topics/autodevops/index.md
@@ -6,320 +6,269 @@ info: To determine the technical writer assigned to the Stage/Group associated w
# Auto DevOps **(FREE)**
-> - Introduced in GitLab 11.0 for general availability.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/38366) in GitLab 11.0.
-GitLab Auto DevOps helps to reduce the complexity of software delivery by
-setting up pipelines and integrations for you. Auto DevOps configures
-GitLab CI/CD pipelines including security auditing and vulnerability
-testing.
+GitLab Auto DevOps is a collection of pre-configured features and integrations
+that work together to support your software delivery process.
-Using Auto DevOps, you can:
+Auto DevOps features and integrations:
-- Detect the language of your code.
-- Automatically build, test, and measure code quality.
-- Scan for potential vulnerabilities, security flaws, and licensing issues.
-- Monitor in real-time.
+- Detect your code's language.
+- Build and test your application.
+- Measure code quality.
+- Scan for vulnerabilities and security flaws.
+- Check for licensing issues.
+- Monitor in real time.
- Deploy your application.
-The functionality of Auto DevOps is based on default CI/CD templates that
-auto-discover your source code. These templates enable GitLab to provide
-consistency across your projects, seamless management of processes, and faster
-creation of new projects. Leveraging [CI/CD best practices](../../ci/pipelines/pipeline_efficiency.md)
-and tools, Auto DevOps lets you push your code, with GitLab doing the rest,
-improving your productivity and efficiency.
-
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i>
-For an introduction to Auto DevOps, watch [AutoDevOps in GitLab 11.0](https://youtu.be/0Tc0YYBxqi4) or see this [overview](https://about.gitlab.com/stages-devops-lifecycle/auto-devops/).
+For an introduction to Auto DevOps, watch [Auto DevOps in GitLab 11.0](https://youtu.be/0Tc0YYBxqi4).
-For requirements, read [Requirements for Auto DevOps](requirements.md) for more information.
+## Auto DevOps features
-For GitLab contributors, see the [Auto DevOps development guide](../../development/auto_devops.md).
+Based on the DevOps [stages](stages.md), use Auto DevOps to:
-## Enable or disable Auto DevOps
+**Build your app:**
-Auto DevOps is enabled by default for all projects in self-managed instances
-(as of [GitLab 11.3](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/41729)),
-but not for GitLab SaaS instances.
+- [Auto Build](stages.md#auto-build)
+- [Auto Dependency Scanning](stages.md#auto-dependency-scanning)
-When first using Auto DevOps, review the [requirements](requirements.md) to
-ensure all the necessary components to make full use of Auto DevOps are
-available. First-time users should follow the [quick start guide](quick_start_guide.md).
+**Test your app:**
-Depending on your instance type, you can enable or disable Auto DevOps at the
-following levels:
+- [Auto Test](stages.md#auto-test)
+- [Auto Browser Performance Testing](stages.md#auto-browser-performance-testing)
+- [Auto Code Intelligence](stages.md#auto-code-intelligence)
+- [Auto Code Quality](stages.md#auto-code-quality)
+- [Auto Container Scanning](stages.md#auto-container-scanning)
+- [Auto License Compliance](stages.md#auto-license-compliance)
-| Instance type | [Project](#at-the-project-level) | [Group](#at-the-group-level) | [Instance](#at-the-instance-level) (Admin Area) |
-|---------------------|------------------------|------------------------|------------------------|
-| GitLab SaaS | **{check-circle}** Yes | **{dotted-circle}** No | **{dotted-circle}** No |
-| GitLab self-managed | **{check-circle}** Yes | **{check-circle}** Yes | **{check-circle}** Yes |
+**Deploy your app:**
-When you enable Auto DevOps for your instance, it attempts to run on all
-pipelines in each project. The Auto DevOps setting automatically disables itself for individual
-projects on their first pipeline failure. An instance administrator can enable
-or disable this default in the [Auto DevOps settings](../../user/admin_area/settings/continuous_integration.md#auto-devops).
+- [Auto Review Apps](stages.md#auto-review-apps)
+- [Auto Deploy](stages.md#auto-deploy)
-[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/26655) in GitLab 12.7,
-Auto DevOps runs on pipelines automatically only if a [`Dockerfile` or matching buildpack](stages.md#auto-build)
-exists.
+**Monitor your app:**
-If a [CI/CD configuration file](../../ci/yaml/index.md) is present in the
-project, it remains unchanged and Auto DevOps doesn't affect it.
+- [Auto Monitoring](stages.md#auto-monitoring)
-### At the project level
+**Secure your app:**
-When you enable Auto DevOps for a project, ensure that your project does not have a `.gitlab-ci.yml` present. If it exists, remove it before enabling Auto DevOps.
+- [Auto Dynamic Application Security Testing (DAST)](stages.md#auto-dast)
+- [Auto Static Application Security Testing (SAST)](stages.md#auto-sast)
+- [Auto Secret Detection](stages.md#auto-secret-detection)
-To enable it:
+### How it works
-1. Go to your project's **Settings > CI/CD > Auto DevOps**.
-1. Select the **Default to Auto DevOps pipeline** checkbox to enable it.
-1. (Optional, but recommended) When enabling, you can add in the
- [base domain](#auto-devops-base-domain) Auto DevOps uses to
- [deploy your application](stages.md#auto-deploy),
- and choose the [deployment strategy](#deployment-strategy).
-1. Click **Save changes** for the changes to take effect.
+Auto DevOps detects your code language and uses [CI/CD templates](https://gitlab.com/gitlab-org/gitlab/-/tree/master/lib/gitlab/ci/templates)
+to create and run default pipelines. All you need to kick it off is to
+[enable](#enable-or-disable-auto-devops) it.
-After enabling the feature, an Auto DevOps pipeline is triggered on the default branch.
+Auto DevOps starts by building and testing your application. Then, based on your
+[predefined deployment configuration](requirements.md),
+creates the necessary jobs to deploy your apps to staging
+and/or production. It also sets up [Review Apps](stages.md#auto-review-apps)
+so that you can preview your changes in a per-branch basis.
-### At the group level
+Note that you don't need to set up the deployment upfront. Auto DevOps
+still builds and tests your application. You can define the deployment later.
-> - [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/52447) in GitLab 11.10.
+Auto DevOps avoids the hassle of having to create entire pipelines manually.
+Keep it simple and facilitate an iterative approach: ship your app first,
+then explore the [customizations](customize.md) later.
+You can also [manage Auto DevOps with APIs](customize.md#extend-auto-devops-with-the-api).
-Only administrators and group owners can enable or disable Auto DevOps at the group level.
+Some of the benefits of using Auto DevOps as part of your workflow are:
-When you enable Auto DevOps at group level, the subgroups and projects in that group inherit the configuration. Auto DevOps
-can be specifically enabled or disabled individually for projects and subgroups.
+- Consistency: always start from default templates.
+- Simplicity: create your pipeline with the default settings first, iterate later.
+- Productivity: deploy multiple apps in a short period of time.
+- Efficiency: get things done fast.
-To enable or disable Auto DevOps at the group level:
+### Comparison to application platforms and PaaS
-1. Go to your group's **Settings > CI/CD > Auto DevOps** page.
-1. Select the **Default to Auto DevOps pipeline** checkbox to enable it.
-1. Click **Save changes** for the changes to take effect.
+Auto DevOps provides features often included in an application
+platform or in a Platform as a Service (PaaS).
-### At the instance level **(FREE SELF)**
+Inspired by [Heroku](https://www.heroku.com/), Auto DevOps goes beyond it
+in multiple ways:
-Even when disabled at the instance level, group owners and project maintainers
-can still enable Auto DevOps at the group and project level, respectively.
+- Auto DevOps works with any Kubernetes cluster.
+- There is no additional cost.
+- You can use a cluster hosted by yourself or on any public cloud.
+- Auto DevOps offers an incremental graduation path. If you need to [customize](customize.md), start by changing the templates and evolve from there.
-1. As an administrator, on the top bar, select **Menu >** **{admin}** **Admin**.
-1. Go to **Settings > CI/CD > Continuous Integration and Deployment**.
-1. Select **Default to Auto DevOps pipeline for all projects** to enable it.
-1. (Optional) You can set up the Auto DevOps [base domain](#auto-devops-base-domain),
- for Auto Deploy and Auto Review Apps to use.
-1. Click **Save changes** for the changes to take effect.
+## Get started with Auto DevOps
-### Deployment strategy
+To get started, you only need to [enable Auto DevOps](#enable-or-disable-auto-devops).
+This is enough to run an Auto DevOps pipeline to build and
+test your application.
-> - [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/38542) in GitLab 11.0.
+If you want to build, test, and deploy your app:
-You can change the deployment strategy used by Auto DevOps by visiting your
-project's **Settings > CI/CD > Auto DevOps**. The following options
-are available:
+1. See the [requirements for deployment](requirements.md).
+1. [Enable Auto DevOps](#enable-or-disable-auto-devops).
+1. Follow the [quick start guide](#quick-start).
-- **Continuous deployment to production**: Enables [Auto Deploy](stages.md#auto-deploy)
- with the default branch directly deployed to production.
-- **Continuous deployment to production using timed incremental rollout**: Sets the
- [`INCREMENTAL_ROLLOUT_MODE`](customize.md#timed-incremental-rollout-to-production) variable
- to `timed`. Production deployments execute with a 5 minute delay between
- each increment in rollout.
-- **Automatic deployment to staging, manual deployment to production**: Sets the
- [`STAGING_ENABLED`](customize.md#deploy-policy-for-staging-and-production-environments) and
- [`INCREMENTAL_ROLLOUT_MODE`](customize.md#incremental-rollout-to-production) variables
- to `1` and `manual`. This means:
+As Auto DevOps relies on many components, be familiar with:
- - The default branch is directly deployed to staging.
- - Manual actions are provided for incremental rollout to production.
+- [Continuous methodologies](../../ci/introduction/index.md)
+- [Docker](https://docs.docker.com)
+- [GitLab Runner](https://docs.gitlab.com/runner/)
-NOTE:
-Use the [blue-green deployment](../../ci/environments/incremental_rollouts.md#blue-green-deployment) technique
-to minimize downtime and risk.
+When deploying to a Kubernetes cluster make sure you're also familiar with:
-## Quick start
+- [Kubernetes](https://kubernetes.io/docs/home/)
+- [Helm](https://helm.sh/docs/)
+- [Prometheus](https://prometheus.io/docs/introduction/overview/)
-For GitLab.com users, see the [quick start guide](quick_start_guide.md)
-for setting up Auto DevOps deploying to a Kubernetes cluster on Google Kubernetes
-Engine (GKE).
+### Enable or disable Auto DevOps
-If you use a self-managed instance of GitLab, you must configure the
-[Google OAuth 2.0 OmniAuth Provider](../../integration/google.md) before
-configuring a cluster on GKE. After configuring the provider, you can follow
-the steps in the [quick start guide](quick_start_guide.md) to get started.
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/41729) in GitLab 11.3, Auto DevOps is enabled by default.
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/26655) GitLab 12.7, Auto DevOps runs pipelines automatically only if a [`Dockerfile` or matching buildpack](stages.md#auto-build) exists.
-In [GitLab 13.0](https://gitlab.com/gitlab-org/gitlab/-/issues/208132) and later, it is
-possible to leverage Auto DevOps to deploy to [AWS ECS](requirements.md#auto-devops-requirements-for-amazon-ecs).
+Depending on your instance type, you can enable or disable Auto DevOps at the
+following levels:
-## Comparison to application platforms and PaaS
+| Instance type | [Project](#at-the-project-level) | [Group](#at-the-group-level) | [Instance](#at-the-instance-level) (Admin Area) |
+|---------------------|------------------------|------------------------|------------------------|
+| GitLab SaaS | **{check-circle}** Yes | **{dotted-circle}** No | **{dotted-circle}** No |
+| GitLab self-managed | **{check-circle}** Yes | **{check-circle}** Yes | **{check-circle}** Yes |
-Auto DevOps provides features often included in an application
-platform or a Platform as a Service (PaaS). It takes inspiration from the
-innovative work done by [Heroku](https://www.heroku.com/) and goes beyond it
-in multiple ways:
+Before enabling Auto DevOps, consider [preparing it for deployment](requirements.md). If you don't, Auto DevOps can build and test your app,
+but cannot deploy it.
-- Auto DevOps works with any Kubernetes cluster; you're not limited to running
- on infrastructure managed by GitLab. (Note that many features also work without Kubernetes).
-- There is no additional cost (no markup on the infrastructure costs), and you
- can use a Kubernetes cluster you host or Containers as a Service on any
- public cloud (for example, [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine/)).
-- Auto DevOps has more features including security testing, performance testing,
- and code quality testing.
-- Auto DevOps offers an incremental graduation path. If you need advanced customizations,
- you can start modifying the templates without starting over on a
- completely different platform. Review the [customizing](customize.md) documentation for more information.
+#### At the project level
-## Features
+To use Auto DevOps for individual projects, you can enable it in a
+project-by-project basis. If you intend to use it for more projects,
+you can enable it for a [group](#at-the-group-level) or an
+[instance](#at-the-instance-level). This can save you the time of
+enabling it one by one.
-NOTE:
-Depending on your target platform, some features might not be available to you.
+Only project Maintainers can enable or disable Auto DevOps at the project level.
-Comprised of a set of [stages](stages.md), Auto DevOps brings these best practices to your
-project automatically:
+Before enabling Auto DevOps, ensure that your project does not have a
+`.gitlab-ci.yml` present. If present, your CI/CD configuration takes
+precedence over the Auto DevOps pipeline.
-- [Auto Browser Performance Testing](stages.md#auto-browser-performance-testing)
-- [Auto Build](stages.md#auto-build)
-- [Auto Code Intelligence](stages.md#auto-code-intelligence)
-- [Auto Code Quality](stages.md#auto-code-quality)
-- [Auto Container Scanning](stages.md#auto-container-scanning)
-- [Auto DAST (Dynamic Application Security Testing)](stages.md#auto-dast)
-- [Auto Dependency Scanning](stages.md#auto-dependency-scanning)
-- [Auto Deploy](stages.md#auto-deploy)
-- [Auto License Compliance](stages.md#auto-license-compliance)
-- [Auto Monitoring](stages.md#auto-monitoring)
-- [Auto Review Apps](stages.md#auto-review-apps)
-- [Auto SAST (Static Application Security Testing)](stages.md#auto-sast)
-- [Auto Secret Detection](stages.md#auto-secret-detection)
-- [Auto Test](stages.md#auto-test)
+To enable Auto DevOps for a project:
-As Auto DevOps relies on many different components, you should have a basic
-knowledge of the following:
+1. Go to your project's **Settings > CI/CD > Auto DevOps**.
+1. Select the **Default to Auto DevOps pipeline**.
+1. (Recommended) Add the [base domain](requirements.md#auto-devops-base-domain).
+1. (Recommended) Choose the [deployment strategy](requirements.md#auto-devops-deployment-strategy).
+1. Select **Save changes**.
-- [Kubernetes](https://kubernetes.io/docs/home/)
-- [Helm](https://helm.sh/docs/)
-- [Docker](https://docs.docker.com)
-- [GitLab Runner](https://docs.gitlab.com/runner/)
-- [Prometheus](https://prometheus.io/docs/introduction/overview/)
+GitLab triggers the Auto DevOps pipeline on the default branch.
-Auto DevOps provides great defaults for all the stages and makes use of
-[CI templates](https://gitlab.com/gitlab-org/gitlab/-/tree/master/lib/gitlab/ci/templates). You can, however,
-[customize](customize.md) almost everything to your needs, and
-[manage Auto DevOps with GitLab APIs](customize.md#extend-auto-devops-with-the-api).
+To disable it, follow the same process and deselect **Default to Auto
+DevOps pipeline**.
-For an overview on the creation of Auto DevOps, read more
-[in this blog post](https://about.gitlab.com/blog/2017/06/29/whats-next-for-gitlab-ci/).
+#### At the group level
-NOTE:
-Kubernetes clusters can [be used without](../../user/project/clusters/index.md)
-Auto DevOps.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/52447) in GitLab 11.10.
-## Kubernetes requirements
+When you enable Auto DevOps at group level, the subgroups and projects in that
+group inherit the configuration. This saves you time by batch-enabling it
+rather than enabling individually for each subgroup or project.
-See [Auto DevOps requirements for Kubernetes](requirements.md#auto-devops-requirements-for-kubernetes).
+When enabled for a group, you can still disable Auto DevOps
+for the subgroups and projects where you don't want to use it.
-## Auto DevOps base domain
+Only GitLab administrators and group owners can enable or disable Auto DevOps
+at the group level.
-The Auto DevOps base domain is required to use
-[Auto Review Apps](stages.md#auto-review-apps), [Auto Deploy](stages.md#auto-deploy), and
-[Auto Monitoring](stages.md#auto-monitoring). You can define the base domain in
-any of the following places:
+To enable Auto DevOps for a group:
-- Either under the cluster's settings, whether for an instance,
- [projects](../../user/project/clusters/gitlab_managed_clusters.md#base-domain) or
- [groups](../../user/group/clusters/index.md#base-domain)
-- Or at the project level as a variable: `KUBE_INGRESS_BASE_DOMAIN`
-- Or at the group level as a variable: `KUBE_INGRESS_BASE_DOMAIN`
-- Or as an instance-wide fallback in **Menu >** **{admin}** **Admin >**
- **Settings > CI/CD** under the **Continuous Integration and Delivery** section.
+1. Go to your group's **Settings > CI/CD > Auto DevOps**.
+1. Select **Default to Auto DevOps pipeline**.
+1. Select **Save changes**.
-The base domain variable `KUBE_INGRESS_BASE_DOMAIN` follows the same order of precedence
-as other environment [variables](../../ci/variables/index.md#cicd-variable-precedence).
-If this variable isn't set and the cluster setting is left blank, the instance-wide domain is used if set for your instance.
+After enabling Auto DevOps at the group level, you can trigger the
+Auto DevOps pipeline for any project that belongs to that group. To do so:
-Auto DevOps requires a wildcard DNS A record matching the base domain(s). For
-a base domain of `example.com`, you'd need a DNS entry like:
+1. Go to the project's homepage.
+1. Make sure the project doesn't contain a `.gitlab-ci.yml` file.
+1. From the project's sidebar, go to **CI/CD > Pipelines**.
+1. Select **Run pipeline** to trigger the Auto DevOps pipeline.
-```plaintext
-*.example.com 3600 A 1.2.3.4
-```
+To disable Auto DevOps on the group level, follow the same process and
+deselect **Default to Auto DevOps pipeline**.
-In this case, the deployed applications are served from `example.com`, and `1.2.3.4`
-is the IP address of your load balancer; generally NGINX ([see requirements](requirements.md)).
-Setting up the DNS record is beyond the scope of this document; check with your
-DNS provider for information.
+#### At the instance level **(FREE SELF)**
-Alternatively, you can use free public services like [nip.io](https://nip.io)
-which provide automatic wildcard DNS without any configuration. For [nip.io](https://nip.io),
-set the Auto DevOps base domain to `1.2.3.4.nip.io`.
+By enabling Auto DevOps in the instance level, all projects created in that
+instance become enabled. This is convenient when you want to run Auto DevOps by
+default for all projects. You can still disable Auto DevOps individually for
+the groups and projects where you don't want to run it.
-After completing setup, all requests hit the load balancer, which routes requests
-to the Kubernetes pods running your application.
+Only GitLab administrators can enable or disable Auto DevOps in the instance
+level.
-### AWS ECS
+Even when disabled for an instance, group owners and project maintainers
+can still enable Auto DevOps at the group and project levels.
-See [Auto DevOps requirements for Amazon ECS](requirements.md#auto-devops-requirements-for-amazon-ecs).
+To enable Auto DevOps for your instance:
-## Use multiple Kubernetes clusters
+1. From the top bar, select **Menu >** **{admin}** **Admin**.
+1. Go to **Settings > CI/CD > Continuous Integration and Deployment**.
+1. Select **Default to Auto DevOps pipeline**.
+1. (Optional) Add the Auto DevOps [base domain](requirements.md#auto-devops-base-domain).
+1. Select **Save changes**.
-When using Auto DevOps, you can deploy different environments to
-different Kubernetes clusters, due to the 1:1 connection
-[existing between them](../../user/project/clusters/multiple_kubernetes_clusters.md).
+When enabled, it attempts to run Auto DevOps pipelines in every project. If the
+pipeline fails in a particular project, it disables itself.
+GitLab administrators can change this in the [Auto DevOps settings](../../user/admin_area/settings/continuous_integration.md#auto-devops).
-The [Deploy Job template](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Jobs/Deploy.gitlab-ci.yml)
-used by Auto DevOps defines 3 environment names:
+If a [CI/CD configuration file](../../ci/yaml/index.md) is present,
+it remains unchanged and Auto DevOps doesn't affect it.
-- `review/` (every environment starting with `review/`)
-- `staging`
-- `production`
+To disable Auto DevOps in the instance level, follow the same process
+and deselect the **Default to Auto DevOps pipeline** checkbox.
-Those environments are tied to jobs using [Auto Deploy](stages.md#auto-deploy), so
-except for the environment scope, they must have a different deployment domain.
-You must define a separate `KUBE_INGRESS_BASE_DOMAIN` variable for each of the above
-[based on the environment](../../ci/variables/index.md#limit-the-environment-scope-of-a-cicd-variable).
+### Quick start
-The following table is an example of how to configure the three different clusters:
+To guide your through the process of setting up Auto DevOps to deploy to a Kubernetes cluster on
+Google Kubernetes Engine (GKE), see the [quick start guide](quick_start_guide.md).
-| Cluster name | Cluster environment scope | `KUBE_INGRESS_BASE_DOMAIN` variable value | Variable environment scope | Notes |
-|--------------|---------------------------|-------------------------------------------|----------------------------|---|
-| review | `review/*` | `review.example.com` | `review/*` | The review cluster which runs all [Review Apps](../../ci/review_apps/index.md). `*` is a wildcard, used by every environment name starting with `review/`. |
-| staging | `staging` | `staging.example.com` | `staging` | (Optional) The staging cluster which runs the deployments of the staging environments. You must [enable it first](customize.md#deploy-policy-for-staging-and-production-environments). |
-| production | `production` | `example.com` | `production` | The production cluster which runs the production environment deployments. You can use [incremental rollouts](customize.md#incremental-rollout-to-production). |
+You can also follow the quick start for the general steps, but deploy to
+[AWS ECS](requirements.md#auto-devops-requirements-for-amazon-ecs) instead.
-To add a different cluster for each environment:
+If you're a self-managed user, before deploying to GKE, a GitLab administrator needs to:
-1. Navigate to your project's **Infrastructure > Kubernetes clusters**.
-1. Create the Kubernetes clusters with their respective environment scope, as
- described from the table above.
-1. After creating the clusters, navigate to each cluster and [install
- Ingress](quick_start_guide.md#install-ingress). Wait for the Ingress IP address to be assigned.
-1. Make sure you've [configured your DNS](#auto-devops-base-domain) with the
- specified Auto DevOps domains.
-1. Navigate to each cluster's page, through **Infrastructure > Kubernetes clusters**,
- and add the domain based on its Ingress IP address.
+1. Configure the [Google OAuth 2.0 OmniAuth Provider](../../integration/google.md).
+1. Configure a cluster on GKE.
-After completing configuration, test your setup by creating a merge request.
-Verify whether your application deployed as a Review App in the Kubernetes
-cluster with the `review/*` environment scope. Similarly, you can check the
-other environments.
+## Upgrade Auto DevOps dependencies when updating GitLab
-[Cluster environment scope isn't respected](https://gitlab.com/gitlab-org/gitlab/-/issues/20351)
-when checking for active Kubernetes clusters. For multi-cluster setup to work with Auto DevOps,
-create a fallback cluster with **Cluster environment scope** set to `*`. A new cluster isn't
-required. You can use any of the clusters already added.
+When updating GitLab, you may need to upgrade Auto DevOps dependencies to
+match your new GitLab version:
-## Limitations
+- [Upgrading Auto DevOps resources](upgrading_auto_deploy_dependencies.md):
+ - Auto DevOps template.
+ - Auto Deploy template.
+ - Auto Deploy image.
+ - Helm.
+ - Kubernetes.
+ - Environment variables.
+- [Upgrading PostgreSQL](upgrading_postgresql.md).
-The following restrictions apply.
+## Limitations
### Private registry support
-No documented way of using private container registry with Auto DevOps exists.
-We strongly advise using GitLab Container Registry with Auto DevOps to
+We cannot guarantee that you can use a private container registry with Auto DevOps.
+
+We strongly advise you to use GitLab Container Registry with Auto DevOps to
simplify configuration and prevent any unforeseen issues.
### Install applications behind a proxy
The GitLab integration with Helm does not support installing applications when
-behind a proxy. Users who want to do so must inject their proxy settings
-into the installation pods at runtime, such as by using a
-[`PodPreset`](https://v1-19.docs.kubernetes.io/docs/concepts/workloads/pods/podpreset/):
+behind a proxy.
+
+To do so, inject proxy settings into the installation pods at runtime.
+For example, you can use a [`PodPreset`](https://v1-19.docs.kubernetes.io/docs/concepts/workloads/pods/podpreset/):
```yaml
apiVersion: settings.k8s.io/v1alpha1
@@ -335,23 +284,6 @@ spec:
value: "PUT_YOUR_HTTPS_PROXY_HERE"
```
-## Upgrade Auto DevOps dependencies when updating GitLab
-
-When updating GitLab, you may need to upgrade Auto DevOps dependencies to
-match your new GitLab version:
-
-- [Upgrading Auto DevOps resources](upgrading_auto_deploy_dependencies.md):
- - Auto DevOps template.
- - Auto Deploy template.
- - Auto Deploy image.
- - Helm.
- - Kubernetes.
- - Environment variables.
-- [Upgrading PostgreSQL](upgrading_postgresql.md).
-
## Troubleshooting
See [troubleshooting Auto DevOps](troubleshooting.md).
-
-<!-- DO NOT ADD TROUBLESHOOTING INFO HERE -->
-<!-- Troubleshooting information has moved to troubleshooting.md -->
diff --git a/doc/topics/autodevops/multiple_clusters_auto_devops.md b/doc/topics/autodevops/multiple_clusters_auto_devops.md
new file mode 100644
index 00000000000..2191ab9ee8b
--- /dev/null
+++ b/doc/topics/autodevops/multiple_clusters_auto_devops.md
@@ -0,0 +1,53 @@
+---
+stage: Configure
+group: Configure
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# Multiple Kubernetes clusters for Auto DevOps **(FREE)**
+
+When using Auto DevOps, you can deploy different environments to
+different Kubernetes clusters, due to the 1:1 connection
+[existing between them](../../user/project/clusters/multiple_kubernetes_clusters.md).
+
+The [Deploy Job template](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Jobs/Deploy.gitlab-ci.yml)
+used by Auto DevOps defines 3 environment names:
+
+- `review/` (every environment starting with `review/`)
+- `staging`
+- `production`
+
+Those environments are tied to jobs using [Auto Deploy](stages.md#auto-deploy), so
+except for the environment scope, they must have a different deployment domain.
+You must define a separate `KUBE_INGRESS_BASE_DOMAIN` variable for each of the above
+[based on the environment](../../ci/variables/index.md#limit-the-environment-scope-of-a-cicd-variable).
+
+The following table is an example of how to configure the three different clusters:
+
+| Cluster name | Cluster environment scope | `KUBE_INGRESS_BASE_DOMAIN` variable value | Variable environment scope | Notes |
+|--------------|---------------------------|-------------------------------------------|----------------------------|---|
+| review | `review/*` | `review.example.com` | `review/*` | The review cluster which runs all [Review Apps](../../ci/review_apps/index.md). `*` is a wildcard, used by every environment name starting with `review/`. |
+| staging | `staging` | `staging.example.com` | `staging` | (Optional) The staging cluster which runs the deployments of the staging environments. You must [enable it first](customize.md#deploy-policy-for-staging-and-production-environments). |
+| production | `production` | `example.com` | `production` | The production cluster which runs the production environment deployments. You can use [incremental rollouts](customize.md#incremental-rollout-to-production). |
+
+To add a different cluster for each environment:
+
+1. Navigate to your project's **Infrastructure > Kubernetes clusters**.
+1. Create the Kubernetes clusters with their respective environment scope, as
+ described from the table above.
+1. After creating the clusters, navigate to each cluster and [install
+ Ingress](quick_start_guide.md#install-ingress). Wait for the Ingress IP address to be assigned.
+1. Make sure you've [configured your DNS](requirements.md#auto-devops-base-domain) with the
+ specified Auto DevOps domains.
+1. Navigate to each cluster's page, through **Infrastructure > Kubernetes clusters**,
+ and add the domain based on its Ingress IP address.
+
+After completing configuration, test your setup by creating a merge request.
+Verify whether your application deployed as a Review App in the Kubernetes
+cluster with the `review/*` environment scope. Similarly, check the
+other environments.
+
+[Cluster environment scope isn't respected](https://gitlab.com/gitlab-org/gitlab/-/issues/20351)
+when checking for active Kubernetes clusters. For multi-cluster setup to work with Auto DevOps,
+create a fallback cluster with **Cluster environment scope** set to `*`. A new cluster isn't
+required. You can use any of the clusters already added.
diff --git a/doc/topics/autodevops/prepare_deployment.md b/doc/topics/autodevops/prepare_deployment.md
new file mode 100644
index 00000000000..830aff11824
--- /dev/null
+++ b/doc/topics/autodevops/prepare_deployment.md
@@ -0,0 +1,71 @@
+---
+stage: Configure
+group: Configure
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# Prepare Auto DevOps for deployment **(FREE)**
+
+If you enable Auto DevOps without setting the base domain and deployment
+strategy, GitLab can't deploy your application directly. Therefore, we
+recommend that you prepare them before enabling Auto DevOps.
+
+## Deployment strategy
+
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/38542) in GitLab 11.0.
+
+When using Auto DevOps to deploy your applications, choose the
+[continuous deployment strategy](../../ci/introduction/index.md)
+that works best for your needs:
+
+| Deployment strategy | Setup | Methodology |
+|--|--|--|
+| **Continuous deployment to production** | Enables [Auto Deploy](stages.md#auto-deploy) with the default branch continuously deployed to production. | Continuous deployment to production.|
+| **Continuous deployment to production using timed incremental rollout** | Sets the [`INCREMENTAL_ROLLOUT_MODE`](customize.md#timed-incremental-rollout-to-production) variable to `timed`. | Continuously deploy to production with a 5 minutes delay between rollouts. |
+| **Automatic deployment to staging, manual deployment to production** | Sets [`STAGING_ENABLED`](customize.md#deploy-policy-for-staging-and-production-environments) to `1` and [`INCREMENTAL_ROLLOUT_MODE`](customize.md#incremental-rollout-to-production) to `manual`. | The default branch is continuously deployed to staging and continuously delivered to production. |
+
+You can choose the deployment method when enabling Auto DevOps or later:
+
+1. In GitLab, go to your project's **Settings > CI/CD > Auto DevOps**.
+1. Choose the deployment strategy.
+1. Select **Save changes**.
+
+NOTE:
+Use the [blue-green deployment](../../ci/environments/incremental_rollouts.md#blue-green-deployment) technique
+to minimize downtime and risk.
+
+## Auto DevOps base domain
+
+The Auto DevOps base domain is required to use
+[Auto Review Apps](stages.md#auto-review-apps), [Auto Deploy](stages.md#auto-deploy), and
+[Auto Monitoring](stages.md#auto-monitoring).
+
+To define the base domain, either:
+
+- In the project, group, or instance level: go to your cluster settings and add it there.
+- In the project or group level: add it as an environment variable: `KUBE_INGRESS_BASE_DOMAIN`.
+- In the instance level: go to **Menu >** **{admin}** **Admin > Settings > CI/CD> Continuous Integration and Delivery** and add it there.
+
+The base domain variable `KUBE_INGRESS_BASE_DOMAIN` follows the same order of precedence
+as other environment [variables](../../ci/variables/index.md#cicd-variable-precedence).
+
+If you don't specify the base domain in your projects and groups, Auto DevOps uses the instance-wide **Auto DevOps domain**.
+
+Auto DevOps requires a wildcard DNS A record matching the base domain(s). For
+a base domain of `example.com`, you'd need a DNS entry like:
+
+```plaintext
+*.example.com 3600 A 1.2.3.4
+```
+
+In this case, the deployed applications are served from `example.com`, and `1.2.3.4`
+is the IP address of your load balancer, generally NGINX ([see requirements](requirements.md)).
+Setting up the DNS record is beyond the scope of this document; check with your
+DNS provider for information.
+
+Alternatively, you can use free public services like [nip.io](https://nip.io)
+which provide automatic wildcard DNS without any configuration. For [nip.io](https://nip.io),
+set the Auto DevOps base domain to `1.2.3.4.nip.io`.
+
+After completing setup, all requests hit the load balancer, which routes requests
+to the Kubernetes pods running your application.
diff --git a/doc/topics/autodevops/quick_start_guide.md b/doc/topics/autodevops/quick_start_guide.md
index 196f6dec7e7..2cf5a5befd7 100644
--- a/doc/topics/autodevops/quick_start_guide.md
+++ b/doc/topics/autodevops/quick_start_guide.md
@@ -4,19 +4,30 @@ group: Configure
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
-# Getting started with Auto DevOps **(FREE)**
+# Tutorial: Use Auto DevOps to deploy an application to Google Kubernetes Engine **(FREE)**
This step-by-step guide helps you use [Auto DevOps](index.md) to
-deploy a project hosted on GitLab.com to Google Kubernetes Engine.
+In this tutorial, we'll help you to get started with [Auto DevOps](index.md)
+through an example of how to deploy an application to Google Kubernetes Engine (GKE).
You are using the GitLab native Kubernetes integration, so you don't need
to create a Kubernetes cluster manually using the Google Cloud Platform console.
-You are creating and deploying a simple application that you create from a GitLab template.
+You are creating and deploying an application that you create from a GitLab template.
-These instructions also work for a self-managed GitLab instance;
-ensure your own [runners are configured](../../ci/runners/index.md) and
+These instructions also work for self-managed GitLab instances.
+Ensure your own [runners are configured](../../ci/runners/index.md) and
[Google OAuth is enabled](../../integration/google.md).
+To deploy a project to Google Kubernetes Engine, follow the steps below:
+
+1. [Configure your Google account](#configure-your-google-account)
+1. [Create a new project from a template](#create-a-new-project-from-a-template)
+1. [Create a Kubernetes cluster from GitLab](#create-a-kubernetes-cluster-from-gitlab)
+1. [Install Ingress](#install-ingress)
+1. [Configure your base domain](#configure-your-base-domain)
+1. [Enable Auto DevOps](#enable-auto-devops-optional)
+1. [Deploy the application](#deploy-the-application)
+
## Configure your Google account
Before creating and connecting your Kubernetes cluster to your GitLab project,
@@ -38,12 +49,12 @@ and apply for credit.
## Create a new project from a template
-We are using a GitLab project template to get started. As the name suggests,
+Use a GitLab project template to get started. As the name suggests,
those projects provide a bare-bones application built on some well-known frameworks.
-1. In GitLab, click the plus icon (**{plus-square}**) at the top of the navigation bar, and select
- **New project**.
-1. Go to the **Create from template** tab, where you can choose among a Ruby on
+1. On the top bar in GitLab, select the plus icon (**{plus-square}**), and select
+ **New project/repository**.
+1. Go to the **Create from template** tab, where you can choose a Ruby on
Rails, Spring, or NodeJS Express project.
For this tutorial, use the Ruby on Rails template.
@@ -55,23 +66,21 @@ those projects provide a bare-bones application built on some well-known framewo
![Create project](img/guide_create_project_v12_3.png)
-1. Click **Create project**.
+1. Select **Create project**.
Now that you've created a project, create the Kubernetes cluster
to deploy this project to.
-## Create a Kubernetes cluster from within GitLab
+## Create a Kubernetes cluster from GitLab
-1. On your project's landing page, click **Add Kubernetes cluster**
- (note that this option is also available when you navigate to
- **Infrastructure > Kubernetes clusters**).
+1. On your project's landing page, select the button **Add Kubernetes cluster**.
![Project landing page](img/guide_project_landing_page_v12_10.png)
-1. On the **Add a Kubernetes cluster integration** page, click the **Create new cluster** tab,
- then click **Google GKE**.
+1. On the **Add a Kubernetes cluster integration** page, select the **Create new cluster** tab,
+ then select **Google GKE**.
-1. Connect with your Google account, and click **Allow** to allow access to your
+1. Connect with your Google account, and select **Allow** to allow access to your
Google account. (This authorization request is only displayed the first time
you connect GitLab with your Google account.)
@@ -97,7 +106,7 @@ to deploy this project to.
- **GitLab-managed cluster** - Select this checkbox to
[allow GitLab to manage namespace and service accounts](../../user/project/clusters/index.md#gitlab-managed-clusters) for this cluster.
-1. Click **Create Kubernetes cluster**.
+1. Select **Create Kubernetes cluster**.
After a couple of minutes, the cluster is created. You can also see its
status on your [GCP dashboard](https://console.cloud.google.com/kubernetes).
@@ -105,14 +114,14 @@ status on your [GCP dashboard](https://console.cloud.google.com/kubernetes).
## Install Ingress
After your cluster is running, you must install NGINX Ingress Controller as a
-load balancer, to route traffic from the internet to your application. Because
-you've created a Google GKE cluster in this guide, you can install NGINX Ingress Controller
+load balancer, to route traffic from the internet to your application.
+Install the NGINX Ingress Controller
through the GitLab [Cluster management project template](../../user/clusters/management_project_template.md),
or manually with Google Cloud Shell:
-1. Go to your cluster's details page, and click the **Advanced Settings** tab.
-1. Click the link to Google Kubernetes Engine to visit the cluster on Google Cloud Console.
-1. On the GKE cluster page, select **Connect**, then click **Run in Cloud Shell**.
+1. Go to your cluster's details page, and select the **Advanced Settings** tab.
+1. Select the link to Google Kubernetes Engine to visit the cluster on Google Cloud Console.
+1. On the GKE cluster page, select **Connect**, then select **Run in Cloud Shell**.
1. After the Cloud Shell starts, run these commands to install NGINX Ingress Controller:
```shell
@@ -127,7 +136,7 @@ or manually with Google Cloud Shell:
## Configure your base domain
-Follow these steps to configure the Base Domain where your apps will be accessible.
+Follow these steps to configure the base domain where you access your apps.
1. A few minutes after you install NGINX, the load balancer obtains an IP address, and you can
get the external IP address with the following command:
@@ -141,8 +150,8 @@ Follow these steps to configure the Base Domain where your apps will be accessib
Copy this IP address, as you need it in the next step.
1. Go back to the cluster page on GitLab, and go to the **Details** tab.
- - Add your **Base domain**. For this guide, use the domain `<IP address>.nip.io`.
- - Click **Save changes**.
+ - Add your **Base domain**. For this example, use the domain `<IP address>.nip.io`.
+ - Select **Save changes**.
![Cluster Base Domain](img/guide_base_domain_v12_3.png)
@@ -152,11 +161,11 @@ While Auto DevOps is enabled by default, Auto DevOps can be disabled at both
the instance level (for self-managed instances) and the group level. Complete
these steps to enable Auto DevOps if it's disabled:
-1. Navigate to **Settings > CI/CD > Auto DevOps**, and click **Expand**.
+1. Go to **Settings > CI/CD > Auto DevOps**, and select **Expand**.
1. Select **Default to Auto DevOps pipeline** to display more options.
-1. In **Deployment strategy**, select your desired [continuous deployment strategy](index.md#deployment-strategy)
+1. In **Deployment strategy**, select your desired [continuous deployment strategy](requirements.md#auto-devops-deployment-strategy)
to deploy the application to production after the pipeline successfully runs on the default branch.
-1. Click **Save changes**.
+1. Select **Save changes**.
![Auto DevOps settings](img/guide_enable_autodevops_v12_3.png)
@@ -169,7 +178,7 @@ In the next section, we explain what each job does in the pipeline.
When your pipeline runs, what is it doing?
-To view the jobs in the pipeline, click the pipeline's status badge. The
+To view the jobs in the pipeline, select the pipeline's status badge. The
**{status_running}** icon displays when pipeline jobs are running, and updates
without refreshing the page to **{status_success}** (for success) or
**{status_failed}** (for failure) when the jobs complete.
@@ -233,12 +242,12 @@ you to common environment tasks:
- **Re-deploy to environment** (**{repeat}**) - For more information, see
[Retrying and rolling back](../../ci/environments/index.md#retry-or-roll-back-a-deployment)
- **Stop environment** (**{stop}**) - For more information, see
- [Stopping an environment](../../ci/environments/index.md#stopping-an-environment)
+ [Stopping an environment](../../ci/environments/index.md#stop-an-environment)
GitLab displays the [Deploy Board](../../user/project/deploy_boards.md) below the
environment's information, with squares representing pods in your
Kubernetes cluster, color-coded to show their status. Hovering over a square on
-the deploy board displays the state of the deployment, and clicking the square
+the deploy board displays the state of the deployment, and selecting the square
takes you to the pod's logs page.
NOTE:
@@ -251,7 +260,7 @@ in **Settings > CI/CD > Variables**.
Following the [GitLab flow](../gitlab_flow.md#working-with-feature-branches),
you should next create a feature branch to add content to your application:
-1. In your project's repository, navigate to the following file: `app/views/welcome/index.html.erb`.
+1. In your project's repository, go to the following file: `app/views/welcome/index.html.erb`.
This file should only contain a paragraph: `<p>You're on Rails!</p>`.
1. Open the GitLab [Web IDE](../../user/project/web_ide/index.md) to make the change.
1. Edit the file so it contains:
@@ -261,7 +270,7 @@ you should next create a feature branch to add content to your application:
```
1. Stage the file. Add a commit message, then create a new branch and a merge request
- by clicking **Commit**.
+ by selecting **Commit**.
![Web IDE commit](img/guide_ide_commit_v12_3.png)
@@ -272,7 +281,7 @@ a few more that run only on branches other than the default branch.
![Merge request](img/guide_merge_request_v12_3.png)
After a few minutes a test fails, which means a test was
-'broken' by your change. Click on the failed `test` job to see more information
+'broken' by your change. Select the failed `test` job to see more information
about it:
```plaintext
@@ -287,18 +296,18 @@ bin/rails test test/controllers/welcome_controller_test.rb:4
To fix the broken test:
-1. Return to the **Overview** page for your merge request, and click **Open in Web IDE**.
+1. Return to the **Overview** page for your merge request, and select **Open in Web IDE**.
1. In the left-hand directory of files, find the `test/controllers/welcome_controller_test.rb`
- file, and click it to open it.
+ file, and select it to open it.
1. Change line 7 to say `You're on Rails! Powered by GitLab Auto DevOps.`
-1. Click **Commit**.
-1. In the left-hand column, under **Unstaged changes**, click the checkmark icon
+1. Select **Commit**.
+1. In the left-hand column, under **Unstaged changes**, select the checkmark icon
(**{stage-all}**) to stage the changes.
-1. Write a commit message, and click **Commit**.
+1. Write a commit message, and select **Commit**.
Return to the **Overview** page of your merge request, and you should not only
see the test passing, but also the application deployed as a
-[review application](stages.md#auto-review-apps). You can visit it by clicking
+[review application](stages.md#auto-review-apps). You can visit it by selecting
the **View app** **{external-link}** button to see your changes deployed.
![Review app](img/guide_merge_request_review_app_v12_3.png)
@@ -314,7 +323,7 @@ all in GitLab. Despite its automatic nature, Auto DevOps can also be configured
and customized to fit your workflow. Here are some helpful resources for further reading:
1. [Auto DevOps](index.md)
-1. [Multiple Kubernetes clusters](index.md#use-multiple-kubernetes-clusters)
+1. [Multiple Kubernetes clusters](multiple_clusters_auto_devops.md)
1. [Incremental rollout to production](customize.md#incremental-rollout-to-production) **(PREMIUM)**
1. [Disable jobs you don't need with CI/CD variables](customize.md#cicd-variables)
1. [Use your own buildpacks to build your application](customize.md#custom-buildpacks)
diff --git a/doc/topics/autodevops/requirements.md b/doc/topics/autodevops/requirements.md
index 9c330aede17..535ec18e5b6 100644
--- a/doc/topics/autodevops/requirements.md
+++ b/doc/topics/autodevops/requirements.md
@@ -6,11 +6,85 @@ info: To determine the technical writer assigned to the Stage/Group associated w
# Requirements for Auto DevOps **(FREE)**
-You can set up Auto DevOps for [Kubernetes](#auto-devops-requirements-for-kubernetes),
-[Amazon Elastic Container Service (ECS)](#auto-devops-requirements-for-amazon-ecs),
-or [Amazon Cloud Compute](#auto-devops-requirements-for-amazon-ecs).
-For more information about Auto DevOps, see [the main Auto DevOps page](index.md)
-or the [quick start guide](quick_start_guide.md).
+Before enabling [Auto DevOps](index.md), we recommend you to prepare it for
+deployment. If you don't, you can use it to build and test your apps, and
+then configure the deployment later.
+
+To prepare the deployment:
+
+1. Define the [deployment strategy](#auto-devops-deployment-strategy).
+1. Prepare the [base domain](#auto-devops-base-domain).
+1. Define where you want to deploy it to:
+
+ 1. [Kubernetes](#auto-devops-requirements-for-kubernetes).
+ 1. [Amazon Elastic Container Service (ECS)](#auto-devops-requirements-for-amazon-ecs).
+ 1. [Amazon EC2](#auto-devops-requirements-for-amazon-ec2).
+ 1. [Bare metal](#auto-devops-requirements-for-bare-metal).
+
+When done:
+
+1. [Enable Auto DevOps](index.md#enable-or-disable-auto-devops).
+1. See the [quick start](quick_start_guide.md) process.
+
+## Auto DevOps deployment strategy
+
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/38542) in GitLab 11.0.
+
+When using Auto DevOps to deploy your applications, choose the
+[continuous deployment strategy](../../ci/introduction/index.md)
+that works best for your needs:
+
+| Deployment strategy | Setup | Methodology |
+|--|--|--|
+| **Continuous deployment to production** | Enables [Auto Deploy](stages.md#auto-deploy) with the default branch continuously deployed to production. | Continuous deployment to production.|
+| **Continuous deployment to production using timed incremental rollout** | Sets the [`INCREMENTAL_ROLLOUT_MODE`](customize.md#timed-incremental-rollout-to-production) variable to `timed`. | Continuously deploy to production with a 5 minutes delay between rollouts. |
+| **Automatic deployment to staging, manual deployment to production** | Sets [`STAGING_ENABLED`](customize.md#deploy-policy-for-staging-and-production-environments) to `1` and [`INCREMENTAL_ROLLOUT_MODE`](customize.md#incremental-rollout-to-production) to `manual`. | The default branch is continuously deployed to staging and continuously delivered to production. |
+
+You can choose the deployment method when enabling Auto DevOps or later:
+
+1. In GitLab, go to your project's **Settings > CI/CD > Auto DevOps**.
+1. Choose the deployment strategy.
+1. Select **Save changes**.
+
+NOTE:
+Use the [blue-green deployment](../../ci/environments/incremental_rollouts.md#blue-green-deployment) technique
+to minimize downtime and risk.
+
+## Auto DevOps base domain
+
+The Auto DevOps base domain is required to use
+[Auto Review Apps](stages.md#auto-review-apps), [Auto Deploy](stages.md#auto-deploy), and
+[Auto Monitoring](stages.md#auto-monitoring).
+
+To define the base domain, either:
+
+- In the project, group, or instance level: go to your cluster settings and add it there.
+- In the project or group level: add it as an environment variable: `KUBE_INGRESS_BASE_DOMAIN`.
+- In the instance level: go to **Menu >** **{admin}** **Admin > Settings > CI/CD> Continuous Integration and Delivery** and add it there.
+
+The base domain variable `KUBE_INGRESS_BASE_DOMAIN` follows the same order of precedence
+as other environment [variables](../../ci/variables/index.md#cicd-variable-precedence).
+
+If you don't specify the base domain in your projects and groups, Auto DevOps uses the instance-wide **Auto DevOps domain**.
+
+Auto DevOps requires a wildcard DNS A record matching the base domain(s). For
+a base domain of `example.com`, you'd need a DNS entry like:
+
+```plaintext
+*.example.com 3600 A 1.2.3.4
+```
+
+In this case, the deployed applications are served from `example.com`, and `1.2.3.4`
+is the IP address of your load balancer, generally NGINX ([see requirements](requirements.md)).
+Setting up the DNS record is beyond the scope of this document; check with your
+DNS provider for information.
+
+Alternatively, you can use free public services like [nip.io](https://nip.io)
+which provide automatic wildcard DNS without any configuration. For [nip.io](https://nip.io),
+set the Auto DevOps base domain to `1.2.3.4.nip.io`.
+
+After completing setup, all requests hit the load balancer, which routes requests
+to the Kubernetes pods running your application.
## Auto DevOps requirements for Kubernetes
@@ -49,7 +123,7 @@ To make full use of Auto DevOps with Kubernetes, you need:
- **Base domain** (for [Auto Review Apps](stages.md#auto-review-apps),
[Auto Deploy](stages.md#auto-deploy), and [Auto Monitoring](stages.md#auto-monitoring))
- You must [specify the Auto DevOps base domain](index.md#auto-devops-base-domain),
+ You must [specify the Auto DevOps base domain](#auto-devops-base-domain),
which all of your Auto DevOps applications use. This domain must be configured
with wildcard DNS.
diff --git a/doc/topics/autodevops/stages.md b/doc/topics/autodevops/stages.md
index f689183d556..3b595cc7ea8 100644
--- a/doc/topics/autodevops/stages.md
+++ b/doc/topics/autodevops/stages.md
@@ -107,12 +107,14 @@ Check the [currently supported languages](#currently-supported-languages).
Auto Test uses tests you already have in your application. If there are no
tests, it's up to you to add them.
+<!-- vale gitlab.Spelling = NO -->
+
NOTE:
Not all buildpacks supported by [Auto Build](#auto-build) are supported by Auto Test.
Auto Test uses [Herokuish](https://gitlab.com/gitlab-org/gitlab/-/issues/212689), *not*
Cloud Native Buildpacks, and only buildpacks that implement the
-<!-- vale gitlab.Spelling = NO -->
[Testpack API](https://devcenter.heroku.com/articles/testpack-api) are supported.
+
<!-- vale gitlab.Spelling = YES -->
### Currently supported languages
@@ -696,7 +698,7 @@ To use Auto Monitoring:
1. [Enable Auto DevOps](index.md#enable-or-disable-auto-devops), if you haven't done already.
1. Navigate to your project's **{rocket}** **CI/CD > Pipelines** and click **Run pipeline**.
1. After the pipeline finishes successfully, open the
- [monitoring dashboard for a deployed environment](../../ci/environments/index.md#monitoring-environments)
+ [monitoring dashboard for a deployed environment](../../ci/environments/index.md#monitor-environments)
to view the metrics of your deployed application. To view the metrics of the
whole Kubernetes cluster, navigate to **Operations > Metrics**.
diff --git a/doc/topics/autodevops/upgrading_auto_deploy_dependencies.md b/doc/topics/autodevops/upgrading_auto_deploy_dependencies.md
index 4cf699ce25a..e4378ce2d78 100644
--- a/doc/topics/autodevops/upgrading_auto_deploy_dependencies.md
+++ b/doc/topics/autodevops/upgrading_auto_deploy_dependencies.md
@@ -117,7 +117,7 @@ If your Auto DevOps project has an active environment that was deployed with the
1. Deploy your environment as usual. This deployment uses Helm v3.
1. If the deployment succeeds, you can safely run `<environment-name>:helm-2to3:cleanup`.
This deletes all Helm v2 release data from the namespace.
-1. Remove the `MIGRATE_HELM_2TO3` CI/CD variable or set it to `false`. You can do this one environment at a time using [environment scopes](../../ci/environments/index.md#scoping-environments-with-specs).
+1. Remove the `MIGRATE_HELM_2TO3` CI/CD variable or set it to `false`. You can do this one environment at a time using [environment scopes](../../ci/environments/index.md#scope-environments-with-specs).
#### In-Cluster PostgreSQL Channel 2
diff --git a/doc/topics/autodevops/upgrading_postgresql.md b/doc/topics/autodevops/upgrading_postgresql.md
index c03c4171d6d..e526ba55465 100644
--- a/doc/topics/autodevops/upgrading_postgresql.md
+++ b/doc/topics/autodevops/upgrading_postgresql.md
@@ -103,7 +103,7 @@ being modified after the database dump is created.
1. Connect to the pod with:
```shell
- kubectl exec -it production-postgres-5db86568d7-qxlxv --namespace "$APP_NAMESPACE" bash
+ kubectl exec -it production-postgres-5db86568d7-qxlxv --namespace "$APP_NAMESPACE" -- bash
```
1. Once, connected, create a dump file with the following command.
@@ -175,7 +175,7 @@ deleted, you can choose to retain the [persistent volume](#retain-persistent-vol
NOTE:
You can also
-[scope](../../ci/environments/index.md#scoping-environments-with-specs) the
+[scope](../../ci/environments/index.md#scope-environments-with-specs) the
`AUTO_DEVOPS_POSTGRES_CHANNEL`, `AUTO_DEVOPS_POSTGRES_DELETE_V1` and
`POSTGRES_VERSION` variables to specific environments, e.g. `staging`.
@@ -190,7 +190,7 @@ higher*. This is the
minimum PostgreSQL version supported by Auto DevOps. See also the list of
[tags available](https://hub.docker.com/r/bitnami/postgresql/tags).
1. Set `PRODUCTION_REPLICAS` to `0`. For other environments, use
- `REPLICAS` with an [environment scope](../../ci/environments/index.md#scoping-environments-with-specs).
+ `REPLICAS` with an [environment scope](../../ci/environments/index.md#scope-environments-with-specs).
1. If you have set the `DB_INITIALIZE` or `DB_MIGRATE` variables, either
remove the variables, or rename the variables temporarily to
`XDB_INITIALIZE` or the `XDB_MIGRATE` to effectively disable them.
@@ -221,7 +221,7 @@ higher*. This is the
1. Connect to the pod:
```shell
- kubectl exec -it production-postgresql-0 --namespace "$APP_NAMESPACE" bash
+ kubectl exec -it production-postgresql-0 --namespace "$APP_NAMESPACE" -- bash
```
1. Once connected to the pod, run the following command to restore the database.
diff --git a/doc/topics/git/git_rebase.md b/doc/topics/git/git_rebase.md
index 8844d362c10..0e288f1445e 100644
--- a/doc/topics/git/git_rebase.md
+++ b/doc/topics/git/git_rebase.md
@@ -123,6 +123,27 @@ them before continuing the rebase.
To learn more, check Git's documentation on [rebasing](https://git-scm.com/book/en/v2/Git-Branching-Rebasing)
and [rebasing strategies](https://git-scm.com/book/en/v2/Git-Branching-Rebasing).
+#### Rebase from the GitLab UI
+
+You can rebase your feature branch directly from the merge request through a
+[quick action](../../user/project/quick_actions.md#issues-merge-requests-and-epics),
+if all of these conditions are met:
+
+- No [merge conflicts](#merge-conflicts) exist for your feature branch.
+- You have the **Developer** role for the source project. This role grants you
+ permission to push to the source branch for the source project.
+- If the merge request is in a fork, the fork must allow commits
+ [from members of the upstream project](../../user/project/merge_requests/allow_collaboration.md).
+
+To rebase from the UI:
+
+1. Go to your merge request.
+1. Type `/rebase` in a comment.
+1. Select **Comment**.
+
+GitLab schedules a rebase of the feature branch against the default branch and
+executes it as soon as possible.
+
### Interactive rebase
You can use interactive rebase to modify commits. For example, amend a commit
@@ -153,18 +174,20 @@ the operation you want to perform in each commit. To do so, you need to edit
the commits in your terminal's text editor.
For example, if you're using [Vim](https://www.vim.org/) as the text editor in
-a macOS's `ZSH` shell, and you want to **squash** all the three commits
+a macOS's `ZSH` shell, and you want to `squash` or `fixup` all the three commits
(join them into one):
-1. Press <!-- vale gitlab.FirstPerson = NO --> <kbd>i</kbd> <!-- vale gitlab.FirstPerson = YES -->
+<!-- vale gitlab.FirstPerson = NO -->
+
+1. Press <kbd>i</kbd>
on your keyboard to switch to Vim's editing mode.
1. Navigate with your keyboard arrows to edit the **second** commit keyword
- from `pick` to `squash` (or `s`). Do the same to the **third** commit.
+ from `pick` to `squash` or `fixup` (or `s` or `f`). Do the same to the **third** commit.
The first commit should be left **unchanged** (`pick`) as we want to squash
the second and third into the first.
1. Press <kbd>Escape</kbd> to leave the editing mode.
1. Type `:wq` to "write" (save) and "quit".
-1. Git outputs the commit message so you have a chance to edit it:
+1. When squashing, Git outputs the commit message so you have a chance to edit it:
- All lines starting with `#` are ignored and not included in the commit
message. Everything else is included.
- To leave it as it is, type `:wq`. To edit the commit message: switch to the
@@ -173,6 +196,8 @@ a macOS's `ZSH` shell, and you want to **squash** all the three commits
push your changes normally. If you had pushed these commits already,
[force-push](#force-push) instead.
+<!-- vale gitlab.FirstPerson = YES -->
+
Note that the steps for editing through the command line can be slightly
different depending on your operating system and the shell you're using.
diff --git a/doc/topics/git/lfs/index.md b/doc/topics/git/lfs/index.md
index 32039548475..0b4fd335455 100644
--- a/doc/topics/git/lfs/index.md
+++ b/doc/topics/git/lfs/index.md
@@ -271,7 +271,11 @@ If you are storing LFS files outside of GitLab you can disable LFS on the projec
It is possible to host LFS objects externally by setting a custom LFS URL with `git config -f .lfsconfig lfs.url https://example.com/<project>.git/info/lfs`.
-You might choose to do this if you are using an appliance like a <!-- vale gitlab.Spelling = NO --> Sonatype Nexus <!-- vale gitlab.Spelling = YES --> to store LFS data. If you choose to use an external LFS store,
+<!-- vale gitlab.Spelling = NO -->
+
+You might choose to do this if you are using an appliance like a Sonatype Nexus to store LFS data. If you choose to use an external LFS store,
GitLab can't verify LFS objects. Pushes then fail if you have GitLab LFS support enabled.
+<!-- vale gitlab.Spelling = YES -->
+
To stop push failure, LFS support can be disabled in the [Project settings](../../../user/project/settings/index.md), which also disables GitLab LFS value-adds (Verifying LFS objects, UI integration for LFS).
diff --git a/doc/topics/git/lfs/migrate_from_git_annex_to_git_lfs.md b/doc/topics/git/lfs/migrate_from_git_annex_to_git_lfs.md
deleted file mode 100644
index d7fb8a37b9c..00000000000
--- a/doc/topics/git/lfs/migrate_from_git_annex_to_git_lfs.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: 'index.md'
-remove_date: '2021-07-22'
----
-
-This document was moved to [another location](index.md).
-
-<!-- This redirect file can be deleted after <2021-07-22>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/topics/git/merge_requests.md b/doc/topics/git/merge_requests.md
deleted file mode 100644
index d889bc8ffe5..00000000000
--- a/doc/topics/git/merge_requests.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: '../../user/project/merge_requests/index.md'
-remove_date: '2021-08-13'
----
-
-This document was moved to [another location](../../user/project/merge_requests/index.md).
-
-<!-- This redirect file can be deleted after <2021-08-13>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/topics/img/gitlab_flow.png b/doc/topics/img/gitlab_flow.png
index a6f3c947843..c12405455f9 100644
--- a/doc/topics/img/gitlab_flow.png
+++ b/doc/topics/img/gitlab_flow.png
Binary files differ
diff --git a/doc/university/index.md b/doc/university/index.md
deleted file mode 100644
index 559f836a2a2..00000000000
--- a/doc/university/index.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: '../topics/index.md'
-remove_date: '2021-08-13'
----
-
-This document was removed. See our [topics](../topics/index.md) for similar content.
-
-<!-- This redirect file can be deleted after <2021-08-13>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/university/training/index.md b/doc/university/training/index.md
deleted file mode 100644
index 6d99c750d13..00000000000
--- a/doc/university/training/index.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: '../../topics/index.md'
-remove_date: '2021-08-13'
----
-
-This document was moved to [another location](../../topics/index.md).
-
-<!-- This redirect file can be deleted after <2021-08-13>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/university/training/topics/agile_git.md b/doc/university/training/topics/agile_git.md
deleted file mode 100644
index 00ff778a241..00000000000
--- a/doc/university/training/topics/agile_git.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: '../../../user/project/issue_board.md'
-remove_date: '2021-07-23'
----
-
-Information about using Agile concepts in GitLab can be found in [another location](../../../user/project/issue_board.md).
-
-<!-- This redirect file can be deleted after <2021-07-23>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/university/training/topics/bisect.md b/doc/university/training/topics/bisect.md
deleted file mode 100644
index 64291a8194b..00000000000
--- a/doc/university/training/topics/bisect.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: '../../../topics/git/bisect.md'
-remove_date: '2021-08-13'
----
-
-This document was moved to [another location](../../../topics/git/bisect.md).
-
-<!-- This redirect file can be deleted after <2021-08-13>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/university/training/topics/env_setup.md b/doc/university/training/topics/env_setup.md
deleted file mode 100644
index 4df0556c151..00000000000
--- a/doc/university/training/topics/env_setup.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: '../../../topics/index.md'
-remove_date: '2021-08-13'
----
-
-This document was removed. See our [topics](../../../topics/index.md) for similar content.
-
-<!-- This redirect file can be deleted after <2021-08-13>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/university/training/topics/feature_branching.md b/doc/university/training/topics/feature_branching.md
deleted file mode 100644
index 94a2d0cdc69..00000000000
--- a/doc/university/training/topics/feature_branching.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: '../../../topics/git/feature_branching.md'
-remove_date: '2021-08-13'
----
-
-This document was moved to [another location](../../../topics/git/feature_branching.md).
-
-<!-- This redirect file can be deleted after <2021-08-13>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/university/training/topics/getting_started.md b/doc/university/training/topics/getting_started.md
deleted file mode 100644
index 3e6fab73596..00000000000
--- a/doc/university/training/topics/getting_started.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: '../../../topics/git/getting_started.md'
-remove_date: '2021-08-13'
----
-
-This document was moved to [another location](../../../topics/git/getting_started.md).
-
-<!-- This redirect file can be deleted after <2021-08-13>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/university/training/topics/git_add.md b/doc/university/training/topics/git_add.md
deleted file mode 100644
index d7a5ce8dd6a..00000000000
--- a/doc/university/training/topics/git_add.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: '../../../topics/git/git_add.md'
-remove_date: '2021-08-13'
----
-
-This document was moved to [another location](../../../topics/git/git_add.md).
-
-<!-- This redirect file can be deleted after <2021-08-13>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/university/training/topics/git_intro.md b/doc/university/training/topics/git_intro.md
deleted file mode 100644
index 4df0556c151..00000000000
--- a/doc/university/training/topics/git_intro.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: '../../../topics/index.md'
-remove_date: '2021-08-13'
----
-
-This document was removed. See our [topics](../../../topics/index.md) for similar content.
-
-<!-- This redirect file can be deleted after <2021-08-13>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/university/training/topics/git_log.md b/doc/university/training/topics/git_log.md
deleted file mode 100644
index 26f02cb8b17..00000000000
--- a/doc/university/training/topics/git_log.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: '../../../topics/git/git_log.md'
-remove_date: '2021-08-13'
----
-
-This document was moved to [another location](../../../topics/git/git_log.md).
-
-<!-- This redirect file can be deleted after <2021-08-13>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/university/training/topics/merge_conflicts.md b/doc/university/training/topics/merge_conflicts.md
deleted file mode 100644
index f4f12a17dbd..00000000000
--- a/doc/university/training/topics/merge_conflicts.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: '../../../topics/git/merge_conflicts.md'
-remove_date: '2021-08-13'
----
-
-This document was moved to [another location](../../../topics/git/merge_conflicts.md).
-
-<!-- This redirect file can be deleted after <2021-08-13>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/university/training/topics/merge_requests.md b/doc/university/training/topics/merge_requests.md
deleted file mode 100644
index 1ed6fe6d273..00000000000
--- a/doc/university/training/topics/merge_requests.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: '../../../user/project/merge_requests/index.md'
-remove_date: '2021-08-13'
----
-
-This document was moved to [another location](../../../user/project/merge_requests/index.md).
-
-<!-- This redirect file can be deleted after <2021-08-13>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/university/training/topics/rollback_commits.md b/doc/university/training/topics/rollback_commits.md
deleted file mode 100644
index 38d4ac493dd..00000000000
--- a/doc/university/training/topics/rollback_commits.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: '../../../topics/git/rollback_commits.md'
-remove_date: '2021-08-13'
----
-
-This document was moved to [another location](../../../topics/git/rollback_commits.md).
-
-<!-- This redirect file can be deleted after <2021-08-13>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/university/training/topics/stash.md b/doc/university/training/topics/stash.md
deleted file mode 100644
index b053c459cb0..00000000000
--- a/doc/university/training/topics/stash.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: '../../../topics/git/stash.md'
-remove_date: '2021-08-13'
----
-
-This document was moved to [another location](../../../topics/git/stash.md).
-
-<!-- This redirect file can be deleted after <2021-08-13>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/university/training/topics/subtree.md b/doc/university/training/topics/subtree.md
deleted file mode 100644
index a1c1c00baaa..00000000000
--- a/doc/university/training/topics/subtree.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: '../../../topics/git/subtree.md'
-remove_date: '2021-08-13'
----
-
-This document was moved to [another location](../../../topics/git/subtree.md).
-
-<!-- This redirect file can be deleted after <2021-08-13>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/university/training/topics/unstage.md b/doc/university/training/topics/unstage.md
deleted file mode 100644
index c64f5be96e7..00000000000
--- a/doc/university/training/topics/unstage.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: '../../../topics/git/unstage.md'
-remove_date: '2021-08-13'
----
-
-This document was moved to [another location](../../../topics/git/unstage.md).
-
-<!-- This redirect file can be deleted after <2021-08-13>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/university/training/user_training.md b/doc/university/training/user_training.md
deleted file mode 100644
index a19f9b6b6b3..00000000000
--- a/doc/university/training/user_training.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: '../../topics/index.md'
-remove_date: '2021-08-13'
----
-
-This document was removed. See our [topics](../../topics/index.md) for similar content.
-
-<!-- This redirect file can be deleted after <2021-08-13>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/user/admin_area/monitoring/img/batched_background_migrations_queued_v14_0.png b/doc/update/img/batched_background_migrations_queued_v14_0.png
index 0b0792b5e7a..0b0792b5e7a 100644
--- a/doc/user/admin_area/monitoring/img/batched_background_migrations_queued_v14_0.png
+++ b/doc/update/img/batched_background_migrations_queued_v14_0.png
Binary files differ
diff --git a/doc/update/index.md b/doc/update/index.md
index 7875510167e..1289614c181 100644
--- a/doc/update/index.md
+++ b/doc/update/index.md
@@ -72,47 +72,33 @@ from the chart version to GitLab version to determine the [upgrade path](#upgrad
## Checking for background migrations before upgrading
-Certain major/minor releases may require a set of background migrations to be
-finished. The number of remaining migrations jobs can be found by running the
-following command:
+Certain major/minor releases may require different migrations to be
+finished before you update to the newer version.
+
+**For GitLab 14.0 and newer**
+
+To check the status of [batched background migrations](../user/admin_area/monitoring/background_migrations.md):
+
+1. On the top bar, select **Menu >** **{admin}** **Admin**.
+1. On the left sidebar, select **Monitoring > Background Migrations**.
+
+ ![queued batched background migrations table](img/batched_background_migrations_queued_v14_0.png)
**For Omnibus installations**
-If using GitLab 12.9 and newer, run:
+You can also run:
```shell
sudo gitlab-rails runner -e production 'puts Gitlab::BackgroundMigration.remaining'
```
-If using GitLab 12.8 and older, run the following using a [Rails console](../administration/operations/rails_console.md#starting-a-rails-console-session):
-
-```ruby
-puts Sidekiq::Queue.new("background_migration").size
-Sidekiq::ScheduledSet.new.select { |r| r.klass == 'BackgroundMigrationWorker' }.size
-```
-
**For installations from source**
-If using GitLab 12.9 and newer, run:
-
```shell
cd /home/git/gitlab
sudo -u git -H bundle exec rails runner -e production 'puts Gitlab::BackgroundMigration.remaining'
```
-If using GitLab 12.8 and older, run the following using a [Rails console](../administration/operations/rails_console.md#starting-a-rails-console-session):
-
-```ruby
-Sidekiq::Queue.new("background_migration").size
-Sidekiq::ScheduledSet.new.select { |r| r.klass == 'BackgroundMigrationWorker' }.size
-```
-
-### Batched background migrations
-
-Batched background migrations need to finish before you update to a newer version.
-
-Read more about [batched background migrations](../user/admin_area/monitoring/background_migrations.md).
-
### What do I do if my background migrations are stuck?
WARNING:
@@ -201,15 +187,15 @@ accordingly, while also consulting the
The following table, while not exhaustive, shows some examples of the supported
upgrade paths.
-| Target version | Your version | Supported upgrade path | Note |
-| --------------------- | ------------ | ------------------------ | ---- |
-| `14.1.0` | `13.9.2` | `13.9.2` -> `13.12.6` -> `14.0.5` -> `14.1.0` | Two intermediate versions are required: `13.12` and `14.0`, then `14.1`. |
-| `13.5.4` | `12.9.2` | `12.9.2` -> `12.10.14` -> `13.0.14` -> `13.1.11` -> `13.5.4` | Three intermediate versions are required: `12.10`, `13.0` and `13.1`, then `13.5.4`. |
-| `13.2.10` | `11.5.0` | `11.5.0` -> `11.11.8` -> `12.0.12` -> `12.1.17` -> `12.10.14` -> `13.0.14` -> `13.1.11` -> `13.2.10` | Six intermediate versions are required: `11.11`, `12.0`, `12.1`, `12.10`, `13.0` and `13.1`, then `13.2.10`. |
-| `12.10.14` | `11.3.4` | `11.3.4` -> `11.11.8` -> `12.0.12` -> `12.1.17` -> `12.10.14` | Three intermediate versions are required: `11.11`, `12.0` and `12.1`, then `12.10.14`. |
-| `12.9.5` | `10.4.5` | `10.4.5` -> `10.8.7` -> `11.11.8` -> `12.0.12` -> `12.1.17` -> `12.9.5` | Four intermediate versions are required: `10.8`, `11.11`, `12.0` and `12.1`, then `12.9.5`. |
-| `12.2.5` | `9.2.6` | `9.2.6` -> `9.5.10` -> `10.8.7` -> `11.11.8` -> `12.0.12` -> `12.1.17` -> `12.2.5` | Five intermediate versions are required: `9.5`, `10.8`, `11.11`, `12.0`, `12.1`, then `12.2.5`. |
-| `11.3.4` | `8.13.4` | `8.13.4` -> `8.17.7` -> `9.5.10` -> `10.8.7` -> `11.3.4` | `8.17.7` is the last version in version 8, `9.5.10` is the last version in version 9, `10.8.7` is the last version in version 10. |
+| Target version | Your version | Supported upgrade path | Note |
+| -------------- | ------------ | ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
+| `14.1.2` | `13.9.2` | `13.9.2` -> `13.12.9` -> `14.0.7` -> `14.1.2` | Two intermediate versions are required: `13.12` and `14.0`, then `14.1`. |
+| `13.5.4` | `12.9.2` | `12.9.2` -> `12.10.14` -> `13.0.14` -> `13.1.11` -> `13.5.4` | Three intermediate versions are required: `12.10`, `13.0` and `13.1`, then `13.5.4`. |
+| `13.2.10` | `11.5.0` | `11.5.0` -> `11.11.8` -> `12.0.12` -> `12.1.17` -> `12.10.14` -> `13.0.14` -> `13.1.11` -> `13.2.10` | Six intermediate versions are required: `11.11`, `12.0`, `12.1`, `12.10`, `13.0` and `13.1`, then `13.2.10`. |
+| `12.10.14` | `11.3.4` | `11.3.4` -> `11.11.8` -> `12.0.12` -> `12.1.17` -> `12.10.14` | Three intermediate versions are required: `11.11`, `12.0` and `12.1`, then `12.10.14`. |
+| `12.9.5` | `10.4.5` | `10.4.5` -> `10.8.7` -> `11.11.8` -> `12.0.12` -> `12.1.17` -> `12.9.5` | Four intermediate versions are required: `10.8`, `11.11`, `12.0` and `12.1`, then `12.9.5`. |
+| `12.2.5` | `9.2.6` | `9.2.6` -> `9.5.10` -> `10.8.7` -> `11.11.8` -> `12.0.12` -> `12.1.17` -> `12.2.5` | Five intermediate versions are required: `9.5`, `10.8`, `11.11`, `12.0`, `12.1`, then `12.2.5`. |
+| `11.3.4` | `8.13.4` | `8.13.4` -> `8.17.7` -> `9.5.10` -> `10.8.7` -> `11.3.4` | `8.17.7` is the last version in version 8, `9.5.10` is the last version in version 9, `10.8.7` is the last version in version 10. |
## Upgrading to a new major version
@@ -220,7 +206,7 @@ cannot guarantee that upgrading between major versions will be seamless.
It is required to follow the following upgrade steps to ensure a successful *major* version upgrade:
-1. Upgrade to the latest minor version of the preceeding major version.
+1. Upgrade to the latest minor version of the preceding major version.
1. Upgrade to the first minor version (`X.0.Z`) of the target major version.
1. Proceed with upgrading to a newer release.
@@ -271,9 +257,10 @@ migrating data. Background migrations are only added in the monthly releases.
Certain major/minor releases may require a set of background migrations to be
finished. To guarantee this, such a release processes any remaining jobs
before continuing the upgrading procedure. While this doesn't require downtime
-(if the above conditions are met) we recommend users to keep at least 1 week
-between upgrading major/minor releases, allowing the background migrations to
-finish. The time necessary to complete these migrations can be reduced by
+(if the above conditions are met) we require that you [wait for background
+migrations to complete](#checking-for-background-migrations-before-upgrading)
+between each major/minor release upgrade.
+The time necessary to complete these migrations can be reduced by
increasing the number of Sidekiq workers that can process jobs in the
`background_migration` queue. To see the size of this queue,
[Check for background migrations before upgrading](#checking-for-background-migrations-before-upgrading).
@@ -376,7 +363,7 @@ and [Helm Chart deployments](https://docs.gitlab.com/charts/). They come with ap
- Due to an issue where `BatchedBackgroundMigrationWorkers` were
[not working](https://gitlab.com/gitlab-org/charts/gitlab/-/issues/2785#note_614738345)
for self-managed instances, a [fix was created](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/65106)
- and a [14.0.Z](#1400) version was released. If you haven't udpated to 14.0.Z, you need
+ and a [14.0.Z](#1400) version was released. If you haven't updated to 14.0.Z, you need
to update to at least 14.1.0 that contains the same fix before you update to
a later version.
diff --git a/doc/update/mysql_to_postgresql.md b/doc/update/mysql_to_postgresql.md
index 92337f279d6..40dc57c554b 100644
--- a/doc/update/mysql_to_postgresql.md
+++ b/doc/update/mysql_to_postgresql.md
@@ -52,7 +52,7 @@ For other distributions, follow the instructions in PostgreSQL's
and then install `pgloader`.
If you are migrating to a Docker based installation, you must install
-pgLoader within the container as it is not included in the container image.
+pgLoader in the container as it is not included in the container image.
1. Start a shell session in the context of the running container:
@@ -70,7 +70,7 @@ pgLoader within the container as it is not included in the container image.
## Omnibus GitLab installations
For [Omnibus GitLab packages](https://about.gitlab.com/install/), you first
-need to enable the bundled PostgreSQL:
+enable the bundled PostgreSQL:
1. Stop GitLab:
@@ -283,7 +283,7 @@ Sometimes, you might encounter some errors during or after the migration.
### Database error permission denied
-The PostgreSQL user that you use for the migration MUST have **superuser** privileges.
+The PostgreSQL user that you use for the migration **must** have **superuser** privileges.
Otherwise, you may see a similar message to the following:
```plaintext
@@ -295,7 +295,7 @@ debugger invoked on a CL-POSTGRES-ERROR:INSUFFICIENT-PRIVILEGE in thread
QUERY: ALTER TABLE approver_groups DISABLE TRIGGER ALL;
```
-### Experiencing 500 errors after the migration
+### 500 errors after the migration
If you experience 500 errors after the migration, try to clear the cache:
diff --git a/doc/update/restore_after_failure.md b/doc/update/restore_after_failure.md
index e9c2c69ecb9..b8cceb8c367 100644
--- a/doc/update/restore_after_failure.md
+++ b/doc/update/restore_after_failure.md
@@ -13,7 +13,7 @@ However, it's important to know how to recover when problems do arise.
In some cases after a failed upgrade, the fastest solution is to roll back to
the previous version you were using. We recommend this path because the failed
-upgrade will likely have made database changes that can not be readily reverted.
+upgrade might have made database changes that cannot be readily reverted.
First, roll back the code or package. For source installations this involves
checking out the older version (branch or tag). For Omnibus installations this
@@ -33,7 +33,7 @@ older backup it can lead to migration failures on future upgrades.
Starting in GitLab 8.6 we drop all tables prior to importing the backup to
prevent this problem. If you've restored a backup to a version prior to 8.6 you
-may need to manually correct the problem next time you upgrade.
+may have to manually correct the problem next time you upgrade.
Example error:
@@ -49,8 +49,8 @@ PG::DuplicateTable: ERROR: relation "lfs_objects" already exists
Copy the version from the error. In this case the version number is
`20151103134857`.
->**WARNING:** Use the following steps only if you are certain this is what you
-need to do.
+WARNING:
+Use the following steps only if you are certain you must do them.
### GitLab 8.6+
@@ -65,9 +65,8 @@ sudo -u git -H bundle exec rake gitlab:db:mark_migration_complete[20151103134857
sudo gitlab-rake gitlab:db:mark_migration_complete[20151103134857]
```
-Once the migration is successfully marked, run the Rake `db:migrate` task again.
-You might need to repeat this process several times until all failed
-migrations are marked complete.
+After the migration is successfully marked, run the Rake `db:migrate` task again.
+Repeat this process until all failed migrations are complete.
### GitLab < 8.6
@@ -86,6 +85,5 @@ ActiveRecord::Base.connection.execute("INSERT INTO schema_migrations (version) V
exit
```
-Once the migration is successfully marked, run the Rake `db:migrate` task again.
-You might need to repeat this process several times until all failed
-migrations are marked complete.
+After the migration is successfully marked, run the Rake `db:migrate` task again.
+Repeat this process until all failed migrations are complete.
diff --git a/doc/update/upgrading_from_source.md b/doc/update/upgrading_from_source.md
index 39e25fc11e7..dd7ef27feca 100644
--- a/doc/update/upgrading_from_source.md
+++ b/doc/update/upgrading_from_source.md
@@ -12,12 +12,10 @@ Users wishing to upgrade to 12.0.0 must take some extra steps. See the
version specific upgrade instructions for 12.0.0 for more details.
Make sure you view this update guide from the branch (version) of GitLab you
-would like to install (e.g., `11.8`. You can select the version in the version
-dropdown at the top left corner of GitLab (below the menu bar).
+would like to install (for example, `11.8`). You can select the required version of documentation in the dropdown at the top right corner of GitLab documentation page.
-In all examples, replace `BRANCH` with the branch for the version you upgrading
-to (e.g. `11-8-stable` for `11.8`), and replace `PREVIOUS_BRANCH` with the
-branch for the version you are upgrading from (e.g. `11-7-stable` for `11.7`).
+In each of the following examples, replace `BRANCH` with the branch of the version you upgrading to (for example, `11-8-stable` for `11.8`). Replace `PREVIOUS_BRANCH` with the
+branch for the version you are upgrading from (for example, `11-7-stable` for `11.7`).
If the highest number stable branch is unclear please check the
[GitLab Blog](https://about.gitlab.com/blog/archives.html) for installation
@@ -29,7 +27,7 @@ the [Upgrading from CE to EE](upgrading_from_ce_to_ee.md) documentation.
## Upgrading to a new major version
Major versions are reserved for backwards incompatible changes. We recommend that
-you first upgrade to the latest available minor version within your major version.
+you first upgrade to the latest available minor version of your current major version.
Please follow the [Upgrade Recommendations](../policy/maintenance.md#upgrade-recommendations)
to identify the ideal upgrade path.
@@ -152,7 +150,7 @@ WARNING:
From GitLab 14.0, you must use at least PostgreSQL 12.
The latest version of GitLab might depend on a more recent PostgreSQL version
-than what you're currently running. You may also need to enable some
+than what you are running. You may also have to enable some
extensions. For more information, see the
[PostgreSQL requirements](../install/requirements.md#postgresql-requirements)
@@ -212,9 +210,9 @@ git diff origin/PREVIOUS_BRANCH:lib/support/nginx/gitlab-ssl origin/BRANCH:lib/s
git diff origin/PREVIOUS_BRANCH:lib/support/nginx/gitlab origin/BRANCH:lib/support/nginx/gitlab
```
-If you are using Strict-Transport-Security in your installation to continue
-using it you must enable it in your NGINX configuration as GitLab application no
-longer handles setting it.
+If you are using Strict-Transport-Security in your installation, you must enable it in your
+NGINX configuration to continue using it. This is because the GitLab application no longer
+sets it.
If you are using Apache instead of NGINX see the updated [Apache templates](https://gitlab.com/gitlab-org/gitlab-recipes/tree/master/web-server/apache).
Also note that because Apache does not support upstreams behind Unix sockets you
@@ -391,11 +389,11 @@ cp config/initializers/rack_attack.rb config/initializers/rack_attack_backup.rb
### 1. Revert the code to the previous version
-To revert to a previous version, you need to follow the upgrading guides
+To revert to a previous version, you must follow the upgrading guides
for the previous version.
For example, if you have upgraded to GitLab 12.6 and want to revert back to
-12.5, you need to follow the guides for upgrading from 12.4 to 12.5. You can
+12.5, follow the guides for upgrading from 12.4 to 12.5. You can
use the version dropdown at the top of the page to select the right version.
When reverting, you should **not** follow the database migration guides, as the
diff --git a/doc/update/upgrading_postgresql_using_slony.md b/doc/update/upgrading_postgresql_using_slony.md
index 3e977749207..8ccdf8d0077 100644
--- a/doc/update/upgrading_postgresql_using_slony.md
+++ b/doc/update/upgrading_postgresql_using_slony.md
@@ -9,23 +9,23 @@ info: To determine the technical writer assigned to the Stage/Group associated w
This guide describes the steps one can take to upgrade their PostgreSQL database
to the latest version without the need for hours of downtime. This guide assumes
you have two database servers: one database server running an older version of
-PostgreSQL (e.g. 9.2.18) and one server running a newer version (e.g. 9.6.0).
+PostgreSQL (for example, 9.2.18) and one server running a newer version (for example, 9.6.0).
-For this process we use a PostgreSQL replication tool called
-["Slony"](https://www.slony.info/). Slony allows replication between different
+For this process, a PostgreSQL replication tool called
+[Slony](https://www.slony.info/) is used. Slony allows replication between different
PostgreSQL versions and as such can be used to upgrade a cluster with a minimal
amount of downtime.
-In various places we refer to the user `gitlab-psql`. This user should be the
-user used to run the various PostgreSQL OS processes. If you're using a
-different user (e.g. `postgres`) you should replace `gitlab-psql` with the name
+This guide often refers to the user `gitlab-psql`, which is the
+user used to run the various PostgreSQL OS processes. If you are using a
+different user (for example, `postgres`), replace `gitlab-psql` with the name
of said user. This guide also assumes your database is called
`gitlabhq_production`. If you happen to use a different database name you should
change this accordingly.
## Database Dumps
-Slony only replicates data and not any schema changes. As a result we must
+Slony only replicates data and not any schema changes. As a result you must
ensure that all databases have the same database structure.
To do so, generate a dump of the current database. This dump only
@@ -40,10 +40,9 @@ If you're not using the Omnibus GitLab package you may have to adjust the paths
`pg_dump` and the PostgreSQL installation directory to match the paths of your
configuration.
-After the structure dump is generated we also need to generate a dump for the
+After the structure dump is generated, generate another dump for the
`schema_migrations` table. This table doesn't have any primary keys and as such
-can't be replicated easily by Slony. To generate this dump run the following
-command on your active database server:
+can't be replicated by Slony. To generate a dump of the `schema_migrations` table, run the following command on your active database server:
```shell
sudo -u gitlab-psql /opt/gitlab/embedded/bin/pg_dump -h /var/opt/gitlab/postgresql/ -p 5432 -U gitlab-psql -a -t schema_migrations -f /tmp/migrations.sql gitlabhq_production
@@ -105,7 +104,7 @@ slonik version 2.2.5
## Slony User
-Next we must set up a PostgreSQL user that Slony can use to replicate your
+Next, set up a PostgreSQL user that Slony can use to replicate your
database. To do so, sign in to your production database using `psql` using a
super-user account. After signing in, run the following SQL queries:
@@ -123,8 +122,8 @@ later.
## Configuring Slony
-We can now start configuring Slony. Slony uses a configuration file for
-most of the work so we need to set this one up. This configuration file
+You can now start configuring Slony. Slony uses a configuration file for
+most of the work so it is important to set this up with care. Your configuration
specifies where to put log files, how Slony should connect to the databases,
etc.
@@ -138,11 +137,11 @@ sudo chown gitlab-psql:root /var/log/gitlab/slony /var/run/slony1 /var/opt/gitla
```
Here `gitlab-psql` is the user used to run the PostgreSQL database processes. If
-you're using a different user you should replace this with the name of said
+you are using a different user you should replace this with the name of said
user.
-Now that the directories are in place we can create the configuration file. For
-this we can use the following template:
+Now that the directories are in place you can create the configuration file
+by using the following template:
```perl
if ($ENV{"SLONYNODES"}) {
@@ -179,15 +178,14 @@ if ($ENV{"SLONYSET"}) {
1;
```
-In this configuration file you should replace a few placeholders before you can
-use it. The following placeholders should be replaced:
+Replace the following placeholders in this file to use it:
- `OLD_HOST`: the address of the old database server.
- `NEW_HOST`: the address of the new database server.
- `SLONY_PASSWORD`: the password of the Slony user created earlier.
- `TABLES`: the tables to replicate.
-The list of tables to replicate can be generated by running the following
+Generate the list of tables to replicate by running the following
command on your old PostgreSQL database:
```shell
@@ -212,12 +210,12 @@ this output, don't just append it below it. The result looks like this:
After you have the configuration file generated you must install it on both the
old and new database. To do so, place it in
-`/var/opt/gitlab/postgresql/slony/slon_tools.conf` (for which we created the
+`/var/opt/gitlab/postgresql/slony/slon_tools.conf` (for which you created the
directory earlier on).
-Now that the configuration file is in place we can _finally_ start replicating
-our database. First we must set up the schema in our new database. To do so make
-sure that the SQL files we generated earlier can be found in the `/tmp`
+Now that the configuration file is in place, you can _finally_ start replicating
+the database. First, set up the schema in the new database by making
+sure that the SQL files generated earlier are in the `/tmp`
directory of the new server. After these files are in place start a `psql`
session on this server:
@@ -250,8 +248,8 @@ following:
... more rows here ...
```
-Now we can initialize the required tables and what not that Slony uses for
-its replication process. To do so, run the following on the old database:
+Now you can initialize the required tables and other processes for
+the replication process. To do so, run the following on the old database:
```shell
sudo -u gitlab-psql /opt/gitlab/embedded/bin/slonik_init_cluster --conf /var/opt/gitlab/postgresql/slony/slon_tools.conf | /opt/gitlab/embedded/bin/slonik
@@ -266,14 +264,14 @@ If all went well this produces something along the lines of:
<stdin>:17: Please start a slon replication daemon for each node
```
-Next we need to start a replication node on every server. To do so, run the
+Next, start a replication node on every server. To do so, run the
following on the old database:
```shell
sudo -u gitlab-psql /opt/gitlab/embedded/bin/slon_start 1 --conf /var/opt/gitlab/postgresql/slony/slon_tools.conf
```
-If all went well this produces output such as:
+This should produce an output like the following:
```plaintext
Invoke slon for node 1 - /opt/gitlab/embedded/bin/slon -p /var/run/slony1/slony_replication_node1.pid -s 1000 -d2 slony_replication 'host=192.168.0.7 dbname=gitlabhq_production user=slony port=5432 password=hieng8ezohHuCeiqu0leeghai4aeyahp' > /var/log/gitlab/slony/node1/gitlabhq_production-2016-10-06.log 2>&1 &
@@ -282,7 +280,7 @@ PID [26740]
Start the watchdog process as well...
```
-Next we need to run the following command on the _new_ database server:
+Next, run the following command on the _new_ database server:
```shell
sudo -u gitlab-psql /opt/gitlab/embedded/bin/slon_start 2 --conf /var/opt/gitlab/postgresql/slony/slon_tools.conf
@@ -290,14 +288,13 @@ sudo -u gitlab-psql /opt/gitlab/embedded/bin/slon_start 2 --conf /var/opt/gitlab
This produces similar output if all went well.
-Next we need to tell the new database server what it should replicate. This can
-be done by running the following command on the _new_ database server:
+After Slony starts, you must tell the new database server what it should replicate. Run the following command on the _new_ database server:
```shell
sudo -u gitlab-psql /opt/gitlab/embedded/bin/slonik_create_set 1 --conf /var/opt/gitlab/postgresql/slony/slon_tools.conf | /opt/gitlab/embedded/bin/slonik
```
-This should produce output along the lines of the following:
+This should produce an output like the following:
```plaintext
<stdin>:11: Subscription set 1 (set1) created
@@ -310,7 +307,7 @@ This should produce output along the lines of the following:
<stdin>:328: All tables added
```
-Finally we can start the replication process by running the following on the
+Finally, you can start the replication process by running the following on the
_new_ database server:
```shell
@@ -357,17 +354,14 @@ main
```
This script compares the sizes of the old and new database every minute and
-print the result to STDOUT as well as logging it to a file. Make sure to replace
+prints the results to STDOUT as well as logging it to a file. Make sure to replace
`SLONY_PASSWORD`, `OLD_HOST`, and `NEW_HOST` with the correct values.
## Stopping Replication
-At some point, the two databases are in sync. If this is the case, you must plan
-for a few minutes of downtime. This small downtime window is used to stop the
-replication process, remove any Slony data from both databases, and restart
-GitLab so it can use the new database.
+Eventually, the two databases become in sync. At this point, there is a few minutes of downtime that you must plan for before the replicated database is available. During this time, the replication process should stop and all Slony data should be removed from both databases. After the replication process finishes, GitLab can restart and is able to use the newly-replicated database.
-First, let's stop all of GitLab. Omnibus users can do so by running the
+First, stop all of GitLab. Omnibus users can do so by running the
following on their GitLab servers:
```shell
@@ -378,10 +372,10 @@ sudo gitlab-ctl stop mailroom
If you have any other processes that use PostgreSQL, you should also stop those.
-After everything has been stopped, be sure to update any configuration settings
+After everything successfully stops, be sure to update any configuration settings
and DNS records so they all point to the new database.
-When the settings have been taken care of, we need to stop the replication
+When the configuration is complete, stop the replication
process. It's crucial that no new data is written to the databases at this point,
as this data is discarded.
@@ -473,14 +467,14 @@ This corrects the ownership of sequences and reset the next value for the
## Removing Slony
-Next we need to remove all Slony related data. To do so, run the following
+The final step is to remove all Slony related data. To do so, run the following
command on the _target_ server:
```shell
sudo gitlab-psql gitlabhq_production -c "DROP SCHEMA _slony_replication CASCADE;"
```
-Once done you can safely remove any Slony related files (e.g. the log
+Once done you can safely remove any Slony related files (for example, the log
directory), and uninstall Slony if desired. At this point you can start your
GitLab instance again and if all went well it should be using your new database
server.
diff --git a/doc/user/abuse_reports.md b/doc/user/abuse_reports.md
deleted file mode 100644
index c84c3541366..00000000000
--- a/doc/user/abuse_reports.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: 'report_abuse.md'
-remove_date: '2021-07-21'
----
-
-This file was moved to [another location](report_abuse.md).
-
-<!-- This redirect file can be deleted after <2021-07-21>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/user/admin_area/abuse_reports.md b/doc/user/admin_area/abuse_reports.md
deleted file mode 100644
index 4bfa277fc9f..00000000000
--- a/doc/user/admin_area/abuse_reports.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: 'review_abuse_reports.md'
-remove_date: '2021-07-21'
----
-
-This file was moved to [another location](review_abuse_reports.md).
-
-<!-- This redirect file can be deleted after <2021-07-21>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/user/admin_area/activating_deactivating_users.md b/doc/user/admin_area/activating_deactivating_users.md
deleted file mode 100644
index e89c42b34ba..00000000000
--- a/doc/user/admin_area/activating_deactivating_users.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: 'moderate_users.md'
-remove_date: '2021-08-12'
----
-
-This document was moved to [another location](moderate_users.md).
-
-<!-- This redirect file can be deleted after <2021-08-12>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/user/admin_area/analytics/dev_ops_report.md b/doc/user/admin_area/analytics/dev_ops_report.md
index 89d8a5ea054..f07ccc11c60 100644
--- a/doc/user/admin_area/analytics/dev_ops_report.md
+++ b/doc/user/admin_area/analytics/dev_ops_report.md
@@ -40,12 +40,11 @@ feature is available.
## DevOps Adoption **(ULTIMATE SELF)**
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/247112) in GitLab 13.7 as a [Beta feature](https://about.gitlab.com/handbook/product/gitlab-the-product/#beta).
-> - [Deployed behind a feature flag](../../../user/feature_flags.md), disabled by default.
-> - [Enabled by default](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/59267) in GitLab 14.0.
-> - Enabled on GitLab.com.
-> - For GitLab self-managed instances, GitLab administrators can opt to [disable it](#disable-or-enable-devops-adoption). **(ULTIMATE SELF)**
> - The Overview tab [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/330401) in GitLab 14.1.
> - DAST and SAST metrics [added](https://gitlab.com/gitlab-org/gitlab/-/issues/328033) in GitLab 14.1.
+> - Fuzz Testing metrics [added](https://gitlab.com/gitlab-org/gitlab/-/issues/330398) in GitLab 14.2.
+> - Dependency Scanning metrics [added](https://gitlab.com/gitlab-org/gitlab/-/issues/328034) in GitLab 14.2.
+> - Multi-select [added](https://gitlab.com/gitlab-org/gitlab/-/issues/333586) in GitLab 14.2.
DevOps Adoption shows you which groups in your organization are using the most essential features of GitLab:
@@ -56,36 +55,20 @@ DevOps Adoption shows you which groups in your organization are using the most e
- Merge requests
- Sec
- DAST
+ - Dependency Scanning
+ - Fuzz Testing
- SAST
- Ops
- Deployments
- Pipelines
- Runners
-To add your groups, in the top right-hand section the page, select **Add group to table**.
+To add or remove your groups, in the top right-hand section the page, select **Add or remove groups**.
DevOps Adoption allows you to:
- Verify whether you are getting the return on investment that you expected from GitLab.
-- Identify specific groups that are lagging in their adoption of GitLab so you can help them along in their DevOps journey.
-- Find the groups that have adopted certain features and can provide guidance to other groups on how to use those features.
+- Identify specific groups that are lagging in their adoption of GitLab, so you can help them along in their DevOps journey.
+- Find the groups that have adopted certain features, and can provide guidance to other groups on how to use those features.
-![DevOps Report](img/admin_devops_adoption_v14_1.png)
-
-### Disable or enable DevOps Adoption
-
-DevOps Adoption is deployed behind a feature flag that is **enabled by default**.
-[GitLab administrators with access to the GitLab Rails console](../../../administration/feature_flags.md)
-can opt to disable it.
-
-To disable it:
-
-```ruby
-Feature.disable(:devops_adoption_feature)
-```
-
-To reenable it:
-
-```ruby
-Feature.enable(:devops_adoption_feature)
-```
+![DevOps Report](img/admin_devops_adoption_v14_2.png)
diff --git a/doc/user/admin_area/analytics/img/admin_devops_adoption_v14_1.png b/doc/user/admin_area/analytics/img/admin_devops_adoption_v14_1.png
deleted file mode 100644
index 79481e43e8e..00000000000
--- a/doc/user/admin_area/analytics/img/admin_devops_adoption_v14_1.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/admin_area/analytics/img/admin_devops_adoption_v14_2.png b/doc/user/admin_area/analytics/img/admin_devops_adoption_v14_2.png
new file mode 100644
index 00000000000..d4b3436f3ee
--- /dev/null
+++ b/doc/user/admin_area/analytics/img/admin_devops_adoption_v14_2.png
Binary files differ
diff --git a/doc/user/admin_area/approving_users.md b/doc/user/admin_area/approving_users.md
index 2852f73ffc8..fdf0c7edfc7 100644
--- a/doc/user/admin_area/approving_users.md
+++ b/doc/user/admin_area/approving_users.md
@@ -1,58 +1,9 @@
---
-stage: Manage
-group: Access
-info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
-type: howto
+redirect_to: 'moderate_users.md'
+remove_date: '2021-10-20'
---
-# Users pending approval
+This document was moved to [another location](moderate_users.md).
-A user in _pending approval_ state requires action by an administrator. A user sign up can be in a
-pending approval state because an administrator has enabled either, or both, of the following
-options:
-
-- [Require admin approval for new sign-ups](settings/sign_up_restrictions.md#require-administrator-approval-for-new-sign-ups) setting.
-- [User cap](settings/sign_up_restrictions.md#user-cap).
-
-When a user registers for an account while this setting is enabled:
-
-- The user is placed in a **Pending approval** state.
-- The user sees a message telling them their account is awaiting approval by an administrator.
-
-A user pending approval:
-
-- Is functionally identical to a [blocked](moderate_users.md#blocking-a-user) user.
-- Cannot sign in.
-- Cannot access Git repositories or the GitLab API.
-- Does not receive any notifications from GitLab.
-- Does not consume a [seat](../../subscriptions/self_managed/index.md#billable-users).
-
-An administrator must [approve their sign up](#approve-or-reject-a-user-sign-up) to allow them to
-sign in.
-
-## View user sign ups pending approval
-
-To view user sign ups pending approval:
-
-1. On the top bar, select **Menu >** **{admin}** **Admin**.
-1. On the left sidebar, select **Overview > Users**.
-1. Select the **Pending approval** tab.
-
-## Approve or reject a user sign up
-
-A user sign up pending approval can be approved or rejected from the Admin Area.
-
-To approve or reject a user sign up:
-
-1. On the top bar, select **Menu >** **{admin}** **Admin**.
-1. On the left sidebar, select **Overview > Users**.
-1. Select the **Pending approval** tab.
-1. (Optional) Select a user.
-1. Select the **{settings}** **User administration** dropdown.
-1. Select **Approve** or **Reject**.
-
-Approving a user:
-
-- Activates their account.
-- Changes the user's state to active.
-- Consumes a subscription [seat](../../subscriptions/self_managed/index.md#billable-users).
+<!-- This redirect file can be deleted after <2021-10-20>. -->
+<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/user/admin_area/blocking_unblocking_users.md b/doc/user/admin_area/blocking_unblocking_users.md
deleted file mode 100644
index e89c42b34ba..00000000000
--- a/doc/user/admin_area/blocking_unblocking_users.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: 'moderate_users.md'
-remove_date: '2021-08-12'
----
-
-This document was moved to [another location](moderate_users.md).
-
-<!-- This redirect file can be deleted after <2021-08-12>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/user/admin_area/custom_project_templates.md b/doc/user/admin_area/custom_project_templates.md
index 12d143b3a13..8c0586e5851 100644
--- a/doc/user/admin_area/custom_project_templates.md
+++ b/doc/user/admin_area/custom_project_templates.md
@@ -18,9 +18,13 @@ is created, based on the user's access permissions:
- Public projects can be selected by any signed-in user as a template for a new project,
if all enabled [project features](../project/settings/index.md#sharing-and-permissions)
- except for GitLab Pages are set to **Everyone With Access**.
+ except for **GitLab Pages** and **Security & Compliance** are set to **Everyone With Access**.
+ The same applies to internal projects.
- Private projects can be selected only by users who are members of the projects.
+The **Metrics Dashboard** is set to **Only Project Members** when you create a new project. Make
+sure you change it to **Everyone With Access** before making it a project template.
+
Repository and database information that are copied over to each new project are
identical to the data exported with the [GitLab Project Import/Export](../project/settings/import_export.md).
diff --git a/doc/user/admin_area/geo_nodes.md b/doc/user/admin_area/geo_nodes.md
index 19a76d0938b..861d3644ab3 100644
--- a/doc/user/admin_area/geo_nodes.md
+++ b/doc/user/admin_area/geo_nodes.md
@@ -5,61 +5,60 @@ info: To determine the technical writer assigned to the Stage/Group associated w
type: howto
---
-# Geo nodes Admin Area **(PREMIUM SELF)**
+# Geo sites Admin Area **(PREMIUM SELF)**
-You can configure various settings for GitLab Geo nodes. For more information, see
+You can configure various settings for GitLab Geo sites. For more information, see
[Geo documentation](../../administration/geo/index.md).
-On either the primary or secondary node:
+On either the primary or secondary site:
1. On the top bar, select **Menu >** **{admin}** **Admin**.
1. On the left sidebar, select **Geo > Nodes**.
## Common settings
-All Geo nodes have the following settings:
+All Geo sites have the following settings:
| Setting | Description |
| --------| ----------- |
-| Primary | This marks a Geo Node as **primary** node. There can be only one **primary** node; make sure that you first add the **primary** node and then all the others. |
-| Name | The unique identifier for the Geo node. Must match the setting `gitlab_rails['geo_node_name']` in `/etc/gitlab/gitlab.rb`. The setting defaults to `external_url` with a trailing slash. |
+| Primary | This marks a Geo site as **primary** site. There can be only one **primary** site. |
+| Name | The unique identifier for the Geo site. It's highly recommended to use a physical location as a name. Good examples are "London Office" or "us-east-1". Avoid words like "primary", "secondary", "Geo", or "DR". This makes the failover process easier because the physical location does not change, but the Geo site role can. All nodes in a single Geo site use the same site name. Nodes use the `gitlab_rails['geo_node_name']` setting in `/etc/gitlab/gitlab.rb` to lookup their Geo site record in the PostgreSQL database. If `gitlab_rails['geo_node_name']` is not set, then the node's `external_url` with trailing slash is used as fallback. The value of `Name` is case-sensitive, and most characters are allowed. |
| URL | The instance's user-facing URL. |
-The node you're reading from is indicated with a green `Current node` label, and
-the **primary** node is given a blue `Primary` label. Remember that you can only make
-changes on the **primary** node!
+The site you're currently browsing is indicated with a blue `Current` label, and
+the **primary** node is listed first as `Primary site`.
-## **Secondary** node settings
+## **Secondary** site settings
-**Secondary** nodes have a number of additional settings available:
+**Secondary** sites have a number of additional settings available:
| Setting | Description |
|---------------------------|-------------|
-| Selective synchronization | Enable Geo [selective sync](../../administration/geo/replication/configuration.md#selective-synchronization) for this **secondary** node. |
-| Repository sync capacity | Number of concurrent requests this **secondary** node will make to the **primary** node when backfilling repositories. |
-| File sync capacity | Number of concurrent requests this **secondary** node will make to the **primary** node when backfilling files. |
+| Selective synchronization | Enable Geo [selective sync](../../administration/geo/replication/configuration.md#selective-synchronization) for this **secondary** site. |
+| Repository sync capacity | Number of concurrent requests this **secondary** site will make to the **primary** site when backfilling repositories. |
+| File sync capacity | Number of concurrent requests this **secondary** site will make to the **primary** site when backfilling files. |
## Geo backfill
-**Secondary** nodes are notified of changes to repositories and files by the **primary** node,
+**Secondary** sites are notified of changes to repositories and files by the **primary** site,
and will always attempt to synchronize those changes as quickly as possible.
-Backfill is the act of populating the **secondary** node with repositories and files that
-existed *before* the **secondary** node was added to the database. Since there may be
+Backfill is the act of populating the **secondary** site with repositories and files that
+existed *before* the **secondary** site was added to the database. Since there may be
extremely large numbers of repositories and files, it's infeasible to attempt to
download them all at once, so GitLab places an upper limit on the concurrency of
these operations.
How long the backfill takes is a function of the maximum concurrency, but higher
-values place more strain on the **primary** node. From [GitLab 10.2](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/3107),
-the limits are configurable. If your **primary** node has lots of surplus capacity,
+values place more strain on the **primary** site. From [GitLab 10.2](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/3107),
+the limits are configurable. If your **primary** site has lots of surplus capacity,
you can increase the values to complete backfill in a shorter time. If it's
under heavy load and backfill is reducing its availability for normal requests,
you can decrease them.
## Using a different URL for synchronization
-The **primary** node's Internal URL is used by **secondary** nodes to contact it
+The **primary** site's Internal URL is used by **secondary** sites to contact it
(to sync repositories, for example). The name Internal URL distinguishes it from
[External URL](https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab)
which is used by users. Internal URL does not need to be a private address.
@@ -68,13 +67,13 @@ Internal URL defaults to external URL, but you can also customize it:
1. On the top bar, select **Menu >** **{admin}** **Admin**.
1. On the left sidebar, select **Geo > Nodes**.
-1. Select **Edit** on the node you want to customize.
+1. Select **Edit** on the site you want to customize.
1. Edit the internal URL.
1. Select **Save changes**.
WARNING:
-We recommend using an HTTPS connection while configuring the Geo nodes. To avoid
-breaking communication between **primary** and **secondary** nodes when using
+We recommend using an HTTPS connection while configuring the Geo sites. To avoid
+breaking communication between **primary** and **secondary** sites when using
HTTPS, customize your Internal URL to point to a load balancer with TLS
terminated at the load balancer.
@@ -84,14 +83,14 @@ using an internal URL that is not accessible to the users will result in the
OAuth authorization flow not working properly, as the users will get redirected
to the internal URL instead of the external one.
-## Multiple secondary nodes behind a load balancer
+## Multiple secondary sites behind a load balancer
-In GitLab 11.11, **secondary** nodes can use identical external URLs as long as
-a unique `name` is set for each Geo node. The `gitlab.rb` setting
+In GitLab 11.11, **secondary** sites can use identical external URLs as long as
+a unique `name` is set for each Geo site. The `gitlab.rb` setting
`gitlab_rails['geo_node_name']` must:
- Be set for each GitLab instance that runs `puma`, `sidekiq`, or `geo_logcursor`.
-- Match a Geo node name.
+- Match a Geo site name.
The load balancer must use sticky sessions in order to avoid authentication
failures and cross site request errors.
diff --git a/doc/user/admin_area/index.md b/doc/user/admin_area/index.md
index 31fd1a3a0a1..35afb9f376b 100644
--- a/doc/user/admin_area/index.md
+++ b/doc/user/admin_area/index.md
@@ -121,8 +121,8 @@ To list users matching a specific criteria, click on one of the following tabs o
- **2FA Enabled**
- **2FA Disabled**
- **External**
-- **[Blocked](moderate_users.md#blocking-a-user)**
-- **[Deactivated](moderate_users.md#deactivating-a-user)**
+- **[Blocked](moderate_users.md#block-a-user)**
+- **[Deactivated](moderate_users.md#deactivate-a-user)**
- **Without projects**
For each user, the following are listed:
@@ -164,6 +164,8 @@ You can impersonate a user in the following ways:
All impersonation activities are [captured with audit events](../../administration/audit_events.md#impersonation-data).
+By default, impersonation is enabled. GitLab can be configured to [disable impersonation](../../api/index.md#disable-impersonation).
+
![user impersonation button](img/impersonate_user_button_v13_8.png)
#### User Permission Export **(PREMIUM SELF)**
diff --git a/doc/user/admin_area/license.md b/doc/user/admin_area/license.md
index db2db4a0e68..0431b0d1628 100644
--- a/doc/user/admin_area/license.md
+++ b/doc/user/admin_area/license.md
@@ -17,7 +17,7 @@ is locked.
## Activate GitLab EE with an Activation Code **(PREMIUM SELF)**
-As of GitLab Enterprise Edition 14.0, you need an activation code to activate your instance. You can obtain an activation code by [purchasing a license](https://about.gitlab.com/pricing/) or by signing up for a [free trial](https://about.gitlab.com/free-trial/). This activation code is a 24-character alphanumeric string you receive in a confirmation email. You can also sign in to the [Customers Portal](https://customers.gitlab.com/customers/sign_in) to copy the activation code to your clipboard.
+As of GitLab Enterprise Edition 14.1, you need an activation code to activate your instance. You can obtain an activation code by [purchasing a license](https://about.gitlab.com/pricing/) or by signing up for a [free trial](https://about.gitlab.com/free-trial/). This activation code is a 24-character alphanumeric string you receive in a confirmation email. You can also sign in to the [Customers Portal](https://customers.gitlab.com/customers/sign_in) to copy the activation code to your clipboard.
To begin the activation process with your activation code:
@@ -30,7 +30,7 @@ To begin the activation process with your activation code:
## Activate GitLab EE with a License File **(PREMIUM SELF)**
-If you receive a license file from GitLab (for example a new trial), you can upload it by signing into your GitLab instance as an admin or adding it during installation. The license is a base64-encoded ASCII text file with a `.gitlab-license` extension.
+If you receive a license file from GitLab (for example a new trial), you can upload it by signing into your GitLab instance as an admin or adding it during installation. The license is a base64-encoded ASCII text file with a `.gitlab-license` extension.
## Uploading your license
@@ -153,6 +153,20 @@ additional users. More information on how to determine the required number of us
and how to add additional seats can be found in the
[licensing FAQ](https://about.gitlab.com/pricing/licensing-faq/).
+In GitLab 14.2 and later, for instances that use a license file, you can exceed the number of purchased users and still activate your license.
+
+- If the users over license are less than or equal to 10% of the users in the subscription,
+ the license is applied and the overage is paid in the next true-up.
+- If the users over license are more than 10% of the users in the subscription,
+ you cannot apply the license without purchasing more users.
+
+For example, if you purchased a license for 100 users, you can have 110 users when you activate
+your license. However, if you have 111, you must purchase more users before you can activate.
+
### There is a connectivity issue
-In GitLab 14.0 and later, to activate your subscription, your GitLab instance must be connected to the internet. If you have questions or need assistance activating your instance please [contact GitLab Support](https://about.gitlab.com/support/#contact-support).
+In GitLab 14.1 and later, to activate your subscription, your GitLab instance must be connected to the internet.
+
+If you have an offline or airgapped environment, you can [upload a license file](license.md#activate-gitlab-ee-with-a-license-file) instead.
+
+If you have questions or need assistance activating your instance, please [contact GitLab Support](https://about.gitlab.com/support/#contact-support).
diff --git a/doc/user/admin_area/merge_requests_approvals.md b/doc/user/admin_area/merge_requests_approvals.md
index b221b1d51a7..4f6419cdeb7 100644
--- a/doc/user/admin_area/merge_requests_approvals.md
+++ b/doc/user/admin_area/merge_requests_approvals.md
@@ -24,12 +24,12 @@ To enable merge request approval rules for an instance:
Merge request approval rules that can be set at an instance level are:
-- **Prevent approval of merge requests by merge request author**. Prevents project
+- **Prevent approval by author**. Prevents project
maintainers from allowing request authors to merge their own merge requests.
-- **Prevent approval of merge requests by merge request committers**. Prevents project
+- **Prevent approvals by users who add commits**. Prevents project
maintainers from allowing users to approve merge requests if they have submitted
any commits to the source branch.
-- **Prevent users from modifying merge request approvers list**. Prevents users from
+- **Prevent editing approval rules in projects and merge requests**. Prevents users from
modifying the approvers list in project settings or in individual merge requests.
Also read the [project level merge request approval rules](../project/merge_requests/approvals/index.md), which are affected by instance level rules.
diff --git a/doc/user/admin_area/moderate_users.md b/doc/user/admin_area/moderate_users.md
index 3889dd93d59..8211167895c 100644
--- a/doc/user/admin_area/moderate_users.md
+++ b/doc/user/admin_area/moderate_users.md
@@ -7,13 +7,66 @@ type: howto
# Moderate users
-GitLab administrators can moderate user access by blocking, banning, or deactivating users.
+GitLab administrators can moderate user access by approving, blocking, banning, or deactivating
+users.
-## Blocking and unblocking users
+## Users pending approval
+
+A user in _pending approval_ state requires action by an administrator. A user sign up can be in a
+pending approval state because an administrator has enabled either, or both, of the following
+options:
+
+- [Require admin approval for new sign-ups](settings/sign_up_restrictions.md#require-administrator-approval-for-new-sign-ups) setting.
+- [User cap](settings/sign_up_restrictions.md#user-cap).
+
+When a user registers for an account while this setting is enabled:
+
+- The user is placed in a **Pending approval** state.
+- The user sees a message telling them their account is awaiting approval by an administrator.
+
+A user pending approval:
+
+- Is functionally identical to a [blocked](#block-a-user) user.
+- Cannot sign in.
+- Cannot access Git repositories or the GitLab API.
+- Does not receive any notifications from GitLab.
+- Does not consume a [seat](../../subscriptions/self_managed/index.md#billable-users).
+
+An administrator must [approve their sign up](#approve-or-reject-a-user-sign-up) to allow them to
+sign in.
+
+### View user sign ups pending approval
+
+To view user sign ups pending approval:
+
+1. On the top bar, select **Menu >** **{admin}** **Admin**.
+1. On the left sidebar, select **Overview > Users**.
+1. Select the **Pending approval** tab.
+
+### Approve or reject a user sign up
+
+A user sign up pending approval can be approved or rejected from the Admin Area.
+
+To approve or reject a user sign up:
+
+1. On the top bar, select **Menu >** **{admin}** **Admin**.
+1. On the left sidebar, select **Overview > Users**.
+1. Select the **Pending approval** tab.
+1. (Optional) Select a user.
+1. Select the **{settings}** **User administration** dropdown.
+1. Select **Approve** or **Reject**.
+
+Approving a user:
+
+- Activates their account.
+- Changes the user's state to active.
+- Consumes a subscription [seat](../../subscriptions/self_managed/index.md#billable-users).
+
+## Block and unblock users
GitLab administrators can block and unblock users.
-### Blocking a user
+### Block a user
In order to completely prevent access of a user to the GitLab instance,
administrators can choose to block the user.
@@ -33,15 +86,14 @@ A blocked user:
- Cannot access Git repositories or the API.
- Does not receive any notifications from GitLab.
- Cannot use [slash commands](../../integration/slash_commands.md).
+- Does not consume a [seat](../../subscriptions/self_managed/index.md#billable-users).
Personal projects, and group and user history of the blocked user are left intact.
-Users can also be blocked using the [GitLab API](../../api/users.md#block-user).
-
NOTE:
-A blocked user does not consume a [seat](../../subscriptions/self_managed/index.md#billable-users).
+Users can also be blocked using the [GitLab API](../../api/users.md#block-user).
-### Unblocking a user
+### Unblock a user
A blocked user can be unblocked from the Admin Area. To do this:
@@ -52,24 +104,24 @@ A blocked user can be unblocked from the Admin Area. To do this:
1. Select the **{settings}** **User administration** dropdown.
1. Select **Unblock**.
-Users can also be unblocked using the [GitLab API](../../api/users.md#unblock-user).
+The user's state is set to active and they consume a
+[seat](../../subscriptions/self_managed/index.md#billable-users).
NOTE:
-Unblocking a user changes the user's state to active and consumes a
-[seat](../../subscriptions/self_managed/index.md#billable-users).
+Users can also be unblocked using the [GitLab API](../../api/users.md#unblock-user).
-## Activating and deactivating users
+## Activate and deactivate users
GitLab administrators can deactivate and activate users.
-### Deactivating a user
+### Deactivate a user
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/22257) in GitLab 12.4.
In order to temporarily prevent access by a GitLab user that has no recent activity,
administrators can choose to deactivate the user.
-Deactivating a user is functionally identical to [blocking a user](#blocking-and-unblocking-users),
+Deactivating a user is functionally identical to [blocking a user](#block-and-unblock-users),
with the following differences:
- It does not prohibit the user from logging back in via the UI.
@@ -80,6 +132,7 @@ A deactivated user:
- Cannot access Git repositories or the API.
- Does not receive any notifications from GitLab.
- Does not be able to use [slash commands](../../integration/slash_commands.md).
+- Does not consume a [seat](../../subscriptions/self_managed/index.md#billable-users).
Personal projects, and group and user history of the deactivated user are left intact.
@@ -91,15 +144,13 @@ A user can be deactivated from the Admin Area. To do this:
1. Select the **{settings}** **User administration** dropdown.
1. Select **Deactivate**.
-Please note that for the deactivation option to be visible to an admin, the user:
+For the deactivation option to be visible to an admin, the user:
- Must be currently active.
- Must not have signed in, or have any activity, in the last 90 days.
-Users can also be deactivated using the [GitLab API](../../api/users.md#deactivate-user).
-
NOTE:
-A deactivated user does not consume a [seat](../../subscriptions/self_managed/index.md#billable-users).
+Users can also be deactivated using the [GitLab API](../../api/users.md#deactivate-user).
### Automatically deactivate dormant users
@@ -118,7 +169,7 @@ When this feature is enabled, GitLab runs a job once a day to deactivate the dor
A maximum of 100,000 users can be deactivated per day.
-### Activating a user
+### Activate a user
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/22257) in GitLab 12.4.
@@ -133,29 +184,23 @@ To do this:
1. Select the **{settings}** **User administration** dropdown.
1. Select **Activate**.
-Users can also be activated using the [GitLab API](../../api/users.md#activate-user).
-
-NOTE:
-Activating a user changes the user's state to active and consumes a
+The user's state is set to active and they consume a
[seat](../../subscriptions/self_managed/index.md#billable-users).
NOTE:
A deactivated user can also activate their account themselves by logging back in via the UI.
+Users can also be activated using the [GitLab API](../../api/users.md#activate-user).
## Ban and unban users
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/327353) in GitLab 13.12.
-
-GitLab administrators can ban users.
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/327353) in GitLab 14.2.
-NOTE:
-This feature is behind a feature flag that is disabled by default. GitLab administrators
-with access to the GitLab Rails console can [enable](../../administration/feature_flags.md)
-this feature for your GitLab instance.
+GitLab administrators can ban and unban users. Banned users are blocked, and their issues are hidden.
+The banned user's comments are still displayed. Hiding a banned user's comments is [tracked in this issue](https://gitlab.com/gitlab-org/gitlab/-/issues/327356).
### Ban a user
-To completely block a user, administrators can choose to ban the user.
+To block a user and hide their contributions, administrators can ban the user.
Users can be banned using the Admin Area. To do this:
@@ -165,10 +210,7 @@ Users can be banned using the Admin Area. To do this:
1. Select the **{settings}** **User administration** dropdown.
1. Select **Ban user**.
-NOTE:
-This feature is a work in progress. Currently, banning a user
-only blocks them and does not hide their comments or issues.
-This functionality is planned to be implemented in follow up issues.
+The banned user does not consume a [seat](../../subscriptions/self_managed/index.md#billable-users).
### Unban a user
@@ -181,6 +223,5 @@ A banned user can be unbanned using the Admin Area. To do this:
1. Select the **{settings}** **User administration** dropdown.
1. Select **Unban user**.
-NOTE:
-Unbanning a user changes the user's state to active and consumes a
+The user's state is set to active and they consume a
[seat](../../subscriptions/self_managed/index.md#billable-users).
diff --git a/doc/user/admin_area/monitoring/background_migrations.md b/doc/user/admin_area/monitoring/background_migrations.md
index cbaa4b30cb7..5765a530baf 100644
--- a/doc/user/admin_area/monitoring/background_migrations.md
+++ b/doc/user/admin_area/monitoring/background_migrations.md
@@ -13,7 +13,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
> - Recommended for production use.
> - For GitLab self-managed instances, GitLab administrators can opt to [disable it](#enable-or-disable-batched-background-migrations). **(FREE SELF)**
-There can be [risks when disabling released features](../../../user/feature_flags.md#risks-when-disabling-released-features).
+There can be [risks when disabling released features](../../../administration/feature_flags.md#risks-when-disabling-released-features).
Refer to this feature's version history for more details.
To update database tables in batches, GitLab can use batched background migrations. These migrations
@@ -23,13 +23,8 @@ prevent integer overflow for some tables.
## Check the status of background migrations **(FREE SELF)**
-All migrations must have a `Finished` status before updating GitLab. To check the status of the existing
-migrations:
-
-1. On the top bar, select **Menu >** **{admin}** **Admin**.
-1. On the left sidebar, select **Monitoring > Background Migrations**.
-
- ![queued batched background migrations table](img/batched_background_migrations_queued_v14_0.png)
+All migrations must have a `Finished` status before you [upgrade GitLab](../../../update/index.md).
+You can [check the status of existing migrations](../../../update/index.md#checking-for-background-migrations-before-upgrading).
## Enable or disable batched background migrations **(FREE SELF)**
@@ -59,7 +54,7 @@ Feature.disable(:execute_batched_migrations_on_schedule)
> - Recommended for production use.
> - For GitLab self-managed instances, GitLab administrators can opt to [disable it](#enable-or-disable-automatic-batch-size-optimization). **(FREE SELF)**
-There can be [risks when disabling released features](../../../user/feature_flags.md#risks-when-disabling-released-features).
+There can be [risks when disabling released features](../../../administration/feature_flags.md#risks-when-disabling-released-features).
Refer to this feature's version history for more details.
To maximize throughput of batched background migrations (in terms of the number of tuples updated per time unit), batch sizes are automatically adjusted based on how long the previous batches took to complete.
diff --git a/doc/user/admin_area/settings/account_and_limit_settings.md b/doc/user/admin_area/settings/account_and_limit_settings.md
index 2b60ed5345b..71e05f44ef0 100644
--- a/doc/user/admin_area/settings/account_and_limit_settings.md
+++ b/doc/user/admin_area/settings/account_and_limit_settings.md
@@ -154,7 +154,12 @@ nginx['client_max_body_size'] = "200m"
> - It's deployed behind a feature flag, disabled by default.
> - It's disabled on GitLab.com.
> - It's not recommended for production use.
-> - To use it in GitLab self-managed instances, ask a GitLab administrator to [enable it](../../../security/two_factor_authentication.md#enable-or-disable-two-factor-authentication-2fa-for-git-operations)
+> - To use it in GitLab self-managed instances, ask a GitLab administrator to [enable it](../../../security/two_factor_authentication.md#enable-or-disable-two-factor-authentication-2fa-for-git-operations).
+
+NOTE:
+This feature is under development and not ready for production use. It is deployed
+behind a feature flag that is **disabled by default**. To use it in GitLab
+self-managed instances, ask a GitLab administrator to [enable it](../../../security/two_factor_authentication.md#enable-or-disable-two-factor-authentication-2fa-for-git-operations).
GitLab administrators can choose to customize the session duration (in minutes) for Git operations when 2FA is enabled. The default is 15 and this can be set to a value between 1 and 10080.
diff --git a/doc/user/admin_area/settings/continuous_integration.md b/doc/user/admin_area/settings/continuous_integration.md
index 69d86259409..3b56318e711 100644
--- a/doc/user/admin_area/settings/continuous_integration.md
+++ b/doc/user/admin_area/settings/continuous_integration.md
@@ -18,7 +18,7 @@ for all projects:
1. On the top bar, select **Menu >** **{admin}** **Admin**.
1. On the left sidebar, select **Settings > CI/CD**.
1. Check (or uncheck to disable) the box that says **Default to Auto DevOps pipeline for all projects**.
-1. Optionally, set up the [Auto DevOps base domain](../../../topics/autodevops/index.md#auto-devops-base-domain)
+1. Optionally, set up the [Auto DevOps base domain](../../../topics/autodevops/requirements.md#auto-devops-base-domain)
which is used for Auto Deploy and Auto Review Apps.
1. Hit **Save changes** for the changes to take effect.
@@ -262,10 +262,20 @@ To disable it:
1. On the top bar, select **Menu >** **{admin}** **Admin**.
1. On the left sidebar, select **Settings > CI/CD**.
1. Expand the **Package Registry** section.
-1. Uncheck **Enable forwarding of npm package requests to npmjs.org**.
-1. Click **Save changes**.
+1. Clear the checkbox **Forward npm package requests to the npm Registry if the packages are not found in the GitLab Package Registry**.
+1. Select **Save changes**.
+
+### PyPI Forwarding **(PREMIUM SELF)**
+
+GitLab administrators can disable the forwarding of PyPI requests to [pypi.org](https://pypi.org/).
+
+To disable it:
-![npm package requests forwarding](img/admin_package_registry_npm_package_requests_forward.png)
+1. On the top bar, select **Menu >** **{admin}** **Admin**.
+1. On the left sidebar, select **Settings > CI/CD**.
+1. Expand the **Package Registry** section.
+1. Clear the checkbox **Forward PyPI package requests to the PyPI Registry if the packages are not found in the GitLab Package Registry**.
+1. Select **Save changes**.
### Package file size limits
diff --git a/doc/user/admin_area/settings/email.md b/doc/user/admin_area/settings/email.md
index e637408328d..236b75797a2 100644
--- a/doc/user/admin_area/settings/email.md
+++ b/doc/user/admin_area/settings/email.md
@@ -13,27 +13,40 @@ You can customize some of the content in emails sent from your GitLab instance.
The logo in the header of some emails can be customized, see the [logo customization section](../appearance.md#navigation-bar).
-## Custom additional text **(PREMIUM SELF)**
+## Include author name in email notification email body **(PREMIUM SELF)**
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/5031) in [GitLab Premium](https://about.gitlab.com/pricing/) 10.7.
+By default, GitLab overrides the email address in notification emails with the email address
+of the issue, merge request, or comment author. Enable this setting to include the author's email
+address in the body of the email instead.
-The additional text appears at the bottom of any email and can be used for
-legal/auditing/compliance reasons.
+To include the author's email address in the email body:
1. On the top bar, select **Menu >** **{admin}** **Admin**.
1. On the left sidebar, select **Settings > Preferences** (`/admin/application_settings/preferences`).
1. Expand **Email**.
-1. Enter your text in the **Additional text** field.
-1. Click **Save**.
+1. Select the **Include author name in email notification email body** checkbox.
+1. Select **Save changes**.
+
+## Enable multipart email **(PREMIUM SELF)**
+
+GitLab can send email in multipart format (HTML and plain text) or plain text only.
+
+To enable multipart email:
+
+1. On the top bar, select **Menu >** **{admin}** **Admin**.
+1. On the left sidebar, select **Settings > Preferences** (`/admin/application_settings/preferences`).
+1. Expand **Email**.
+1. Select **Enable multipart email**.
+1. Select **Save changes**.
-## Custom hostname for private commit emails
+## Custom hostname for private commit emails **(PREMIUM SELF)**
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/22560) in GitLab 11.5.
This configuration option sets the email hostname for [private commit emails](../../profile/index.md#use-an-automatically-generated-private-commit-email).
By default it is set to `users.noreply.YOUR_CONFIGURED_HOSTNAME`.
-In order to change this option:
+To change the hostname used in private commit emails:
1. On the top bar, select **Menu >** **{admin}** **Admin**.
1. On the left sidebar, select **Settings > Preferences** (`/admin/application_settings/preferences`).
@@ -42,10 +55,23 @@ In order to change this option:
1. Select **Save changes**.
NOTE:
-After the hostname gets configured, every private commit email using the previous hostname is not
+After the hostname is configured, every private commit email using the previous hostname is not
recognized by GitLab. This can directly conflict with certain [Push rules](../../../push_rules/push_rules.md) such as
`Check whether author is a GitLab user` and `Check whether committer is the current authenticated user`.
+## Custom additional text **(PREMIUM SELF)**
+
+You can add additional text at the bottom of any email that GitLab sends. This additional text
+can be used for legal, auditing, or compliance reasons, for example.
+
+To add additional text to emails:
+
+1. On the top bar, select **Menu >** **{admin}** **Admin**.
+1. On the left sidebar, select **Settings > Preferences** (`/admin/application_settings/preferences`).
+1. Expand **Email**.
+1. Enter your text in the **Additional text** field.
+1. Select **Save changes**.
+
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
diff --git a/doc/user/admin_area/settings/floc.md b/doc/user/admin_area/settings/floc.md
index 31a626478ed..0e9d4e5d0c1 100644
--- a/doc/user/admin_area/settings/floc.md
+++ b/doc/user/admin_area/settings/floc.md
@@ -8,8 +8,8 @@ info: To determine the technical writer assigned to the Stage/Group associated w
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/60933) in GitLab Free 13.12.
-Federated Learning of Conhorts (FLoC) is a feature that the Chrome browser has
-rolled out, where users are categorized into different cohorts, so that
+Federated Learning of Cohorts (FLoC) is a new feature of the Chrome browser.
+It works by categorizing users into different cohorts, so that
advertisers can use this data to uniquely target and track users. For more
information, visit the [FLoC repository](https://github.com/WICG/floc).
diff --git a/doc/user/admin_area/settings/help_page.md b/doc/user/admin_area/settings/help_page.md
index d2f99a51ec3..01516430f4f 100644
--- a/doc/user/admin_area/settings/help_page.md
+++ b/doc/user/admin_area/settings/help_page.md
@@ -5,10 +5,10 @@ info: To determine the technical writer assigned to the Stage/Group associated w
type: howto
---
-# Customize the Help and sign-in page messages
+# Customize the Help and sign-in page messages **(FREE SELF)**
In large organizations, it is useful to have information about who to contact or where
-to go for help. You can customize and display this information on the GitLab `/help` page and on
+to go for help. You can customize and display this information on the GitLab `/help` page and on
the GitLab sign-in page.
## Add a help message to the Help page
@@ -17,32 +17,39 @@ You can add a help message, which is shown at the top of the GitLab `/help` page
<https://gitlab.com/help>):
1. On the top bar, select **Menu >** **{admin}** **Admin**.
-1. In the left sidebar, select **Settings > Preferences**, then expand **Help page**.
-1. Under **Additional text to show on the Help page**, fill in the information you wish to display on `/help`.
-1. Select **Save changes**. You can now see the message on `/help`.
+1. On the left sidebar, select **Settings > Preferences**.
+1. Expand **Sign-in and Help page**.
+1. In **Additional text to show on the Help page**, enter the information you want to display on `/help`.
+1. Select **Save changes**.
+
+You can now see the message on `/help`.
NOTE:
By default, `/help` is visible to unauthenticated users. However, if the
-[**Public** visibility level](visibility_and_access_controls.md#restricted-visibility-levels)
+[**Public** visibility level](visibility_and_access_controls.md#restrict-visibility-levels)
is restricted, `/help` is visible only to signed-in users.
-## Add a help message to the sign-in page **(STARTER)**
+## Add a help message to the sign-in page
You can add a help message, which is shown on the GitLab sign-in page. The message appears in a new
section titled **Need Help?**, located below the sign-in page message:
1. On the top bar, select **Menu >** **{admin}** **Admin**.
-1. In the left sidebar, select **Settings > Preferences**, then expand **Help page**.
-1. Under **Additional text to show on the sign-in page**, fill in the information you wish to
+1. On the left sidebar, select **Settings > Preferences**.
+1. Expand **Sign-in and Help page**.
+1. In **Additional text to show on the sign-in page**, enter the information you want to
display on the sign-in page.
-1. Select **Save changes**. You can now see the message on the sign-in page.
+1. Select **Save changes**.
+
+You can now see the message on the sign-in page.
## Hide marketing-related entries from the Help page
GitLab marketing-related entries are occasionally shown on the Help page. To hide these entries:
1. On the top bar, select **Menu >** **{admin}** **Admin**.
-1. In the left sidebar, select **Settings > Preferences**, then expand **Help page**.
+1. On the left sidebar, select **Settings > Preferences**.
+1. Expand **Sign-in and Help page**.
1. Select the **Hide marketing-related entries from the Help page** checkbox.
1. Select **Save changes**.
@@ -54,10 +61,48 @@ You can specify a custom URL to which users are directed when they:
- Select **See our website for help** on the Help page.
1. On the top bar, select **Menu >** **{admin}** **Admin**.
-1. In the left sidebar, select **Settings > Preferences**, then expand **Help page**.
-1. Enter the URL in the **Support page URL** field.
+1. On the left sidebar, select **Settings > Preferences**.
+1. Expand **Sign-in and Help page**.
+1. In the **Support page URL** field, enter the URL.
1. Select **Save changes**.
+## Redirect `/help` pages
+
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/43157) in GitLab 13.5.
+> - Enabled on GitLab.com and is ready for production use.
+
+FLAG:
+On self-managed GitLab, by default this feature is not available. To make it available, ask an administrator to
+[enable the `:help_page_documentation_redirect` flag](../../../administration/feature_flags.md).
+On GitLab.com, this feature is available but can be configured by GitLab.com administrators only.
+
+The `/help` URL of a GitLab instance displays a basic version of the documentation sourced from the
+[`doc` directory](https://gitlab.com/gitlab-org/gitlab/-/tree/master/doc) of GitLab. `/help` links
+are often used for contextual help.
+
+You can redirect these `/help` links to either:
+
+- The more navigable and searchable version published at [`docs.gitlab.com`](https://docs.gitlab.com).
+- A destination that meets [necessary requirements](#destination-requirements).
+
+1. On the top bar, select **Menu >** **{admin}** **Admin**.
+1. In the left sidebar, select **Settings > Preferences**.
+1. Expand **Sign-in and Help page**.
+1. In the **Documentation pages URL** field, enter the URL.
+1. Select **Save changes**.
+
+### Destination requirements
+
+When redirecting `/help`, GitLab:
+
+- Redirects requests to the specified URL.
+- Appends `ee` and the documentation path to the URL.
+- Appends `.html` to the URL, and removes `.md` if necessary.
+
+For example, if the URL is set to `https://docs.gitlab.com`, requests for
+`/help/user/admin_area/settings/help_page.md` redirect to:
+`https://docs.gitlab.com/ee/user/admin_area/settings/help_page.html`.
+
<!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues
diff --git a/doc/user/admin_area/settings/img/admin_package_registry_npm_package_requests_forward.png b/doc/user/admin_area/settings/img/admin_package_registry_npm_package_requests_forward.png
deleted file mode 100644
index b6068f5d19b..00000000000
--- a/doc/user/admin_area/settings/img/admin_package_registry_npm_package_requests_forward.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/admin_area/settings/img/clone_panel_v12_4.png b/doc/user/admin_area/settings/img/clone_panel_v12_4.png
deleted file mode 100644
index 427224f5b78..00000000000
--- a/doc/user/admin_area/settings/img/clone_panel_v12_4.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/admin_area/settings/img/domain_denylist.png b/doc/user/admin_area/settings/img/domain_denylist.png
deleted file mode 100644
index a7e972b7c0a..00000000000
--- a/doc/user/admin_area/settings/img/domain_denylist.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/admin_area/settings/img/domain_denylist_v14_1.png b/doc/user/admin_area/settings/img/domain_denylist_v14_1.png
new file mode 100644
index 00000000000..c988afd75f6
--- /dev/null
+++ b/doc/user/admin_area/settings/img/domain_denylist_v14_1.png
Binary files differ
diff --git a/doc/user/admin_area/settings/img/enforce_terms.png b/doc/user/admin_area/settings/img/enforce_terms.png
deleted file mode 100644
index de1a82275ab..00000000000
--- a/doc/user/admin_area/settings/img/enforce_terms.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/admin_area/settings/img/rate_limit_on_issues_creation_v13_1.png b/doc/user/admin_area/settings/img/rate_limit_on_issues_creation_v13_1.png
deleted file mode 100644
index 9edc916c7fb..00000000000
--- a/doc/user/admin_area/settings/img/rate_limit_on_issues_creation_v13_1.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/admin_area/settings/img/rate_limit_on_issues_creation_v14_2.png b/doc/user/admin_area/settings/img/rate_limit_on_issues_creation_v14_2.png
new file mode 100644
index 00000000000..63f4d5a4a1a
--- /dev/null
+++ b/doc/user/admin_area/settings/img/rate_limit_on_issues_creation_v14_2.png
Binary files differ
diff --git a/doc/user/admin_area/settings/img/respond_to_terms.png b/doc/user/admin_area/settings/img/respond_to_terms.png
deleted file mode 100644
index f91480d1ce7..00000000000
--- a/doc/user/admin_area/settings/img/respond_to_terms.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/admin_area/settings/index.md b/doc/user/admin_area/settings/index.md
index d21b6c36224..21ca1c573fe 100644
--- a/doc/user/admin_area/settings/index.md
+++ b/doc/user/admin_area/settings/index.md
@@ -51,10 +51,10 @@ To access the default page for Admin Area settings:
| Option | Description |
| ------ | ----------- |
| [Repository's custom initial branch name](../../project/repository/branches/default.md#instance-level-custom-initial-branch-name) | Set a custom branch name for new repositories created in your instance. |
-| [Repository mirror](visibility_and_access_controls.md#allow-mirrors-to-be-set-up-for-projects) | Configure repository mirroring. |
+| [Repository mirror](visibility_and_access_controls.md#enable-project-mirroring) | Configure repository mirroring. |
| [Repository storage](../../../administration/repository_storage_types.md) | Configure storage path settings. |
| Repository maintenance | ([Repository checks](../../../administration/repository_checks.md) and [Housekeeping](../../../administration/housekeeping.md)). Configure automatic Git checks and housekeeping on repositories. |
-| [Repository static objects](../../../administration/static_objects_external_storage.md) | Serve repository static objects (for example, archives, blobs, ...) from an external storage (for example, a CDN). |
+| [Repository static objects](../../../administration/static_objects_external_storage.md) | Serve repository static objects (for example, archives and blobs) from an external storage (for example, a CDN). |
## Templates **(PREMIUM SELF)**
@@ -84,8 +84,8 @@ To access the default page for Admin Area settings:
| ------ | ----------- |
| [Metrics - Prometheus](../../../administration/monitoring/prometheus/gitlab_metrics.md) | Enable and configure Prometheus metrics. |
| [Metrics - Grafana](../../../administration/monitoring/performance/grafana_configuration.md#integration-with-gitlab-ui) | Enable and configure Grafana. |
-| [Profiling - Performance bar](../../../administration/monitoring/performance/performance_bar.md#enable-the-performance-bar-via-the-admin-area) | Enable access to the Performance Bar for a given group. |
-| [Self monitoring](../../../administration/monitoring/gitlab_self_monitoring_project/index.md#creating-the-self-monitoring-project) | Enable or disable instance self monitoring. |
+| [Profiling - Performance bar](../../../administration/monitoring/performance/performance_bar.md#enable-the-performance-bar-for-non-administrators) | Enable access to the Performance Bar for non-administrator users in a given group. |
+| [Self monitoring](../../../administration/monitoring/gitlab_self_monitoring_project/index.md#create-the-self-monitoring-project) | Enable or disable instance self monitoring. |
| [Usage statistics](usage_statistics.md) | Enable or disable version check and Service Ping. |
| [Pseudonymizer data collection](../../../administration/pseudonymizer.md) **(ULTIMATE)** | Enable or disable the Pseudonymizer data collection. |
@@ -115,7 +115,7 @@ To access the default page for Admin Area settings:
| [What's new](../../../administration/whats-new.md) | Configure What's new drawer and content. |
| [Help page](help_page.md) | Help page text and support page URL. |
| [Pages](../../../administration/pages/index.md#custom-domain-verification) | Size and domain settings for static websites |
-| [Real-time features](../../../administration/polling.md) | Change this value to influence how frequently the GitLab UI polls for updates. |
+| [Polling interval multiplier](../../../administration/polling.md) | Configure how frequently the GitLab UI polls for updates. |
| [Gitaly timeouts](gitaly_timeouts.md) | Configure Gitaly timeouts. |
| Localization | [Default first day of the week](../../profile/preferences.md) and [Time tracking](../../project/time_tracking.md#limit-displayed-units-to-hours). |
diff --git a/doc/user/admin_area/settings/project_integration_management.md b/doc/user/admin_area/settings/project_integration_management.md
index 3140eecfa53..3b949b638d8 100644
--- a/doc/user/admin_area/settings/project_integration_management.md
+++ b/doc/user/admin_area/settings/project_integration_management.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
@@ -61,6 +61,18 @@ integration on all non-configured groups and projects by default.
Resetting an instance-level default setting removes the integration from all projects that have the integration set to use default settings.
+### View projects that override the default settings
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/218252) in GitLab 14.2.
+
+You can view which projects in your instance use custom settings that [override the instance-level default settings](#use-custom-settings-for-a-group-or-project-integration)
+for an integration.
+
+1. On the top bar, select **Menu >** **{admin}** **Admin**.
+1. In the left sidebar, select **Settings > Integrations**.
+1. Select an integration.
+1. Select the **Projects using custom settings** tab.
+
## Manage group-level default settings for a project integration
> [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/2543) in GitLab 13.6.
diff --git a/doc/user/admin_area/settings/rate_limit_on_issues_creation.md b/doc/user/admin_area/settings/rate_limit_on_issues_creation.md
index ef2b8ad80cd..bba61a7b913 100644
--- a/doc/user/admin_area/settings/rate_limit_on_issues_creation.md
+++ b/doc/user/admin_area/settings/rate_limit_on_issues_creation.md
@@ -9,7 +9,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/28129) in GitLab 12.10.
-This setting allows you to rate limit the requests to the issue creation endpoint.
+This setting allows you to rate limit the requests to the issue and epic creation endpoints.
To can change its value:
1. On the top bar, select **Menu >** **{admin}** **Admin**.
@@ -22,7 +22,9 @@ For example, if you set a limit of 300, requests using the
[Projects::IssuesController#create](https://gitlab.com/gitlab-org/gitlab/raw/master/app/controllers/projects/issues_controller.rb)
action exceeding a rate of 300 per minute are blocked. Access to the endpoint is allowed after one minute.
-![Rate limits on issues creation](img/rate_limit_on_issues_creation_v13_1.png)
+When using [epics](../../group/epics/index.md), epic creation will share this rate limit with issues.
+
+![Rate limits on issues creation](img/rate_limit_on_issues_creation_v14_2.png)
This limit is:
diff --git a/doc/user/admin_area/settings/rate_limit_on_notes_creation.md b/doc/user/admin_area/settings/rate_limit_on_notes_creation.md
index 193f39542cf..7615ad6f81d 100644
--- a/doc/user/admin_area/settings/rate_limit_on_notes_creation.md
+++ b/doc/user/admin_area/settings/rate_limit_on_notes_creation.md
@@ -17,7 +17,7 @@ To change the note creation rate limit:
1. On the left sidebar, select **Settings > Network**.
1. Expand **Notes Rate Limits**.
1. Under **Max requests per minute per user**, enter the new value.
-1. Optional. Under **List of users to be excluded from the limit**, list users to be excluded fromt the limit.
+1. Optional. Under **List of users to be excluded from the limit**, list users to be excluded from the limit.
1. Select **Save changes**.
This limit is:
diff --git a/doc/user/admin_area/settings/sign_up_restrictions.md b/doc/user/admin_area/settings/sign_up_restrictions.md
index 1098c7060f8..c774ae2eecc 100644
--- a/doc/user/admin_area/settings/sign_up_restrictions.md
+++ b/doc/user/admin_area/settings/sign_up_restrictions.md
@@ -31,7 +31,10 @@ To disable sign ups:
> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/4491) in GitLab 13.5.
> - [Enabled by default](https://gitlab.com/gitlab-org/gitlab/-/issues/267568) in GitLab 13.6.
-When this setting is enabled, any user visiting your GitLab domain and signing up for a new account must be explicitly [approved](../approving_users.md#approve-or-reject-a-user-sign-up) by an administrator before they can start using their account. In GitLab 13.6 and later, this setting is enabled by default for new GitLab instances. It is only applicable if sign ups are enabled.
+When this setting is enabled, any user visiting your GitLab domain and signing up for a new account
+must be explicitly [approved](../moderate_users.md#approve-or-reject-a-user-sign-up) by an
+administrator before they can start using their account. In GitLab 13.6 and later, this setting is
+enabled by default for new GitLab instances. It is only applicable if sign ups are enabled.
To require administrator approval for new sign ups:
@@ -59,7 +62,7 @@ To enforce confirmation of the email address used for new sign ups:
> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/292600) in GitLab 13.9.
When the number of billable users reaches the user cap, any user who is added or requests access must be
-[approved](../approving_users.md#approve-or-reject-a-user-sign-up) by an administrator before they can start using
+[approved](../moderate_users.md#approve-or-reject-a-user-sign-up) by an administrator before they can start using
their account.
If an administrator [increases](#set-the-user-cap-number) or [removes](#remove-the-user-cap) the
@@ -145,7 +148,7 @@ To create an email domain allowlist or denylist:
domains ending in `.io`. Domains must be separated by a whitespace,
semicolon, comma, or a new line.
- ![Domain Denylist](img/domain_denylist.png)
+ ![Domain Denylist](img/domain_denylist_v14_1.png)
### Enable or disable soft email confirmation
diff --git a/doc/user/admin_area/settings/terms.md b/doc/user/admin_area/settings/terms.md
index 46e85ffc9c0..21805ef771f 100644
--- a/doc/user/admin_area/settings/terms.md
+++ b/doc/user/admin_area/settings/terms.md
@@ -5,59 +5,35 @@ info: To determine the technical writer assigned to the Stage/Group associated w
type: reference
---
-# Enforce accepting Terms of Service **(FREE SELF)**
+# Terms of Service and Privacy Policy **(FREE SELF)**
-An administrator can enforce acceptance of a terms of service and privacy policy. When this option is enabled, new and existing users must accept the terms.
+An administrator can enforce acceptance of a terms of service and privacy policy.
+When this option is enabled, new and existing users must accept the terms.
-If configured, the Terms of Service page can be viewed via `https://your-instance.com/-/users/terms` at anytime.
+When enabled, you can view the Terms of Service at the `-/users/terms` page on the instance,
+for example `https://gitlab.example.com/-/users/terms`.
-## Configuration
+## Enforce a Terms of Service and Privacy Policy
To enforce acceptance of a Terms of Service and Privacy Policy:
-1. Log in to the GitLab instance as an admin user.
1. On the top bar, select **Menu >** **{admin}** **Admin**.
1. In the left sidebar, select **Settings > General**.
1. Expand the **Terms of Service and Privacy Policy** section.
-1. Check the **Require all users to accept Terms of Service and Privacy Policy when they access
- GitLab.** checkbox.
-1. Input the text of the **Terms of Service and Privacy Policy**. Markdown formatting can be used in this input box.
+1. Check the **All users must accept the Terms of Service and Privacy Policy to access GitLab** checkbox.
+1. Input the text of the **Terms of Service and Privacy Policy**. You can use [Markdown](../../markdown.md)
+ in this text box.
1. Click **Save changes**.
-1. When you are presented with the **Terms of Service** statement, click **Accept terms**.
-
-![Enable enforcing Terms of Service](img/enforce_terms.png)
For each update to the terms, a new version is stored. When a user accepts or declines the terms,
GitLab records which version they accepted or declined.
-## New users
-
-When this feature is enabled, a checkbox is added to the sign-up form.
+When enabled, it adds a mandatory checkbox to the sign up page for new users:
![Sign up form](img/sign_up_terms.png)
-This checkbox is required during sign up.
-
-Users can review the terms entered in the admin panel before
-accepting. The page is opened in a new window so they can
-continue their registration afterwards.
-
-## Accepting terms
-
-When this feature is enabled, the users that have not accepted the
-terms of service are presented with a screen where they can either
-accept or decline the terms.
-
-![Respond to terms](img/respond_to_terms.png)
-
-If the user accepts the terms, they are directed to where they
-were going. After a sign-in or sign-up this is most likely the
-dashboard.
-
-If the user was already logged in when the feature was turned on,
-they are asked to accept the terms on their next interaction.
-
-If a user declines the terms, they are signed out.
+Existing users must accept the terms on their next GitLab interaction.
+If a logged-in user declines the terms, they are signed out.
<!-- ## Troubleshooting
diff --git a/doc/user/admin_area/settings/usage_statistics.md b/doc/user/admin_area/settings/usage_statistics.md
index c12b720edd2..89c6be9608b 100644
--- a/doc/user/admin_area/settings/usage_statistics.md
+++ b/doc/user/admin_area/settings/usage_statistics.md
@@ -10,25 +10,24 @@ type: reference
GitLab Inc. periodically collects information about your instance in order
to perform various actions.
-All statistics are opt-out. To enable or disable them:
+All usage statistics are [opt-out](#enable-or-disable-usage-statistics).
-1. On the top bar, select **Menu >** **{admin}** **Admin**.
-1. In the left sidebar, select **Settings > Metrics and profiling**, and expand **Usage statistics**.
-1. Enable or disable **Version check** and **Service ping**.
-1. Select **Save changes**.
+## Service Ping **(FREE SELF)**
-## Network configuration
+Service Ping is a process that collects and sends a weekly payload to GitLab Inc.
+For more information, see the [Service Ping guide](../../../development/service_ping/index.md).
-Allow network traffic from your GitLab instance to IP address `104.196.17.203:443`, to send
-usage statistics to GitLab Inc.
+### Instance-level analytics availability
-If your GitLab instance is behind a proxy, set the appropriate [proxy configuration variables](https://docs.gitlab.com/omnibus/settings/environment-variables.html).
+When Service Ping is enabled, GitLab gathers data from other instances and
+enables certain [instance-level analytics features](../analytics/index.md)
+that are dependent on Service Ping.
-## Version Check **(FREE SELF)**
+## Version check **(FREE SELF)**
If enabled, version check informs you if a new version is available and the
-importance of it through a status. This is shown on the help page (i.e. `/help`)
-for all signed in users, and on the admin pages. The statuses are:
+importance of it through a status. The status displays on the help pages (`/help`)
+for all signed-in users, and on the Admin Area pages. The statuses are:
- Green: You are running the latest version of GitLab.
- Orange: An updated version of GitLab is available.
@@ -44,17 +43,12 @@ This information is used, among other things, to identify to which versions
patches must be backported, making sure active GitLab instances remain
secure.
-If you disable version check, this information isn't collected. To enable or disable it:
-
-1. On the top bar, select **Menu >** **{admin}** **Admin**.
-1. In the left sidebar, select **Settings > Metrics and profiling**, and expand **Usage statistics**.
-1. Enable or disable **Version check**.
-1. Select **Save changes**.
+If you [disable version check](#enable-or-disable-usage-statistics), this information isn't collected.
### Request flow example
-The following example shows a basic request/response flow between the self-managed GitLab instance
-and the GitLab Version Application:
+The following example shows a basic request/response flow between a
+self-managed GitLab instance and the GitLab Version Application:
```mermaid
sequenceDiagram
@@ -67,14 +61,22 @@ sequenceDiagram
Version Application->>GitLab instance: Response (PNG/SVG)
```
-## Service Ping **(FREE SELF)**
+## Configure your network
+
+To send usage statistics to GitLab Inc., you must allow network traffic from your
+GitLab instance to the IP address `104.196.17.203:443`.
+
+If your GitLab instance is behind a proxy, set the appropriate
+[proxy configuration variables](https://docs.gitlab.com/omnibus/settings/environment-variables.html).
-See [Service Ping guide](../../../development/service_ping/index.md).
+## Enable or disable usage statistics
-## Instance-level analytics availability
+To enable or disable Service Ping and version check:
-After Service Ping is enabled, GitLab gathers data from other instances and
-enables certain [instance-level analytics features](../analytics/index.md) that are dependent on Service Ping.
+1. On the top bar, select **Menu >** **{admin}** **Admin**.
+1. In the left sidebar, select **Settings > Metrics and profiling**, and expand **Usage statistics**.
+1. Select or clear the **Version check** and **Service ping** checkboxes.
+1. Select **Save changes**.
<!-- ## Troubleshooting
diff --git a/doc/user/admin_area/settings/visibility_and_access_controls.md b/doc/user/admin_area/settings/visibility_and_access_controls.md
index 4af33c133a4..c46aec76e57 100644
--- a/doc/user/admin_area/settings/visibility_and_access_controls.md
+++ b/doc/user/admin_area/settings/visibility_and_access_controls.md
@@ -5,9 +5,10 @@ info: "To determine the technical writer assigned to the Stage/Group associated
type: reference
---
-# Visibility and access controls **(FREE SELF)**
+# Control access and visibility **(FREE SELF)**
-GitLab allows administrators to enforce specific controls.
+GitLab enables users with the [Administrator role](../../permissions.md) to enforce
+specific controls on branches, projects, snippets, groups, and more.
To access the visibility and access control options:
@@ -16,59 +17,95 @@ To access the visibility and access control options:
1. In the left sidebar, select **Settings > General**.
1. Expand the **Visibility and access controls** section.
-## Default branch protection
+## Protect default branches
-This global option defines the branch protection that applies to every repository's
-[default branch](../../project/repository/branches/default.md).
-[Branch protection](../../project/protected_branches.md) specifies which roles can push
-to branches and which roles can delete branches. In this case _Default_ refers to a
-repository's [default branch](../../project/repository/branches/default.md).
+With this option, you can define [branch protections](../../project/protected_branches.md)
+to apply to every repository's [default branch](../../project/repository/branches/default.md).
+These protections specify the user roles with permission to:
-This setting applies only to each repositories' default branch. To protect other branches, you must configure branch protection in repository. For details, see [protected branches](../../project/protected_branches.md).
+- Push to branches.
+- Delete branches.
-To change the default branch protection:
+This setting applies only to each repository's default branch. To protect other branches,
+you must configure [branch protection in the repository](../../project/protected_branches.md),
+or configure [branch protection for groups](../../group/index.md#change-the-default-branch-protection-of-a-group).
-1. Select the desired option.
-1. Click **Save changes**.
-
-For more details, see [Protected branches](../../project/protected_branches.md).
+To change the default branch protection for the entire instance:
-To change this setting for a specific group, see [Default branch protection for groups](../../group/index.md#change-the-default-branch-protection-of-a-group)
+1. Sign in to GitLab as a user with [Administrator role](../../permissions.md).
+1. On the top bar, select **Menu >** **{admin}** **Admin**.
+1. In the left sidebar, select **Settings > General**.
+1. Expand the **Visibility and access controls** section.
+1. Select a **Default branch protection**:
+ - **Not protected** - Both developers and maintainers can push new commits,
+ force push, or delete the branch.
+ - **Protected against pushes** - Developers cannot push new commits, but are
+ allowed to accept merge requests to the branch. Maintainers can push to the branch.
+ - **Partially protected** - Both developers and maintainers can push new commits,
+ but cannot force push or delete the branch.
+ - **Fully protected** - Developers cannot push new commits, but maintainers can.
+ No one can force push or delete the branch.
+1. To allow group owners to override the instance's default branch protection, select
+ [**Allow owners to manage default branch protection per group**](#prevent-overrides-of-default-branch-protection).
+1. Select **Save changes**.
-### Disable group owners from updating default branch protection **(PREMIUM SELF)**
+### Prevent overrides of default branch protection **(PREMIUM SELF)**
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/211944) in GitLab 13.0.
-By default, group owners are allowed to override the branch protection set at the global level.
-
-In [GitLab Premium or higher](https://about.gitlab.com/pricing/), GitLab administrators can disable this privilege of group owners.
-
-To do this:
+Instance-level protections for [default branch](../../project/repository/branches/default.md)
+can be overridden on a per-group basis by the group's owner. In
+[GitLab Premium or higher](https://about.gitlab.com/pricing/), GitLab administrators can
+disable this privilege for group owners, enforcing the instance-level protection rule:
-1. Uncheck the **Allow owners to manage default branch protection per group** checkbox.
+1. Sign in to GitLab as a user with [Administrator role](../../permissions.md).
+1. On the top bar, select **Menu >** **{admin}** **Admin**.
+1. In the left sidebar, select **Settings > General**.
+1. Expand the **Visibility and access controls** section.
+1. Deselect the **Allow owners to manage default branch protection per group** checkbox.
+1. Select **Save changes**.
NOTE:
GitLab administrators can still update the default branch protection of a group.
-## Default project creation protection
+## Define which roles can create projects
-Project creation protection specifies which roles can create projects.
+Instance-level protections for project creation define which roles can
+[add projects to a group](../../group/index.md#specify-who-can-add-projects-to-a-group)]
+on the instance. To alter which roles have permission to create projects:
-To change the default project creation protection:
+1. Sign in to GitLab as a user with [Administrator role](../../permissions.md).
+1. On the top bar, select **Menu >** **{admin}** **Admin**.
+1. In the left sidebar, select **Settings > General**.
+1. Expand the **Visibility and access controls** section.
+1. For **Default project creation protection**, select the desired roles:
+ - No one.
+ - Maintainers.
+ - Developers and Maintainers.
+1. Select **Save changes**.
-1. Select the desired option.
-1. Click **Save changes**.
+## Restrict project deletion to Administrators **(PREMIUM SELF)**
+
+Anyone with the **Owner** role, either at the project or group level, can
+delete a project. To allow only users with the Administrator role to delete projects:
-For more details, see [Specify who can add projects to a group](../../group/index.md#specify-who-can-add-projects-to-a-group).
+1. Sign in to GitLab as a user with [Administrator role](../../permissions.md).
+1. On the top bar, select **Menu >** **{admin}** **Admin**.
+1. In the left sidebar, select **Settings > General**.
+1. Expand the **Visibility and access controls** section.
+1. Scroll to **Default project deletion protection**, and select **Only admins can delete project**.
+1. Select **Save changes**.
-## Default project deletion protection **(PREMIUM SELF)**
+## Default delayed project deletion **(PREMIUM SELF)**
-By default, a project can be deleted by anyone with the **Owner** role, either at the project or
-group level.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/255449) in GitLab 14.2.
-To ensure only Administrator users can delete projects:
+Projects in a group (but not a personal namespace) can be deleted after a delayed period, by
+[configuring in Group Settings](../../group/index.md#enable-delayed-project-removal).
-1. Check the **Default project deletion protection** checkbox.
+To enable delayed project deletion by default in new groups:
+
+1. Check the **Default delayed project deletion** checkbox.
1. Click **Save changes**.
## Default deletion delay **(PREMIUM SELF)**
@@ -92,7 +129,7 @@ To change this period:
1. Select the desired option.
1. Click **Save changes**.
-### Override default deletion delayed period
+### Override defaults and delete immediately
Alternatively, projects that are marked for removal can be deleted immediately. To do so:
@@ -100,107 +137,132 @@ Alternatively, projects that are marked for removal can be deleted immediately.
1. Delete the project as described in the
[Administering Projects page](../../admin_area/#administering-projects).
-## Default project visibility
-
-To set the default visibility levels for new projects:
+## Configure project visibility defaults
-1. Select the desired default project visibility.
-1. Click **Save changes**.
+To set the default [visibility levels for new projects](../../../public_access/public_access.md):
-For more details on project visibility, see
-[Project visibility](../../../public_access/public_access.md).
+1. Sign in to GitLab as a user with [Administrator role](../../permissions.md).
+1. On the top bar, select **Menu >** **{admin}** **Admin**.
+1. In the left sidebar, select **Settings > General**.
+1. Expand the **Visibility and access controls** section.
+1. Select the desired default project visibility:
+ - **Private** - Project access must be granted explicitly to each user. If this
+ project is part of a group, access will be granted to members of the group.
+ - **Internal** - The project can be accessed by any logged in user except external users.
+ - **Public** - The project can be accessed without any authentication.
+1. Select **Save changes**.
-## Default snippet visibility
+## Configure snippet visibility defaults
-To set the default visibility levels for new snippets:
+To set the default visibility levels for new [snippets](../../snippets.md):
+1. Sign in to GitLab as a user with [Administrator role](../../permissions.md).
+1. On the top bar, select **Menu >** **{admin}** **Admin**.
+1. In the left sidebar, select **Settings > General**.
+1. Expand the **Visibility and access controls** section.
1. Select the desired default snippet visibility.
-1. Click **Save changes**.
+1. Select **Save changes**.
-For more details on snippet visibility, see
+For more details on snippet visibility, read
[Project visibility](../../../public_access/public_access.md).
-## Default group visibility
+## Configure group visibility defaults
To set the default visibility levels for new groups:
-1. Select the desired default group visibility.
-1. Click **Save changes**.
+1. Sign in to GitLab as a user with [Administrator role](../../permissions.md).
+1. On the top bar, select **Menu >** **{admin}** **Admin**.
+1. In the left sidebar, select **Settings > General**.
+1. Expand the **Visibility and access controls** section.
+1. Select the desired default group visibility:
+ - **Private** - The group and its projects can only be viewed by members.
+ - **Internal** - The group and any internal projects can be viewed by any logged in user except external users.
+ - **Public** - The group and any public projects can be viewed without any authentication.
+1. Select **Save changes**.
For more details on group visibility, see
[Group visibility](../../group/index.md#group-visibility).
-## Restricted visibility levels
+## Restrict visibility levels
-To set the restricted visibility levels for projects, snippets, and selected pages:
+To restrict visibility levels for projects, snippets, and selected pages:
-1. Select the desired visibility levels to restrict.
+1. Sign in to GitLab as a user with [Administrator role](../../permissions.md).
+1. On the top bar, select **Menu >** **{admin}** **Admin**.
+1. In the left sidebar, select **Settings > General**.
+1. Expand the **Visibility and access controls** section.
+1. In the **Restricted visibility levels** section, select the desired visibility levels to restrict.
1. Select **Save changes**.
For more details on project visibility, see
[Project visibility](../../../public_access/public_access.md).
-## Import sources
-
-To specify from which hosting sites users can [import their projects](../../project/import/index.md):
-
-1. Check the checkbox beside the name of each hosting site.
-1. Click **Save changes**.
+## Configure allowed import sources
-## Project export
+You can specify from which hosting sites users can [import their projects](../../project/import/index.md):
-To enable project export:
+1. Sign in to GitLab as a user with [Administrator role](../../permissions.md).
+1. On the top bar, select **Menu >** **{admin}** **Admin**.
+1. In the left sidebar, select **Settings > General**.
+1. Expand the **Visibility and access controls** section.
+1. Select each of **Import sources** to allow.
+1. Select **Save changes**.
-1. Check the **Project export enabled** checkbox.
-1. Click **Save changes**.
+## Enable project export
-For more details, see [Exporting a project and its data](../../../user/project/settings/import_export.md#exporting-a-project-and-its-data).
+To enable the export of
+[projects and their data](../../../user/project/settings/import_export.md#export-a-project-and-its-data):
-## Enabled Git access protocols
+1. Sign in to GitLab as a user with [Administrator role](../../permissions.md).
+1. On the top bar, select **Menu >** **{admin}** **Admin**.
+1. In the left sidebar, select **Settings > General**.
+1. Expand the **Visibility and access controls** section.
+1. Select **Project export enabled**.
+1. Select **Save changes**.
-With GitLab access restrictions, you can select with which protocols users can communicate with
-GitLab.
+## Configure enabled Git access protocols
-Disabling an access protocol does not block access to the server itself by using those ports. The ports
-used for the protocol, SSH or HTTP(S), are still accessible. The GitLab restrictions apply at the
-application level.
+With GitLab access restrictions, you can select the protocols users can use to
+communicate with GitLab. Disabling an access protocol does not block port access to the
+server itself. The ports used for the protocol, SSH or HTTP(S), are still accessible.
+The GitLab restrictions apply at the application level.
To specify the enabled Git access protocols:
-1. Select the desired Git access protocols from the dropdown:
+1. Sign in to GitLab as a user with [Administrator role](../../permissions.md).
+1. On the top bar, select **Menu >** **{admin}** **Admin**.
+1. In the left sidebar, select **Settings > General**.
+1. Expand the **Visibility and access controls** section.
+1. Select the desired Git access protocols:
- Both SSH and HTTP(S)
- Only SSH
- Only HTTP(S)
-1. Click **Save changes**.
+1. Select **Save changes**.
When both SSH and HTTP(S) are enabled, users can choose either protocol.
-
-When only one protocol is enabled:
+If only one protocol is enabled:
- The project page shows only the allowed protocol's URL, with no option to
change it.
-- A tooltip is shown when you hover over the URL's protocol, if an action
- on the user's part is required. For example, adding an SSH key or setting a password.
+- GitLab shows a tooltip when you hover over the URL's protocol, if user action
+ (such as adding a SSH key or setting a password) is required:
-![Project URL with SSH only access](img/restricted_url.png)
+ ![Project URL with SSH only access](img/restricted_url.png)
-On top of these UI restrictions, GitLab denies all Git actions on the protocol
-not selected.
+GitLab only allows Git actions for the protocols you select.
WARNING:
GitLab versions [10.7 and later](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/18021),
allow the HTTP(S) protocol for Git clone or fetch requests done by GitLab Runner
-from CI/CD jobs, even if **Only SSH** was selected.
+from CI/CD jobs, even if you select **Only SSH**.
-## Custom Git clone URL for HTTP(S)
+## Customize Git clone URL for HTTP(S)
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/18422) in GitLab 12.4.
You can customize project Git clone URLs for HTTP(S), which affects the clone
panel:
-![Clone panel](img/clone_panel_v12_4.png)
-
For example, if:
- Your GitLab instance is at `https://example.com`, then project clone URLs are like
@@ -219,7 +281,7 @@ NOTE:
SSH clone URLs can be customized in `gitlab.rb` by setting `gitlab_rails['gitlab_ssh_host']` and
other related settings.
-## RSA, DSA, ECDSA, ED25519 SSH keys
+## Configure defaults for RSA, DSA, ECDSA, ED25519 SSH keys
These options specify the permitted types and lengths for SSH keys.
@@ -230,7 +292,7 @@ To specify a restriction for each key type:
For more details, see [SSH key restrictions](../../../security/ssh_keys_restrictions.md).
-## Allow mirrors to be set up for projects
+## Enable project mirroring
This option is enabled by default. By disabling it, both
[pull and push mirroring](../../project/repository/repository_mirroring.md) no longer
diff --git a/doc/user/analytics/index.md b/doc/user/analytics/index.md
index 8c67163c4b0..7cb5db4379a 100644
--- a/doc/user/analytics/index.md
+++ b/doc/user/analytics/index.md
@@ -11,25 +11,26 @@ info: To determine the technical writer assigned to the Stage/Group associated w
When we describe GitLab analytics, we use the following terms:
- **Cycle time:** The duration of only the execution work alone. Often displayed in combination with "lead time," which is longer. GitLab measures cycle time from issue first merge request creation to issue close. This approach underestimates lead time because merge request creation is always later than commit time. GitLab displays cycle time in [group-level Value Stream Analytics](../group/value_stream_analytics/index.md).
-- **Deploys:** The total number of successful deployments to production in the given time frame (across all applicable projects). GitLab displays deploys in [group-level Value Stream Analytics](../group/value_stream_analytics/index.md).
+- **Deploys:** The total number of successful deployments to production in the given time frame (across all applicable projects). GitLab displays deploys in [group-level Value Stream Analytics](../group/value_stream_analytics/index.md) and [project-level Value Stream Analytics](value_stream_analytics.md).
- **DORA (DevOps Research and Assessment)** ["Four Keys"](https://cloud.google.com/blog/products/devops-sre/using-the-four-keys-to-measure-your-devops-performance):
- **Speed/Velocity**
- - **Deployment frequency:** The average number of successful deployments to production per period.
+ - **Deployment frequency:** The relative frequency of successful deployments to production
+ (hourly, daily, weekly, monthly, or yearly).
This effectively measures how often you are delivering value to end users. A higher deployment
frequency means you are able to get feedback and iterate more quickly in delivering
improvements and features faster. GitLab measures this as the number of deployments to a
[production environment](../../ci/environments/index.md#deployment-tier-of-environments) in
the given time period.
- GitLab displays deployment frequency in [group-level Value Stream Analytics](../group/value_stream_analytics/index.md).
+ GitLab displays deployment frequency in [group-level Value Stream Analytics](../group/value_stream_analytics/index.md) and [project-level Value Stream Analytics](value_stream_analytics.md).
- **Lead Time for Changes:** The time it takes for a commit to get into production. (1) GitLab
measures this as the median duration between merge request merge and deployment to a
[production environment](../../ci/environments/index.md#deployment-tier-of-environments) for
all MRs deployed in the given time period. This measure under-estimates lead time because
merge time is always later than commit time. The
- [standard definition](https://github.com/GoogleCloudPlatform/fourkeys/blob/main/METRICS.md#lead-time-for-changes) uses median commit time. We plan to start
- [measuring from "issue first commit"](https://gitlab.com/gitlab-org/gitlab/-/issues/328459)
- as a better proxy, although still imperfect.
+ [standard definition](https://github.com/GoogleCloudPlatform/fourkeys/blob/main/METRICS.md#lead-time-for-changes) uses median commit time.
+ [An issue exists](https://gitlab.com/gitlab-org/gitlab/-/issues/328459) to start
+ measuring from "issue first commit" as a better proxy, although still imperfect.
- **Stability**
- **Change Failure Rate:** The percentage of deployments causing a failure in production.
diff --git a/doc/user/analytics/value_stream_analytics.md b/doc/user/analytics/value_stream_analytics.md
index 4ad3a03a5b0..9a1aed9c39f 100644
--- a/doc/user/analytics/value_stream_analytics.md
+++ b/doc/user/analytics/value_stream_analytics.md
@@ -124,9 +124,9 @@ From the previous example we see the time used for each stage:
- **Issue**: 2 hrs (09:00 to 11:00)
- **Plan**: 1 hr (11:00 to 12:00)
- **Code**: 2 hrs (12:00 to 14:00)
-- **Test**: 5 mins
+- **Test**: 5 minutes
- **Review**: 5 hrs (14:00 to 19:00)
-- **Staging**: 30 mins (19:00 to 19:30)
+- **Staging**: 30 minutes (19:00 to 19:30)
More information:
diff --git a/doc/user/application_security/api_fuzzing/img/api_fuzzing_configuration_snippet_v13.10.png b/doc/user/application_security/api_fuzzing/img/api_fuzzing_configuration_snippet_v13.10.png
deleted file mode 100644
index 80c550a3ae7..00000000000
--- a/doc/user/application_security/api_fuzzing/img/api_fuzzing_configuration_snippet_v13.10.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/application_security/api_fuzzing/index.md b/doc/user/application_security/api_fuzzing/index.md
index e35415003c7..7ed36572be4 100644
--- a/doc/user/application_security/api_fuzzing/index.md
+++ b/doc/user/application_security/api_fuzzing/index.md
@@ -38,7 +38,7 @@ or other scanners) during a scan could cause inaccurate results.
You can run a Web API fuzzing scan using the following methods:
-- [OpenAPI Specification](#openapi-specification) - version 2.0 or 3.0
+- [OpenAPI Specification](#openapi-specification) - version 2, and 3.
- [HTTP Archive](#http-archive-har) (HAR)
- [Postman Collection](#postman-collection) - version 2.0 or 2.1
@@ -112,6 +112,8 @@ To generate an API Fuzzing configuration snippet:
### OpenAPI Specification
+> Support for OpenAPI Specification v3.1 was
+> [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/327268) in GitLab 14.2.
> Support for OpenAPI Specification using YAML format was
> [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/330583) in GitLab 14.0.
> Support for OpenAPI Specification v3.0 was
diff --git a/doc/user/application_security/configuration/index.md b/doc/user/application_security/configuration/index.md
index 3cc88a40b6f..664fcd9b72f 100644
--- a/doc/user/application_security/configuration/index.md
+++ b/doc/user/application_security/configuration/index.md
@@ -11,9 +11,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
> - SAST configuration was [enabled](https://gitlab.com/groups/gitlab-org/-/epics/3659) in 13.3 and [improved](https://gitlab.com/gitlab-org/gitlab/-/issues/232862) in 13.4. **(ULTIMATE)**
> - DAST Profiles feature was [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/40474) in 13.4. **(ULTIMATE)**
> - A simplified version was made [available in all tiers](https://gitlab.com/gitlab-org/gitlab/-/issues/294076) in GitLab 13.10.
-
-WARNING:
-This feature might not be available to you. Check the **version history** note above for details.
+> - [Redesigned](https://gitlab.com/gitlab-org/gitlab/-/issues/326926) in 14.2.
The Security Configuration page displays what security scans are available, links to documentation and also simple enablement tools for the current project.
@@ -22,35 +20,37 @@ then in the left sidebar go to **Security & Compliance > Configuration**.
For each security control the page displays:
-- **Security Control:** Name, description, and a documentation link.
-- **Manage:** A management option or a documentation link.
-
-## UI redesign
-
-> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/326926) in 14.0 for GitLab Free and Premium, behind a feature flag, disabled by default.
-> - Enabled on GitLab.com for Free & Premium.
-> - Recommended for production use.
-> - It can be enabled or disabled for a single project.
-> - To use in GitLab self-managed instances, ask a GitLab administrator to [enable it](#enable-or-disable-ui-redesign). **(FREE SELF)**
-> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/333109) in 14.1 for GitLab Ultimate, behind a feature flag, disabled by default.
-> - Disabled on GitLab.com.
-> - Not recommended for production use.
-> - It can be enabled or disabled for a single project.
-> - To use in GitLab self-managed instances, ask a GitLab administrator to [enable it](#enable-or-disable-ui-redesign-for-ultimate). **(ULTIMATE SELF)**
+- Its name, description and a documentation link.
+- Whether or not it is available.
+- A configuration button or a link to its configuration guide.
-WARNING:
-This feature might not be available to you. Check the **version history** note above for details.
+## Security testing
-The Security Configuration page has been redesigned in GitLab Free and Premium.
-The same functionality exists as before, but presented in a more extensible
-way.
+You can configure the following security controls:
-For each security control the page displays:
+- Auto DevOps
+ - Click **Enable Auto DevOps** on the alert to enable it for the current project. For more details, see [Auto DevOps](../../../topics/autodevops/index.md).
+- SAST
+ - Click **Enable SAST** to use SAST for the current project. For more details, see [Configure SAST in the UI](../sast/index.md#configure-sast-in-the-ui).
+- DAST **(ULTIMATE)**
+ - Click **Enable DAST** to use DAST for the current Project. To manage the available DAST profiles used for on-demand scans Click **Manage Scans**. For more details, see [DAST on-demand scans](../dast/index.md#on-demand-scans).
+- Dependency Scanning **(ULTIMATE)**
+ - Select **Configure via Merge Request** to create a merge request with the changes required to
+ enable Dependency Scanning. For more details, see [Enable Dependency Scanning via an automatic merge request](../dependency_scanning/index.md#enable-dependency-scanning-via-an-automatic-merge-request).
-- Its name, description and a documentation link.
-- Whether or not it is available.
-- A configuration button or a link to its configuration guide.
+- Container Scanning **(ULTIMATE)**
+ - Can be configured via `.gitlab-ci.yml`. For more details, see [Container Scanning](../../../user/application_security/container_scanning/index.md#configuration).
+- Cluster Image Scanning **(ULTIMATE)**
+ - Can be configured via `.gitlab-ci.yml`. For more details, see [Cluster Image Scanning](../../../user/application_security/cluster_image_scanning/#configuration).
+- Secret Detection
+ - Select **Configure via Merge Request** to create a merge request with the changes required to
+ enable Secret Detection. For more details, see [Enable Secret Detection via an automatic merge request](../secret_detection/index.md#enable-secret-detection-via-an-automatic-merge-request).
+- API Fuzzing **(ULTIMATE)**
+ - Click **Enable API Fuzzing** to use API Fuzzing for the current Project. For more details, see [API Fuzzing](../../../user/application_security/api_fuzzing/index.md#enable-web-api-fuzzing).
+- Coverage Fuzzing **(ULTIMATE)**
+ - Can be configured via `.gitlab-ci.yml`. For more details, see [Coverage Fuzzing](../../../user/application_security/coverage_fuzzing/index.md#configuration).
+
## Status **(ULTIMATE)**
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/20711) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 12.6.
@@ -63,71 +63,11 @@ _enabled_.
If the latest pipeline used [Auto DevOps](../../../topics/autodevops/index.md),
all security features are configured by default.
-For SAST, click **View history** to see the `.gitlab-ci.yml` file's history.
+Click **View history** to see the `.gitlab-ci.yml` file's history.
-## Manage **(ULTIMATE)**
+## Compliance **(ULTIMATE)**
You can configure the following security controls:
-- Auto DevOps
- - Click **Enable Auto DevOps** to enable it for the current project. For more details, see [Auto DevOps](../../../topics/autodevops/index.md).
-- SAST
- - Click either **Enable** or **Configure** to use SAST for the current project. For more details, see [Configure SAST in the UI](../sast/index.md#configure-sast-in-the-ui).
-- DAST Profiles
- - Click **Manage** to manage the available DAST profiles used for on-demand scans. For more details, see [DAST on-demand scans](../dast/index.md#on-demand-scans).
-- Secret Detection
- - Select **Configure via Merge Request** to create a merge request with the changes required to
- enable Secret Detection. For more details, see [Enable Secret Detection via an automatic merge request](../secret_detection/index.md#enable-secret-detection-via-an-automatic-merge-request).
-- Dependency Scanning
- - Select **Configure via Merge Request** to create a merge request with the changes required to
- enable Dependency Scanning. For more details, see [Enable Dependency Scanning via an automatic merge request](../dependency_scanning/index.md#enable-dependency-scanning-via-an-automatic-merge-request).
-
-## Enable or disable UI redesign **(FREE SELF)**
-
-The Security Configuration redesign is under development, but is ready for
-production use. It is deployed behind a feature flag that is **disabled by
-default**.
-[GitLab administrators with access to the GitLab Rails console](../../../administration/feature_flags.md) can enable it.
-
-To enable it:
-
-```ruby
-# For the instance
-Feature.enable(:security_configuration_redesign)
-# For a single project
-Feature.enable(:security_configuration_redesign, Project.find(<project id>))
-```
-
-To disable it:
-
-```ruby
-# For the instance
-Feature.disable(:security_configuration_redesign)
-# For a single project
-Feature.disable(:security_configuration_redesign, Project.find(<project id>))
-```
-
-## Enable or disable UI redesign for Ultimate **(ULTIMATE SELF)**
-
-The Security Configuration redesign is under development, and is not ready for
-production use. It is deployed behind a feature flag that is **disabled by
-default**.
-[GitLab administrators with access to the GitLab Rails console](../../../administration/feature_flags.md) can enable it.
-
-To enable it:
-
-```ruby
-# For the instance
-Feature.enable(:security_configuration_redesign_ee)
-# For a single project
-Feature.enable(:security_configuration_redesign_ee, Project.find(<project id>))
-```
-
-To disable it:
-
-```ruby
-# For the instance
-Feature.disable(:security_configuration_redesign_ee)
-# For a single project
-Feature.disable(:security_configuration_redesign_ee, Project.find(<project id>))
-```
+- License Compliance **(ULTIMATE)**
+ - Can be configured via `.gitlab-ci.yml`. For more details, see [License Compliance](../../../user/compliance/license_compliance/index.md#configuration).
diff --git a/doc/user/application_security/container_scanning/index.md b/doc/user/application_security/container_scanning/index.md
index 90e1e4b025c..5791351a067 100644
--- a/doc/user/application_security/container_scanning/index.md
+++ b/doc/user/application_security/container_scanning/index.md
@@ -160,8 +160,8 @@ You can [configure](#customizing-the-container-scanning-settings) analyzers by u
| `CS_REGISTRY_INSECURE` | `"false"` | Allow access to insecure registries (HTTP only). Should only be set to `true` when testing the image locally. | Trivy. The registry must listen on port `80/tcp`. |
| `CS_SEVERITY_THRESHOLD` | `UNKNOWN` | Severity level threshold. The scanner outputs vulnerabilities with severity level higher than or equal to this threshold. Supported levels are Unknown, Low, Medium, High, and Critical. | Trivy |
| `DOCKER_IMAGE` | `$CI_APPLICATION_REPOSITORY:$CI_APPLICATION_TAG` | The Docker image to be scanned. If set, this variable overrides the `$CI_APPLICATION_REPOSITORY` and `$CI_APPLICATION_TAG` variables. | All |
-| `DOCKER_PASSWORD` | `$CI_REGISTRY_PASSWORD` | Password for accessing a Docker registry requiring authentication. | All |
-| `DOCKER_USER` | `$CI_REGISTRY_USER` | Username for accessing a Docker registry requiring authentication. | All |
+| `DOCKER_PASSWORD` | `$CI_REGISTRY_PASSWORD` | Password for accessing a Docker registry requiring authentication. The default is only set if `$DOCKER_IMAGE` resides at [`$CI_REGISTRY`](../../../ci/variables/predefined_variables.md). | All |
+| `DOCKER_USER` | `$CI_REGISTRY_USER` | Username for accessing a Docker registry requiring authentication. The default is only set if `$DOCKER_IMAGE` resides at [`$CI_REGISTRY`](../../../ci/variables/predefined_variables.md). | All |
| `DOCKERFILE_PATH` | `Dockerfile` | The path to the `Dockerfile` to use for generating remediations. By default, the scanner looks for a file named `Dockerfile` in the root directory of the project. You should configure this variable only if your `Dockerfile` is in a non-standard location, such as a subdirectory. See [Solutions for vulnerabilities](#solutions-for-vulnerabilities-auto-remediation) for more details. | All |
| `SECURE_LOG_LEVEL` | `info` | Set the minimum logging level. Messages of this logging level or higher are output. From highest to lowest severity, the logging levels are: `fatal`, `error`, `warn`, `info`, `debug`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/10880) in GitLab 13.1. | All |
@@ -170,7 +170,7 @@ You can [configure](#customizing-the-container-scanning-settings) analyzers by u
Support depends on the scanner:
- [Grype](https://github.com/anchore/grype#grype)
-- [Trivy](https://aquasecurity.github.io/trivy/latest/vuln-detection/os/) (Default).
+- [Trivy](https://aquasecurity.github.io/trivy/latest/vulnerability/detection/os/) (Default).
#### UBI-based images
diff --git a/doc/user/application_security/cve_id_request.md b/doc/user/application_security/cve_id_request.md
index aaf701c91dc..1489b250e4b 100644
--- a/doc/user/application_security/cve_id_request.md
+++ b/doc/user/application_security/cve_id_request.md
@@ -1,11 +1,11 @@
---
type: tutorial
stage: Secure
-group: Vulnerability Research
+group: Threat Insights
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
-# CVE ID Requests **(ULTIMATE SAAS)**
+# CVE ID Requests **(FREE SAAS)**
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/41203) in GitLab 13.4, only for public projects on GitLab.com.
@@ -28,7 +28,7 @@ If the following conditions are met, a **Request CVE ID** button appears in your
- The project is hosted in GitLab.com.
- The project is public.
- You are a maintainer of the project.
-- The issue is confidential.
+- The issue is [confidential](../project/issues/confidential_issues.md).
## Submitting a CVE ID Request
@@ -37,7 +37,7 @@ the [GitLab CVE project](https://gitlab.com/gitlab-org/cves).
![CVE ID request button](img/cve_id_request_button.png)
-Creating the confidential issue starts the CVE request process.
+Creating the [confidential issue](../project/issues/confidential_issues.md) starts the CVE request process.
![New CVE ID request issue](img/new_cve_request_issue.png)
diff --git a/doc/user/application_security/dast/browser_based.md b/doc/user/application_security/dast/browser_based.md
index 1288db21880..e8fbc17327c 100644
--- a/doc/user/application_security/dast/browser_based.md
+++ b/doc/user/application_security/dast/browser_based.md
@@ -48,18 +48,26 @@ dast:
The browser-based crawler can be configured using CI/CD variables.
-| CI/CD variable | Type | Example | Description |
-|--------------------------------------| ----------------| --------------------------------- | ------------|
-| `DAST_WEBSITE` | URL | `http://www.site.com` | The URL of the website to scan. |
-| `DAST_BROWSER_SCAN` | boolean | `true` | Configures DAST to use the browser-based crawler engine. |
-| `DAST_BROWSER_ALLOWED_HOSTS` | List of strings | `site.com,another.com` | Hostnames included in this variable are considered in scope when crawled. By default the `DAST_WEBSITE` hostname is included in the allowed hosts list. |
-| `DAST_BROWSER_EXCLUDED_HOSTS` | List of strings | `site.com,another.com` | Hostnames included in this variable are considered excluded and connections are forcibly dropped. |
-| `DAST_BROWSER_IGNORED_HOSTS` | List of strings | `site.com,another.com` | Hostnames included in this variable are accessed but not reported against. |
-| `DAST_BROWSER_MAX_ACTIONS` | number | `10000` | The maximum number of actions that the crawler performs. For example, clicking a link, or filling a form. |
-| `DAST_BROWSER_MAX_DEPTH` | number | `10` | The maximum number of chained actions that the crawler takes. For example, `Click -> Form Fill -> Click` is a depth of three. |
-| `DAST_BROWSER_NUMBER_OF_BROWSERS` | number | `3` | The maximum number of concurrent browser instances to use. For shared runners on GitLab.com we recommended a maximum of three. Private runners with more resources may benefit from a higher number, but will likely produce little benefit after five to seven instances. |
-| `DAST_BROWSER_COOKIES` | dictionary | `abtesting_group:3,region:locked` | A cookie name and value to be added to every request. |
-| `DAST_BROWSER_LOG` | List of strings | `brows:debug,auth:debug` | A list of modules and their intended log level. |
+| CI/CD variable | Type | Example | Description |
+|----------------------------------------------| ----------------| --------------------------------- | ------------|
+| `DAST_WEBSITE` | URL | `http://www.site.com` | The URL of the website to scan. |
+| `DAST_BROWSER_SCAN` | boolean | `true` | Configures DAST to use the browser-based crawler engine. |
+| `DAST_BROWSER_ALLOWED_HOSTS` | List of strings | `site.com,another.com` | Hostnames included in this variable are considered in scope when crawled. By default the `DAST_WEBSITE` hostname is included in the allowed hosts list. |
+| `DAST_BROWSER_EXCLUDED_HOSTS` | List of strings | `site.com,another.com` | Hostnames included in this variable are considered excluded and connections are forcibly dropped. |
+| `DAST_BROWSER_IGNORED_HOSTS` | List of strings | `site.com,another.com` | Hostnames included in this variable are accessed but not reported against. |
+| `DAST_BROWSER_MAX_ACTIONS` | number | `10000` | The maximum number of actions that the crawler performs. For example, clicking a link, or filling a form. |
+| `DAST_BROWSER_MAX_DEPTH` | number | `10` | The maximum number of chained actions that the crawler takes. For example, `Click -> Form Fill -> Click` is a depth of three. |
+| `DAST_BROWSER_NUMBER_OF_BROWSERS` | number | `3` | The maximum number of concurrent browser instances to use. For shared runners on GitLab.com we recommended a maximum of three. Private runners with more resources may benefit from a higher number, but will likely produce little benefit after five to seven instances. |
+| `DAST_BROWSER_COOKIES` | dictionary | `abtesting_group:3,region:locked` | A cookie name and value to be added to every request. |
+| `DAST_BROWSER_LOG` | List of strings | `brows:debug,auth:debug` | A list of modules and their intended log level. |
+| `DAST_BROWSER_NAVIGATION_TIMEOUT` | [Duration string](https://golang.org/pkg/time/#ParseDuration) | `15s` | The maximum amount of time to wait for a browser to navigate from one page to another |
+| `DAST_BROWSER_ACTION_TIMEOUT` | [Duration string](https://golang.org/pkg/time/#ParseDuration) | `7s` | The maximum amount of time to wait for a browser to complete an action |
+| `DAST_BROWSER_STABILITY_TIMEOUT` | [Duration string](https://golang.org/pkg/time/#ParseDuration) | `7s` | The maximum amount of time to wait for a browser to consider a page loaded and ready for analysis |
+| `DAST_BROWSER_NAVIGATION_STABILITY_TIMEOUT` | [Duration string](https://golang.org/pkg/time/#ParseDuration) | `7s` | The maximum amount of time to wait for a browser to consider a page loaded and ready for analysis after a navigation completes |
+| `DAST_BROWSER_ACTION_STABILITY_TIMEOUT` | [Duration string](https://golang.org/pkg/time/#ParseDuration) | `800ms` | The maximum amount of time to wait for a browser to consider a page loaded and ready for analysis after completing an action |
+| `DAST_BROWSER_SEARCH_ELEMENT_TIMEOUT` | [Duration string](https://golang.org/pkg/time/#ParseDuration) | `3s` | The maximum amount of time to allow the browser to search for new elements or navigations |
+| `DAST_BROWSER_EXTRACT_ELEMENT_TIMEOUT` | [Duration string](https://golang.org/pkg/time/#ParseDuration) | `5s` | The maximum amount of time to allow the browser to extract newly found elements or navigations |
+| `DAST_BROWSER_ELEMENT_TIMEOUT` | [Duration string](https://golang.org/pkg/time/#ParseDuration) | `600ms` | The maximum amount of time to wait for an element before determining it is ready for analysis |
The [DAST variables](index.md#available-cicd-variables) `SECURE_ANALYZERS_PREFIX`, `DAST_FULL_SCAN_ENABLED`, `DAST_AUTO_UPDATE_ADDONS`, `DAST_EXCLUDE_RULES`, `DAST_REQUEST_HEADERS`, `DAST_HTML_REPORT`, `DAST_MARKDOWN_REPORT`, `DAST_XML_REPORT`,
`DAST_AUTH_URL`, `DAST_USERNAME`, `DAST_PASSWORD`, `DAST_USERNAME_FIELD`, `DAST_PASSWORD_FIELD`, `DAST_FIRST_SUBMIT_FIELD`, `DAST_SUBMIT_FIELD`, `DAST_EXCLUDE_URLS`, `DAST_AUTH_VERIFICATION_URL`, `DAST_BROWSER_AUTH_VERIFICATION_SELECTOR`, `DAST_BROWSER_AUTH_VERIFICATION_LOGIN_FORM`, `DAST_BROWSER_AUTH_REPORT`,
@@ -86,6 +94,46 @@ You can manage the trade-off between coverage and scan time with the following m
- Limit the page depth that the browser-based crawler will check coverage on with the [variable](#available-cicd-variables) `DAST_BROWSER_MAX_DEPTH`. The crawler uses a breadth-first search strategy, so pages with smaller depth are crawled first. The default is `10`.
- Vertically scaling the runner and using a higher number of browsers with [variable](#available-cicd-variables) `DAST_BROWSER_NUMBER_OF_BROWSERS`. The default is `3`.
+## Timeouts
+
+Due to poor network conditions or heavy application load, the default timeouts may not be applicable to your application.
+
+Browser-based scans offer the ability to adjust various timeouts to ensure it continues smoothly as it transitions from one page to the next. These values are configured using a [Duration string](https://golang.org/pkg/time/#ParseDuration) which allow you to configure durations with a prefix: `m` for minutes, `s` for seconds, and `ms` for milliseconds.
+
+Navigations, or the act of loading a new page, usually require the most amount of time as they are
+loading multiple new resources such as JavaScript or CSS files. Depending on the size of these resources, or the speed at which they are returned, the default `DAST_BROWSER_NAVIGATION_TIMEOUT` may not be sufficient.
+
+Stability timeouts, such as those configurable with `DAST_BROWSER_NAVIGATION_STABILITY_TIMEOUT`, `DAST_BROWSER_STABILITY_TIMEOUT`, and `DAST_BROWSER_ACTION_STABILITY_TIMEOUT` can also be configured. Stability timeouts determine when browser-based scans consider
+a page fully loaded. Browser-based scans consider a page loaded when:
+
+1. The [DOMContentLoaded](https://developer.mozilla.org/en-US/docs/Web/API/Window/DOMContentLoaded_event) event has fired.
+1. There are no open or outstanding requests that are deemed important, such as JavaScript and CSS. Media files are usually deemed unimportant.
+1. Depending on whether the browser executed a navigation, was forcibly transitioned, or action:
+
+ - There are no new Document Object Model (DOM) modification events after the `DAST_BROWSER_NAVIGATION_STABILITY_TIMEOUT`, `DAST_BROWSER_STABILITY_TIMEOUT` or `DAST_BROWSER_ACTION_STABILITY_TIMEOUT` durations
+
+After these events have occurred, browser-based scans consider the page loaded and ready and attempt the next action.
+
+If your application experiences latency or returns many navigation failures, consider adjusting the timeout values such in this example:
+
+```yaml
+include:
+ - template: DAST.gitlab-ci.yml
+
+dast:
+ variables:
+ DAST_WEBSITE: "https://my.site.com"
+ DAST_BROWSER_NAVIGATION_TIMEOUT: "25s"
+ DAST_BROWSER_ACTION_TIMEOUT: "10s"
+ DAST_BROWSER_STABILITY_TIMEOUT: "15s"
+ DAST_BROWSER_NAVIGATION_STABILITY_TIMEOUT: "15s"
+ DAST_BROWSER_ACTION_TIMEOUT: "10s"
+ DAST_BROWSER_ACTION_STABILITY_TIMEOUT: "3s"
+```
+
+NOTE:
+Adjusting these values may impact scan time as they adjust how long each browser waits for various activities to complete.
+
## Debugging scans using logging
Logging can be used to help you troubleshoot a scan.
diff --git a/doc/user/application_security/dast/dast_troubleshooting.md b/doc/user/application_security/dast/dast_troubleshooting.md
index 48b48392e65..725fab85789 100644
--- a/doc/user/application_security/dast/dast_troubleshooting.md
+++ b/doc/user/application_security/dast/dast_troubleshooting.md
@@ -11,6 +11,32 @@ The following troubleshooting scenarios have been collected from customer suppor
experience a problem not addressed here, or the information here does not fix your problem, create a
support ticket. For more details, see the [GitLab Support](https://about.gitlab.com/support/) page.
+## Debugging DAST jobs
+
+A DAST job has two executing processes:
+
+- The ZAP server.
+- A series of scripts that start, control and stop the ZAP server.
+
+Enable the `DAST_DEBUG` CI/CD variable to debug scripts. This can help when troubleshooting the job,
+and outputs statements indicating what percentage of the scan is complete.
+For details on using variables, see [Overriding the DAST template](index.md#customizing-the-dast-settings).
+
+Debug mode of the ZAP server can be enabled using the `DAST_ZAP_LOG_CONFIGURATION` variable.
+The following table outlines examples of values that can be set and the effect that they have on the output that is logged.
+Multiple values can be specified, separated by semicolons.
+
+For example, `log4j.logger.org.parosproxy.paros.network.HttpSender=DEBUG;log4j.logger.com.crawljax=DEBUG`.
+
+| Log configuration value | Effect |
+|-------------------------------------------------- | ----------------------------------------------------------------- |
+| `log4j.rootLogger=DEBUG` | Enable all debug logging statements. |
+| `log4j.logger.org.apache.commons.httpclient=DEBUG` | Log every HTTP request and response made by the ZAP server. |
+| `log4j.logger.org.zaproxy.zap.spider.SpiderController=DEBUG` | Log URLs found during the spider scan of the target. |
+| `log4j.logger.com.crawljax=DEBUG` | Enable Ajax Crawler debug logging statements. |
+| `log4j.logger.org.parosproxy.paros=DEBUG` | Enable ZAP server proxy debug logging statements. |
+| `log4j.logger.org.zaproxy.zap=DEBUG` | Enable debug logging statements of the general ZAP server code. |
+
## Running out of memory
By default, ZAProxy, which DAST relies on, is allocated memory that sums to 25%
diff --git a/doc/user/application_security/dast/index.md b/doc/user/application_security/dast/index.md
index 4b10f03fec3..7455915761c 100644
--- a/doc/user/application_security/dast/index.md
+++ b/doc/user/application_security/dast/index.md
@@ -121,6 +121,34 @@ services: # use services to link the container to the dast job
alias: yourapp
```
+### DAST job order
+
+When using the `DAST.gitlab-ci.yml` template, the `dast` stage is run last as shown in
+the example below. To ensure DAST scans the latest code, deploy your application
+in a stage before the `dast` stage.
+
+```yaml
+ stages:
+ - build
+ - test
+ - deploy
+ - dast
+```
+
+Take care if your pipeline is configured to deploy to the same web server in each run. Running a
+pipeline while another is still running could result in one pipeline overwriting the code from
+another pipeline. The site to be scanned should be excluded from changes for the duration of a DAST
+scan. The only changes to the site should be from the DAST scanner.
+
+Changes to the site during a scan from any of the following could lead to inaccurate results:
+
+- Users.
+- Scheduled tasks.
+- Database changes.
+- Code changes.
+- Other pipelines.
+- Other scanners.
+
## DAST run options
You can use DAST to examine your web application:
@@ -147,28 +175,6 @@ To enable DAST to run automatically, either:
`.gitlab-ci.yml` file.
- [Configure DAST using the UI](#configure-dast-using-the-ui).
-### DAST job order
-
-When using the `DAST.gitlab-ci.yml` template, the `dast` stage is run last as shown in
-the example below. To ensure DAST scans the latest code, deploy your application
-in a stage before the `dast` stage.
-
-```yaml
- stages:
- - build
- - test
- - deploy
- - dast
-```
-
-Be aware that if your pipeline is configured to deploy to the same webserver in
-each run, running a pipeline while another is still running could cause a race condition
-where one pipeline overwrites the code from another pipeline. The site to be scanned
-should be excluded from changes for the duration of a DAST scan.
-The only changes to the site should be from the DAST scanner. Be aware that any
-changes that users, scheduled tasks, database changes, code changes, other pipelines, or other scanners make to
-the site during a scan could lead to inaccurate results.
-
#### Include the DAST template
> This template was [updated](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62597) to DAST_VERSION: 2 in GitLab 14.0.
@@ -298,7 +304,7 @@ For more details, including setup instructions, see [DAST browser-based crawler]
### Full scan
-DAST can be configured to perform [ZAP Full Scan](https://github.com/zaproxy/zaproxy/wiki/ZAP-Full-Scan), which
+DAST can be configured to perform [ZAP Full Scan](https://www.zaproxy.org/docs/docker/full-scan/), which
includes both passive and active scanning against the same target website:
```yaml
@@ -583,30 +589,6 @@ by the application as correctly authenticated.
Authentication supports single form logins, multi-step login forms, and authenticating to URLs outside of the configured target URL.
-Variables that are related to authenticated scans are:
-
-```yaml
-include:
- - template: DAST.gitlab-ci.yml
-
-dast:
- variables:
- DAST_WEBSITE: "https://example.com"
- DAST_AUTH_URL: "https://login.example.com/"
- DAST_BROWSER_PATH_TO_LOGIN_FORM: "css:.navigation-menu,css:.login-menu-item" # optional list of selectors that should be clicked on prior to attempting to input username/password into the sign-in HTML form
- DAST_USERNAME: "admin"
- DAST_PASSWORD: "P@55w0rd!"
- DAST_USERNAME_FIELD: "name:username" # a selector describing the element containing the username field at the sign-in HTML form
- DAST_PASSWORD_FIELD: "id:password" # a selector describing the element containing the password field at the sign-in HTML form
- DAST_FIRST_SUBMIT_FIELD: "css:button[type='user-submit']" # optional, the selector of the element that when clicked will submit the username form of a multi-page login process
- DAST_SUBMIT_FIELD: "css:button[type='submit']" # the selector of the element that when clicked will submit the login form or the password form of a multi-page login process
- DAST_EXCLUDE_URLS: "http://example.com/sign-out" # optional, URLs to skip during the authenticated scan; comma-separated, no spaces in between
- DAST_AUTH_VERIFICATION_URL: "http://example.com/loggedin_page" # optional, used to verify authentication is successful by expecting this URL once the login form has been submitted
- DAST_AUTH_VERIFICATION_SELECTOR: "css:.user-profile" # optional, used to verify authentication is successful by expecting a selector to be present on the page once the login form has been submitted
- DAST_AUTH_VERIFICATION_LOGIN_FORM: "true" # optional, used to verify authentication is successful by ensuring there are no login forms on the page once the login form has been submitted
- DAST_AUTH_REPORT: "true" # optionally output an authentication debug report
-```
-
WARNING:
**NEVER** run an authenticated scan against a production server. When an authenticated
scan is run, it may perform *any* function that the authenticated user can. This
@@ -762,55 +744,56 @@ dast:
### Available CI/CD variables
-You can use CI/CD variables to customize DAST.
-
-| CI/CD variable | Type | Description |
-|:------------------------------------------------|:--------------|:-------------------------------|
-| `SECURE_ANALYZERS_PREFIX` | URL | Set the Docker registry base address from which to download the analyzer. |
-| `DAST_WEBSITE` <sup>1</sup> | URL | The URL of the website to scan. `DAST_API_OPENAPI` must be specified if this is omitted. |
-| `DAST_API_OPENAPI` | URL or string | The API specification to import. The specification can be hosted at a URL, or the name of a file present in the `/zap/wrk` directory. `DAST_WEBSITE` must be specified if this is omitted. |
-| `DAST_API_SPECIFICATION` <sup>1</sup> | URL or string | [Deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/290241) in GitLab 13.12 and replaced by `DAST_API_OPENAPI`. To be removed in GitLab 15.0. The API specification to import. The specification can be hosted at a URL, or the name of a file present in the `/zap/wrk` directory. `DAST_WEBSITE` must be specified if this is omitted. |
-| `DAST_SPIDER_START_AT_HOST` | boolean | Set to `false` to prevent DAST from resetting the target to its host before scanning. When `true`, non-host targets `http://test.site/some_path` is reset to `http://test.site` before scan. Default: `true`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/258805) in GitLab 13.6. |
-| `DAST_AUTH_URL` <sup>1</sup> | URL | The URL of the page containing the sign-in HTML form on the target website. `DAST_USERNAME` and `DAST_PASSWORD` are submitted with the login form to create an authenticated scan. Not supported for API scans. |
-| `DAST_BROWSER_PATH_TO_LOGIN_FORM` <sup>1</sup> | selector | Comma-separated list of selectors that will be clicked on prior to attempting to enter `DAST_USERNAME` and `DAST_PASSWORD` into the login form. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/326633) in GitLab 14.1. |
-| `DAST_USERNAME` <sup>1</sup> | string | The username to authenticate to in the website. |
-| `DAST_PASSWORD` <sup>1</sup> | string | The password to authenticate to in the website. |
-| `DAST_USERNAME_FIELD` <sup>1</sup> | string | The name of username field at the sign-in HTML form. |
-| `DAST_PASSWORD_FIELD` <sup>1</sup> | string | The name of password field at the sign-in HTML form. |
-| `DAST_SKIP_TARGET_CHECK` | boolean | Set to `true` to prevent DAST from checking that the target is available before scanning. Default: `false`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/229067) in GitLab 13.8. |
-| `DAST_MASK_HTTP_HEADERS` | string | Comma-separated list of request and response headers to be masked (GitLab 13.1). Must contain **all** headers to be masked. Refer to [list of headers that are masked by default](#hide-sensitive-information). |
-| `DAST_EXCLUDE_URLS` <sup>1</sup> | URLs | The URLs to skip during the authenticated scan; comma-separated. Regular expression syntax can be used to match multiple URLs. For example, `.*` matches an arbitrary character sequence. Not supported for API scans. |
-| `DAST_FULL_SCAN_ENABLED` <sup>1</sup> | boolean | Set to `true` to run a [ZAP Full Scan](https://github.com/zaproxy/zaproxy/wiki/ZAP-Full-Scan) instead of a [ZAP Baseline Scan](https://github.com/zaproxy/zaproxy/wiki/ZAP-Baseline-Scan). Default: `false` |
-| `DAST_FULL_SCAN_DOMAIN_VALIDATION_REQUIRED` | boolean | **{warning}** **[Removed](https://gitlab.com/gitlab-org/gitlab/-/issues/293595)** in GitLab 14.0. Set to `true` to require domain validation when running DAST full scans. Not supported for API scans. Default: `false` |
-| `DAST_AUTO_UPDATE_ADDONS` | boolean | ZAP add-ons are pinned to specific versions in the DAST Docker image. Set to `true` to download the latest versions when the scan starts. Default: `false` |
-| `DAST_API_HOST_OVERRIDE` <sup>1</sup> | string | Used to override domains defined in API specification files. Only supported when importing the API specification from a URL. Example: `example.com:8080` |
-| `DAST_EXCLUDE_RULES` | string | Set to a comma-separated list of Vulnerability Rule IDs to exclude them from running during the scan. Rule IDs are numbers and can be found from the DAST log or on the [ZAP project](https://www.zaproxy.org/docs/alerts/). For example, `HTTP Parameter Override` has a rule ID of `10026`. Cannot be used when `DAST_ONLY_INCLUDE_RULES` is set. **Note:** In earlier versions of GitLab the excluded rules were executed but vulnerabilities they generated were suppressed. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/118641) in GitLab 12.10. |
-| `DAST_ONLY_INCLUDE_RULES` | string | Set to a comma-separated list of Vulnerability Rule IDs to configure the scan to run only them. Rule IDs are numbers and can be found from the DAST log or on the [ZAP project](https://www.zaproxy.org/docs/alerts/). Cannot be used when `DAST_EXCLUDE_RULES` is set. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/250651) in GitLab 13.12. |
-| `DAST_REQUEST_HEADERS` <sup>1</sup> | string | Set to a comma-separated list of request header names and values. Headers are added to every request made by DAST. For example, `Cache-control: no-cache,User-Agent: DAST/1.0` |
-| `DAST_DEBUG` <sup>1</sup> | boolean | Enable debug message output. Default: `false`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/12652) in GitLab 13.1. |
-| `DAST_TARGET_AVAILABILITY_TIMEOUT` <sup>1</sup> | number | Time limit in seconds to wait for target availability. |
-| `DAST_SPIDER_MINS` <sup>1</sup> | number | The maximum duration of the spider scan in minutes. Set to `0` for unlimited. Default: One minute, or unlimited when the scan is a full scan. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/12652) in GitLab 13.1. |
-| `DAST_HTML_REPORT` | string | The filename of the HTML report written at the end of a scan. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/12652) in GitLab 13.1. |
-| `DAST_MARKDOWN_REPORT` | string | The filename of the Markdown report written at the end of a scan. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/12652) in GitLab 13.1. |
-| `DAST_XML_REPORT` | string | The filename of the XML report written at the end of a scan. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/12652) in GitLab 13.1. |
-| `DAST_INCLUDE_ALPHA_VULNERABILITIES` | boolean | Set to `true` to include alpha passive and active scan rules. Default: `false`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/12652) in GitLab 13.1. |
-| `DAST_USE_AJAX_SPIDER` <sup>1</sup> | boolean | Set to `true` to use the AJAX spider in addition to the traditional spider, useful for crawling sites that require JavaScript. Default: `false`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/12652) in GitLab 13.1. |
-| `DAST_PATHS` | string | Set to a comma-separated list of URLs for DAST to scan. For example, `/page1.html,/category1/page3.html,/page2.html`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/214120) in GitLab 13.4. |
-| `DAST_PATHS_FILE` | string | The file path containing the paths within `DAST_WEBSITE` to scan. The file must be plain text with one path per line. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/258825) in GitLab 13.6. |
-| `DAST_SUBMIT_FIELD` | string | The `id` or `name` of the element that when clicked submits the login form or the password form of a multi-page login process. [Introduced](https://gitlab.com/gitlab-org/gitlab-ee/issues/9894) in GitLab 12.4. |
-| `DAST_FIRST_SUBMIT_FIELD` | string | The `id` or `name` of the element that when clicked submits the username form of a multi-page login process. [Introduced](https://gitlab.com/gitlab-org/gitlab-ee/issues/9894) in GitLab 12.4. |
-| `DAST_ZAP_CLI_OPTIONS` | string | ZAP server command-line options. For example, `-Xmx3072m` would set the Java maximum memory allocation pool size. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/12652) in GitLab 13.1. |
-| `DAST_ZAP_LOG_CONFIGURATION` | string | Set to a semicolon-separated list of additional log4j properties for the ZAP Server. For example, `log4j.logger.org.parosproxy.paros.network.HttpSender=DEBUG;log4j.logger.com.crawljax=DEBUG` |
-| `DAST_AUTH_EXCLUDE_URLS` | URLs | **{warning}** **[Removed](https://gitlab.com/gitlab-org/gitlab/-/issues/289959)** in GitLab 14.0. Replaced by `DAST_EXCLUDE_URLS`. The URLs to skip during the authenticated scan; comma-separated. Regular expression syntax can be used to match multiple URLs. For example, `.*` matches an arbitrary character sequence. Not supported for API scans. |
-| `DAST_AGGREGATE_VULNERABILITIES` | boolean | Vulnerability aggregation is set to `true` by default. To disable this feature and see each vulnerability individually set to `false`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/254043) in GitLab 14.0. |
-| `DAST_MAX_URLS_PER_VULNERABILITY` | number | The maximum number of URLs reported for a single vulnerability. `DAST_MAX_URLS_PER_VULNERABILITY` is set to `50` by default. To list all the URLs set to `0`. [Introduced](https://gitlab.com/gitlab-org/security-products/dast/-/merge_requests/433) in GitLab 13.12. |
-| `DAST_AUTH_REPORT` | boolean | Used in combination with exporting the `gl-dast-debug-auth-report.html` artifact to aid in debugging authentication issues. |
-| `DAST_AUTH_VERIFICATION_URL` <sup>1</sup> | URL | A URL only accessible to logged in users that DAST can use to confirm successful authentication. If provided, DAST exits if it cannot access the URL. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/207335) in GitLab 13.8. |
-| `DAST_AUTH_VERIFICATION_SELECTOR` | selector | Verifies successful authentication by checking for presence of a selector once the login form has been submitted. Example: `css:.user-photo` |
-| `DAST_AUTH_VERIFICATION_LOGIN_FORM` | boolean | Verifies successful authentication by checking for the lack of a login form once the login form has been submitted. |
-| `DAST_ADVERTISE_SCAN` | boolean | Set to `true` to add a `Via` header to every request sent, advertising that the request was sent as part of a GitLab DAST scan. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/334947) in GitLab 14.1. |
+These CI/CD variables are specific to DAST. They can be used to customize the behavior of DAST to your requirements.
+
+| CI/CD variable | Type | Description |
+|:-------------------------------------------------|:--------------|:------------------------------|
+| `DAST_ADVERTISE_SCAN` | boolean | Set to `true` to add a `Via` header to every request sent, advertising that the request was sent as part of a GitLab DAST scan. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/334947) in GitLab 14.1. |
+| `DAST_AGGREGATE_VULNERABILITIES` | boolean | Vulnerability aggregation is set to `true` by default. To disable this feature and see each vulnerability individually set to `false`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/254043) in GitLab 14.0. |
+| `DAST_API_HOST_OVERRIDE` <sup>1</sup> | string | Used to override domains defined in API specification files. Only supported when importing the API specification from a URL. Example: `example.com:8080`. |
+| `DAST_API_OPENAPI` | URL or string | The API specification to import. The specification can be hosted at a URL, or the name of a file present in the `/zap/wrk` directory. The variable `DAST_WEBSITE` must be specified if this is omitted. |
+| `DAST_API_SPECIFICATION` <sup>1</sup> | URL or string | [Deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/290241) in GitLab 13.12 and replaced by `DAST_API_OPENAPI`. To be removed in GitLab 15.0. The API specification to import. The specification can be hosted at a URL, or the name of a file present in the `/zap/wrk` directory. The variable `DAST_WEBSITE` must be specified if this is omitted. |
+| `DAST_AUTH_REPORT` <sup>2</sup> | boolean | Used in combination with exporting the `gl-dast-debug-auth-report.html` artifact to aid in debugging authentication issues. |
+| `DAST_AUTH_EXCLUDE_URLS` <sup>2</sup> | URLs | **{warning}** **[Removed](https://gitlab.com/gitlab-org/gitlab/-/issues/289959)** in GitLab 14.0. Replaced by `DAST_EXCLUDE_URLS`. The URLs to skip during the authenticated scan; comma-separated. Regular expression syntax can be used to match multiple URLs. For example, `.*` matches an arbitrary character sequence. Not supported for API scans. |
+| `DAST_AUTH_URL` <sup>1,2</sup> | URL | The URL of the page containing the sign-in HTML form on the target website. `DAST_USERNAME` and `DAST_PASSWORD` are submitted with the login form to create an authenticated scan. Not supported for API scans. Example: `https://login.example.com`. |
+| `DAST_AUTH_VERIFICATION_LOGIN_FORM` <sup>2</sup> | boolean | Verifies successful authentication by checking for the lack of a login form once the login form has been submitted. |
+| `DAST_AUTH_VERIFICATION_SELECTOR` <sup>2</sup> | selector | Verifies successful authentication by checking for presence of a selector once the login form has been submitted. Example: `css:.user-photo`. |
+| `DAST_AUTH_VERIFICATION_URL` <sup>1,2</sup> | URL | A URL only accessible to logged in users that DAST can use to confirm successful authentication. If provided, DAST exits if it cannot access the URL. Example: `"http://example.com/loggedin_page"`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/207335) in GitLab 13.8. |
+| `DAST_AUTO_UPDATE_ADDONS` | boolean | ZAP add-ons are pinned to specific versions in the DAST Docker image. Set to `true` to download the latest versions when the scan starts. Default: `false`. |
+| `DAST_BROWSER_PATH_TO_LOGIN_FORM` <sup>1,2</sup> | selector | Comma-separated list of selectors that will be clicked on prior to attempting to enter `DAST_USERNAME` and `DAST_PASSWORD` into the login form. Example: `"css:.navigation-menu,css:.login-menu-item"`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/326633) in GitLab 14.1. |
+| `DAST_DEBUG` <sup>1</sup> | boolean | Enable debug message output. Default: `false`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/12652) in GitLab 13.1. |
+| `DAST_EXCLUDE_RULES` | string | Set to a comma-separated list of Vulnerability Rule IDs to exclude them from running during the scan. Rule IDs are numbers and can be found from the DAST log or on the [ZAP project](https://www.zaproxy.org/docs/alerts/). For example, `HTTP Parameter Override` has a rule ID of `10026`. Cannot be used when `DAST_ONLY_INCLUDE_RULES` is set. **Note:** In earlier versions of GitLab the excluded rules were executed but vulnerabilities they generated were suppressed. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/118641) in GitLab 12.10. |
+| `DAST_EXCLUDE_URLS` <sup>1,2</sup> | URLs | The URLs to skip during the authenticated scan; comma-separated. Regular expression syntax can be used to match multiple URLs. For example, `.*` matches an arbitrary character sequence. Not supported for API scans. Example, `http://example.com/sign-out`. |
+| `DAST_FIRST_SUBMIT_FIELD` <sup>2</sup> | string | The `id` or `name` of the element that when clicked submits the username form of a multi-page login process. For example, `css:button[type='user-submit']`. [Introduced](https://gitlab.com/gitlab-org/gitlab-ee/issues/9894) in GitLab 12.4. |
+| `DAST_FULL_SCAN_DOMAIN_VALIDATION_REQUIRED` | boolean | **{warning}** **[Removed](https://gitlab.com/gitlab-org/gitlab/-/issues/293595)** in GitLab 14.0. Set to `true` to require domain validation when running DAST full scans. Not supported for API scans. Default: `false` |
+| `DAST_FULL_SCAN_ENABLED` <sup>1</sup> | boolean | Set to `true` to run a [ZAP Full Scan](https://github.com/zaproxy/zaproxy/wiki/ZAP-Full-Scan) instead of a [ZAP Baseline Scan](https://github.com/zaproxy/zaproxy/wiki/ZAP-Baseline-Scan). Default: `false` |
+| `DAST_HTML_REPORT` | string | The filename of the HTML report written at the end of a scan. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/12652) in GitLab 13.1. |
+| `DAST_INCLUDE_ALPHA_VULNERABILITIES` | boolean | Set to `true` to include alpha passive and active scan rules. Default: `false`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/12652) in GitLab 13.1. |
+| `DAST_MARKDOWN_REPORT` | string | The filename of the Markdown report written at the end of a scan. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/12652) in GitLab 13.1. |
+| `DAST_MASK_HTTP_HEADERS` | string | Comma-separated list of request and response headers to be masked (GitLab 13.1). Must contain **all** headers to be masked. Refer to [list of headers that are masked by default](#hide-sensitive-information). |
+| `DAST_MAX_URLS_PER_VULNERABILITY` | number | The maximum number of URLs reported for a single vulnerability. `DAST_MAX_URLS_PER_VULNERABILITY` is set to `50` by default. To list all the URLs set to `0`. [Introduced](https://gitlab.com/gitlab-org/security-products/dast/-/merge_requests/433) in GitLab 13.12. |
+| `DAST_ONLY_INCLUDE_RULES` | string | Set to a comma-separated list of Vulnerability Rule IDs to configure the scan to run only them. Rule IDs are numbers and can be found from the DAST log or on the [ZAP project](https://www.zaproxy.org/docs/alerts/). Cannot be used when `DAST_EXCLUDE_RULES` is set. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/250651) in GitLab 13.12. |
+| `DAST_PASSWORD` <sup>1,2</sup> | string | The password to authenticate to in the website. Example: `P@55w0rd!` |
+| `DAST_PASSWORD_FIELD` <sup>1,2</sup> | string | The selector of password field at the sign-in HTML form. Example: `id:password` |
+| `DAST_PATHS` | string | Set to a comma-separated list of URLs for DAST to scan. For example, `/page1.html,/category1/page3.html,/page2.html`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/214120) in GitLab 13.4. |
+| `DAST_PATHS_FILE` | string | The file path containing the paths within `DAST_WEBSITE` to scan. The file must be plain text with one path per line. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/258825) in GitLab 13.6. |
+| `DAST_REQUEST_HEADERS` <sup>1</sup> | string | Set to a comma-separated list of request header names and values. Headers are added to every request made by DAST. For example, `Cache-control: no-cache,User-Agent: DAST/1.0` |
+| `DAST_SKIP_TARGET_CHECK` | boolean | Set to `true` to prevent DAST from checking that the target is available before scanning. Default: `false`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/229067) in GitLab 13.8. |
+| `DAST_SPIDER_MINS` <sup>1</sup> | number | The maximum duration of the spider scan in minutes. Set to `0` for unlimited. Default: One minute, or unlimited when the scan is a full scan. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/12652) in GitLab 13.1. |
+| `DAST_SPIDER_START_AT_HOST` | boolean | Set to `false` to prevent DAST from resetting the target to its host before scanning. When `true`, non-host targets `http://test.site/some_path` is reset to `http://test.site` before scan. Default: `true`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/258805) in GitLab 13.6. |
+| `DAST_SUBMIT_FIELD` <sup>2</sup> | string | The `id` or `name` of the element that when clicked submits the login form or the password form of a multi-page login process. For example, `css:button[type='submit']`. [Introduced](https://gitlab.com/gitlab-org/gitlab-ee/issues/9894) in GitLab 12.4. |
+| `DAST_TARGET_AVAILABILITY_TIMEOUT` <sup>1</sup> | number | Time limit in seconds to wait for target availability. |
+| `DAST_USE_AJAX_SPIDER` <sup>1</sup> | boolean | Set to `true` to use the AJAX spider in addition to the traditional spider, useful for crawling sites that require JavaScript. Default: `false`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/12652) in GitLab 13.1. |
+| `DAST_USERNAME` <sup>1,2</sup> | string | The username to authenticate to in the website. Example: `admin` |
+| `DAST_USERNAME_FIELD` <sup>1,2</sup> | string | The selector of username field at the sign-in HTML form. Example: `name:username` |
+| `DAST_XML_REPORT` | string | The filename of the XML report written at the end of a scan. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/12652) in GitLab 13.1. |
+| `DAST_WEBSITE` <sup>1</sup> | URL | The URL of the website to scan. The variable `DAST_API_OPENAPI` must be specified if this is omitted. |
+| `DAST_ZAP_CLI_OPTIONS` | string | ZAP server command-line options. For example, `-Xmx3072m` would set the Java maximum memory allocation pool size. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/12652) in GitLab 13.1. |
+| `DAST_ZAP_LOG_CONFIGURATION` | string | Set to a semicolon-separated list of additional log4j properties for the ZAP Server. Example: `log4j.logger.org.parosproxy.paros.network.HttpSender=DEBUG;log4j.logger.com.crawljax=DEBUG` |
+| `SECURE_ANALYZERS_PREFIX` | URL | Set the Docker registry base address from which to download the analyzer. |
1. Available to an on-demand DAST scan.
+1. Used for authentication.
#### Selectors
@@ -838,8 +821,8 @@ Chrome DevTools element selector tool is an effective way to find a selector.
![highlight](img/dast_auth_browser_scan_highlight.png)
1. Once highlighted, you can see the element's details, including attributes that would make a good candidate for a selector.
-In this example, the `id="user_login"` appears to be a good candidate. You can use this as a selector as the DAST username field by setting
-`DAST_USERNAME_FIELD: "id:user_login"`.
+In this example, the `id="user_login"` appears to be a good candidate. You can use this as a selector as the DAST username field by setting
+`DAST_USERNAME_FIELD: "id:user_login"`.
##### Choose the right selector
@@ -926,89 +909,6 @@ variables:
The DAST job does not require the project's repository to be present when running, so by default
[`GIT_STRATEGY`](../../../ci/runners/configure_runners.md#git-strategy) is set to `none`.
-### Debugging DAST jobs
-
-A DAST job has two executing processes:
-
-- The ZAP server.
-- A series of scripts that start, control and stop the ZAP server.
-
-Debug mode of the scripts can be enabled by using the `DAST_DEBUG` CI/CD variable. This can help when troubleshooting the job,
-and outputs statements indicating what percentage of the scan is complete.
-For details on using variables, see [Overriding the DAST template](#customizing-the-dast-settings).
-
-Debug mode of the ZAP server can be enabled using the `DAST_ZAP_LOG_CONFIGURATION` variable.
-The following table outlines examples of values that can be set and the effect that they have on the output that is logged.
-Multiple values can be specified, separated by semicolons.
-
-For example, `log4j.logger.org.parosproxy.paros.network.HttpSender=DEBUG;log4j.logger.com.crawljax=DEBUG`.
-
-| Log configuration value | Effect |
-|-------------------------------------------------- | ----------------------------------------------------------------- |
-| `log4j.rootLogger=DEBUG` | Enable all debug logging statements. |
-| `log4j.logger.org.apache.commons.httpclient=DEBUG` | Log every HTTP request and response made by the ZAP server. |
-| `log4j.logger.org.zaproxy.zap.spider.SpiderController=DEBUG` | Log URLs found during the spider scan of the target. |
-| `log4j.logger.com.crawljax=DEBUG` | Enable Ajax Crawler debug logging statements. |
-| `log4j.logger.org.parosproxy.paros=DEBUG` | Enable ZAP server proxy debug logging statements. |
-| `log4j.logger.org.zaproxy.zap=DEBUG` | Enable debug logging statements of the general ZAP server code. |
-
-## Running DAST in an offline environment
-
-For self-managed GitLab instances in an environment with limited, restricted, or intermittent access
-to external resources through the internet, some adjustments are required for the DAST job to
-successfully run. For more information, see [Offline environments](../offline_deployments/index.md).
-
-### Requirements for offline DAST support
-
-To use DAST in an offline environment, you need:
-
-- GitLab Runner with the [`docker` or `kubernetes` executor](#prerequisites).
-- Docker Container Registry with a locally available copy of the DAST
- [container image](https://gitlab.com/security-products/dast), found in the
- [DAST container registry](https://gitlab.com/security-products/dast/container_registry).
-
-Note that GitLab Runner has a [default `pull policy` of `always`](https://docs.gitlab.com/runner/executors/docker.html#using-the-always-pull-policy),
-meaning the runner tries to pull Docker images from the GitLab container registry even if a local
-copy is available. The GitLab Runner [`pull_policy` can be set to `if-not-present`](https://docs.gitlab.com/runner/executors/docker.html#using-the-if-not-present-pull-policy)
-in an offline environment if you prefer using only locally available Docker images. However, we
-recommend keeping the pull policy setting to `always` if not in an offline environment, as this
-enables the use of updated scanners in your CI/CD pipelines.
-
-### Make GitLab DAST analyzer images available inside your Docker registry
-
-For DAST, import the following default DAST analyzer image from `registry.gitlab.com` to your [local Docker container registry](../../packages/container_registry/index.md):
-
-- `registry.gitlab.com/security-products/dast:latest`
-
-The process for importing Docker images into a local offline Docker registry depends on
-**your network security policy**. Please consult your IT staff to find an accepted and approved
-process by which external resources can be imported or temporarily accessed.
-These scanners are [periodically updated](../vulnerabilities/index.md#vulnerability-scanner-maintenance)
-with new definitions, and you may be able to make occasional updates on your own.
-
-For details on saving and transporting Docker images as a file, see Docker's documentation on
-[`docker save`](https://docs.docker.com/engine/reference/commandline/save/),
-[`docker load`](https://docs.docker.com/engine/reference/commandline/load/),
-[`docker export`](https://docs.docker.com/engine/reference/commandline/export/), and
-[`docker import`](https://docs.docker.com/engine/reference/commandline/import/).
-
-### Set DAST CI/CD job variables to use local DAST analyzers
-
-Add the following configuration to your `.gitlab-ci.yml` file. You must replace `image` to refer to
-the DAST Docker image hosted on your local Docker container registry:
-
-```yaml
-include:
- - template: DAST.gitlab-ci.yml
-dast:
- image: registry.example.com/namespace/dast:latest
-```
-
-The DAST job should now use local copies of the DAST analyzers to scan your code and generate
-security reports without requiring internet access.
-
-Alternatively, you can use the CI/CD variable `SECURE_ANALYZERS_PREFIX` to override the base registry address of the `dast` image.
-
## On-demand scans
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/218465) in GitLab 13.2.
@@ -1148,7 +1048,12 @@ When an API site type is selected, a [host override](#host-override) is used to
#### Site profile validation
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/233020) in GitLab 13.8.
+> - Site profile validation [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/233020) in GitLab 13.8.
+> - Meta tag validation [enabled on GitLab.com](https://gitlab.com/groups/gitlab-org/-/epics/6460) in GitLab 14.2 and is ready for production use.
+> - Meta tag validation [enabled with `dast_meta_tag_validation flag` flag](https://gitlab.com/gitlab-org/gitlab/-/issues/337711) for self-managed GitLab in GitLab 14.2 and is ready for production use.
+
+FLAG:
+On self-managed GitLab, by default this feature is available. To hide the feature, ask an administrator to [disable the `dast_meta_tag_validation` flag](../../../administration/feature_flags.md). On GitLab.com, this feature is available but can be configured by GitLab.com administrators only.
Site profile validation reduces the risk of running an active scan against the wrong website. A site
must be validated before an active scan can run against it. The site validation methods are as
@@ -1160,8 +1065,14 @@ follows:
- _Header validation_ requires the header `Gitlab-On-Demand-DAST` be added to the target site,
with a value unique to the project. The validation process checks that the header is present, and
checks its value.
+- _Meta tag validation_ requires the meta tag named `gitlab-dast-validation` be added to the target site,
+ with a value unique to the project. Make sure it's added to the `<head>` section of the page. The validation process checks that the meta tag is present, and
+ checks its value.
+
+All these methods are equivalent in functionality. Use whichever is feasible.
-Both methods are equivalent in functionality. Use whichever is feasible.
+In [GitLab 14.2 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/324990), site profile
+validation happens in a CI job using the [GitLab Runner](../../../ci/runners/index.md).
#### Create a site profile
@@ -1210,8 +1121,9 @@ Prerequisites:
To validate a site profile:
-1. From your project's home page, go to **Security & Compliance > Configuration**.
-1. In the **DAST Profiles** row select **Manage**.
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Security & Compliance > Configuration**.
+1. In the **Dynamic Application Security Testing (DAST)** section, select **Manage scans**.
1. Select the **Site Profiles** tab.
1. In the profile's row select **Validate** or **Retry validation**.
1. Select the validation method.
@@ -1225,6 +1137,11 @@ To validate a site profile:
1. Edit the header of the site to validate, and paste the clipboard content.
1. Select the input field in **Step 3** and enter the location of the header.
1. Select **Validate**.
+ 1. For **Meta tag validation**:
+ 1. Select the clipboard icon in **Step 2**.
+ 1. Edit the content of the site to validate, and paste the clipboard content.
+ 1. Select the input field in **Step 3** and enter the location of the meta tag.
+ 1. Select **Validate**.
The site is validated and an active scan can run against it.
diff --git a/doc/user/application_security/dast/run_dast_offline.md b/doc/user/application_security/dast/run_dast_offline.md
new file mode 100644
index 00000000000..39747a5cbe5
--- /dev/null
+++ b/doc/user/application_security/dast/run_dast_offline.md
@@ -0,0 +1,63 @@
+---
+stage: Secure
+group: Dynamic Analysis
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+type: reference, howto
+---
+
+# Run DAST in an offline environment
+
+For self-managed GitLab instances in an environment with limited, restricted, or intermittent access
+to external resources through the internet, some adjustments are required for the DAST job to
+successfully run. For more information, see [Offline environments](../offline_deployments/index.md).
+
+## Requirements for offline DAST support
+
+To use DAST in an offline environment, you need:
+
+- GitLab Runner with the [`docker` or `kubernetes` executor](index.md#prerequisites).
+- Docker Container Registry with a locally available copy of the DAST
+ [container image](https://gitlab.com/security-products/dast), found in the
+ [DAST container registry](https://gitlab.com/security-products/dast/container_registry).
+
+Note that GitLab Runner has a [default `pull policy` of `always`](https://docs.gitlab.com/runner/executors/docker.html#using-the-always-pull-policy),
+meaning the runner tries to pull Docker images from the GitLab container registry even if a local
+copy is available. The GitLab Runner [`pull_policy` can be set to `if-not-present`](https://docs.gitlab.com/runner/executors/docker.html#using-the-if-not-present-pull-policy)
+in an offline environment if you prefer using only locally available Docker images. However, we
+recommend keeping the pull policy setting to `always` if not in an offline environment, as this
+enables the use of updated scanners in your CI/CD pipelines.
+
+## Make GitLab DAST analyzer images available inside your Docker registry
+
+For DAST, import the following default DAST analyzer image from `registry.gitlab.com` to your [local Docker container registry](../../packages/container_registry/index.md):
+
+- `registry.gitlab.com/security-products/dast:latest`
+
+The process for importing Docker images into a local offline Docker registry depends on
+**your network security policy**. Please consult your IT staff to find an accepted and approved
+process by which external resources can be imported or temporarily accessed.
+These scanners are [periodically updated](../vulnerabilities/index.md#vulnerability-scanner-maintenance)
+with new definitions, and you may be able to make occasional updates on your own.
+
+For details on saving and transporting Docker images as a file, see Docker's documentation on
+[`docker save`](https://docs.docker.com/engine/reference/commandline/save/),
+[`docker load`](https://docs.docker.com/engine/reference/commandline/load/),
+[`docker export`](https://docs.docker.com/engine/reference/commandline/export/), and
+[`docker import`](https://docs.docker.com/engine/reference/commandline/import/).
+
+## Set DAST CI/CD job variables to use local DAST analyzers
+
+Add the following configuration to your `.gitlab-ci.yml` file. You must replace `image` to refer to
+the DAST Docker image hosted on your local Docker container registry:
+
+```yaml
+include:
+ - template: DAST.gitlab-ci.yml
+dast:
+ image: registry.example.com/namespace/dast:latest
+```
+
+The DAST job should now use local copies of the DAST analyzers to scan your code and generate
+security reports without requiring internet access.
+
+Alternatively, you can use the CI/CD variable `SECURE_ANALYZERS_PREFIX` to override the base registry address of the `dast` image.
diff --git a/doc/user/application_security/dependency_list/index.md b/doc/user/application_security/dependency_list/index.md
index 9fc90c427c5..1cb21d34853 100644
--- a/doc/user/application_security/dependency_list/index.md
+++ b/doc/user/application_security/dependency_list/index.md
@@ -10,7 +10,10 @@ info: To determine the technical writer assigned to the Stage/Group associated w
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/10075) in GitLab Ultimate 12.0.
Use the dependency list to review your project's dependencies and key
-details about those dependencies, including their known vulnerabilities. It is a collection of dependencies in your project, including existing and new findings. To see the dependency list, go to your project and select **Security & Compliance > Dependency List**.
+details about those dependencies, including their known vulnerabilities. It is a collection of dependencies in your project, including existing and new findings.
+
+To see the dependency list, go to your project and select **Security & Compliance > Dependency List**.
+
This information is sometimes referred to as a Software Bill of Materials or SBoM / BOM.
The dependency list only shows the results of the last successful pipeline to run on the default branch. This is why we recommend not changing the default behavior of allowing the secure jobs to fail.
@@ -71,4 +74,12 @@ If the [License Compliance](../../compliance/license_compliance/index.md) CI job
## Downloading the dependency list
You can download your project's full list of dependencies and their details in
-`JSON` format by selecting the download button.
+`JSON` format.
+
+### In the UI
+
+You can download your project’s list of dependencies and their details in JSON format by selecting the **Export** button. Note that the dependency list only shows the results of the last successful pipeline to run on the default branch.
+
+### Using the API
+
+You can download your project’s list of dependencies [using the API](../../../api/dependencies.md#list-project-dependencies). Note this only provides the dependencies identified by the gemnasium family of analyzers and [not any other of the GitLab dependency analyzers](../dependency_scanning/analyzers.md).
diff --git a/doc/user/application_security/dependency_scanning/index.md b/doc/user/application_security/dependency_scanning/index.md
index 76a14aae715..565b9c29934 100644
--- a/doc/user/application_security/dependency_scanning/index.md
+++ b/doc/user/application_security/dependency_scanning/index.md
@@ -7,8 +7,6 @@ info: To determine the technical writer assigned to the Stage/Group associated w
# Dependency Scanning **(ULTIMATE)**
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/5105) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 10.7.
-
The Dependency Scanning feature can automatically find security vulnerabilities in your
dependencies while you're developing and testing your applications. For example, dependency scanning
lets you know if your application uses an external (open source) library that is known to be
@@ -29,19 +27,11 @@ either:
GitLab checks the dependency scanning report, compares the found vulnerabilities
between the source and target branches, and shows the information on the
-merge request.
+merge request. The results are sorted by the [severity](../vulnerabilities/severities.md) of the
+vulnerability.
![Dependency scanning Widget](img/dependency_scanning_v13_2.png)
-The results are sorted by the severity of the vulnerability:
-
-1. Critical
-1. High
-1. Medium
-1. Low
-1. Unknown
-1. Everything else
-
## Requirements
To run dependency scanning jobs, by default, you need GitLab Runner with the
@@ -53,29 +43,283 @@ WARNING:
If you use your own runners, make sure your installed version of Docker
is **not** `19.03.0`. See [troubleshooting information](#error-response-from-daemon-error-processing-tar-file-docker-tar-relocation-error) for details.
+WARNING:
+Dependency Scanning does not support run-time installation of compilers and interpreters.
+If you have need of this, please explain why by filling out the survey [here](https://docs.google.com/forms/d/e/1FAIpQLScKo7xEYA65rOjPTGIufAyfjPGnCALSJZoTxBlvskfFMEOZMw/viewform).
+
## Supported languages and package managers
-GitLab relies on [`rules`](../../../ci/yaml/index.md#rules) to start relevant analyzers depending on the languages detected in the repository.
-The current detection logic limits the maximum search depth to two levels. For example, the `gemnasium-dependency_scanning` job is enabled if a repository contains either a `Gemfile` or `api/Gemfile` file, but not if the only supported dependency file is `api/client/Gemfile`.
+Dependency Scanning automatically detects the languages used in the repository. All analyzers
+matching the detected languages are run. There is usually no need to customize the selection of
+analyzers. We recommend not specifying the analyzers so you automatically use the full selection
+for best coverage, avoiding the need to make adjustments when there are deprecations or removals.
+However, you can override the selection using the variable `DS_EXCLUDED_ANALYZERS`.
+
+The language detection relies on CI job [`rules`](../../../ci/yaml/index.md#rules) and searches a
+maximum of two directory levels from the repository's root. For example, the
+`gemnasium-dependency_scanning` job is enabled if a repository contains either a `Gemfile` or
+`api/Gemfile` file, but not if the only supported dependency file is `api/client/Gemfile`.
The following languages and dependency managers are supported:
-| Package Managers | Languages | Supported files | Scan tools |
-| ------------------- | --------- | --------------- | ------------ |
-| [Bundler](https://bundler.io/) | Ruby | `Gemfile.lock`, `gems.locked` | [Gemnasium](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium), [bundler-audit](https://github.com/rubysec/bundler-audit) |
-| [Composer](https://getcomposer.org/) | PHP | `composer.lock` | [Gemnasium](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium) |
-| [Conan](https://conan.io/) | C, C++ | [`conan.lock`](https://docs.conan.io/en/latest/versioning/lockfiles.html) | [Gemnasium](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium) |
-| [Golang](https://golang.org/) | Go | `go.sum` | [Gemnasium](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium) |
-| [Gradle](https://gradle.org/), [Maven](https://maven.apache.org/) | Java | `build.gradle`, `build.gradle.kts`, `pom.xml` | [Gemnasium](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium) |
-| [npm](https://www.npmjs.com/), [yarn](https://classic.yarnpkg.com/en/) 1.x | JavaScript | `package-lock.json`, `npm-shrinkwrap.json`, `yarn.lock` | [Gemnasium](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium) |
-| [npm](https://www.npmjs.com/) (7 and earlier), [yarn](https://classic.yarnpkg.com/en/) 1.x | JavaScript | `package.json` | [Retire.js](https://retirejs.github.io/retire.js/) |
-| [NuGet](https://www.nuget.org/) 4.9+ | .NET, C# | [`packages.lock.json`](https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files#enabling-lock-file) | [Gemnasium](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium) |
-| [`setuptools`](https://setuptools.readthedocs.io/en/latest/), [pip](https://pip.pypa.io/en/stable/), [Pipenv](https://pipenv.pypa.io/en/latest/) (*1*) | Python | `setup.py`, `requirements.txt`, `requirements.pip`, `requires.txt`, `Pipfile`, `Pipfile.lock` | [Gemnasium](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium) |
-| [sbt](https://www.scala-sbt.org/) (*2*) | Scala | `build.sbt` | [Gemnasium](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium) |
-
-1. [Pipenv](https://pipenv.pypa.io/en/latest/) projects are scanned when a `Pipfile` is present.
+<style>
+table.supported-languages tr:nth-child(even) {
+ background-color: transparent;
+}
+
+table.supported-languages td {
+ border-left: 1px solid #dbdbdb;
+ border-right: 1px solid #dbdbdb;
+ border-bottom: 1px solid #dbdbdb;
+}
+
+table.supported-languages tr td:first-child {
+ border-left: 0;
+}
+
+table.supported-languages tr td:last-child {
+ border-right: 0;
+}
+
+table.supported-languages ul {
+ list-style-type: none;
+ padding-left: 0px;
+ margin-bottom: 0px;
+}
+</style>
+
+<table class="supported-languages">
+ <thead>
+ <tr>
+ <th>Language</th>
+ <th>Package Manager</th>
+ <th>Package Manager Versions</th>
+ <th>Supported files</th>
+ <th>Analyzer</th>
+ <th><a href="#how-multiple-files-are-processed">Processes multiple files?</a></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td rowspan="2">Ruby</td>
+ <td rowspan="2"><a href="https://bundler.io/">Bundler</a></td>
+ <td rowspan="2">Any</td>
+ <td>
+ <ul>
+ <li><code>Gemfile.lock</code></li>
+ <li><code>gems.locked</code></li>
+ </ul>
+ </td>
+ <td><a href="https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium">Gemnasium</a></td>
+ <td>Y</td>
+ </tr>
+ <tr>
+ <td><code>Gemfile.lock</code></td>
+ <td><a href="https://github.com/rubysec/bundler-audit">bundler-audit</a></td>
+ <td>N</td>
+ </tr>
+ <tr>
+ <td>PHP</td>
+ <td><a href="https://getcomposer.org/">Composer</a></td>
+ <td>Any</td>
+ <td><code>composer.lock</code></td>
+ <td><a href="https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium">Gemnasium</a></td>
+ <td>Y</td>
+ </tr>
+ <tr>
+ <td>C</td>
+ <td rowspan="2"><a href="https://conan.io/">Conan</a></td>
+ <td rowspan="2">Any</td>
+ <td rowspan="2"><a href="https://docs.conan.io/en/latest/versioning/lockfiles.html"><code>conan.lock</code></a></td>
+ <td rowspan="2"><a href="https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium">Gemnasium</a></td>
+ <td rowspan="2">Y</td>
+ </tr>
+ <tr>
+ <td>C++</td>
+ </tr>
+ <tr>
+ <td>Go</td>
+ <td><a href="https://golang.org/">Golang</a></td>
+ <td>Any</td>
+ <td><code>go.sum</code></td>
+ <td><a href="https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium">Gemnasium</a></td>
+ <td>Y</td>
+ </tr>
+ <tr>
+ <td rowspan="2">Java</td>
+ <td><a href="https://gradle.org/">Gradle</a></td>
+ <td>Any</td>
+ <td>
+ <ul>
+ <li><code>build.gradle</code></li>
+ <li><code>build.gradle.kts</code></li>
+ </ul>
+ </td>
+ <td><a href="https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium">Gemnasium</a></td>
+ <td>N</td>
+ </tr>
+ <tr>
+ <td><a href="https://maven.apache.org/">Maven</a></td>
+ <td>Any</td>
+ <td><code>pom.xml</code></td>
+ <td><a href="https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium">Gemnasium</a></td>
+ <td>N</td>
+ </tr>
+ <tr>
+ <td rowspan="3">JavaScript</td>
+ <td rowspan="2"><a href="https://www.npmjs.com/">npm</a></td>
+ <td rowspan="2">Any</td>
+ <td>
+ <ul>
+ <li><code>package-lock.json</code></li>
+ <li><code>npm-shrinkwrap.json</code></li>
+ </ul>
+ </td>
+ <td><a href="https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium">Gemnasium</a></td>
+ <td>Y</td>
+ </tr>
+ <tr>
+ <td><code>package.json</code></td>
+ <td><a href="https://retirejs.github.io/retire.js/">Retire.js</a></td>
+ <td>N</td>
+ </tr>
+ <tr>
+ <td><a href="https://classic.yarnpkg.com/en/">yarn</a></td>
+ <td>1.x</td>
+ <td><code>yarn.lock</code></td>
+ <td><a href="https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium">Gemnasium</a></td>
+ <td>Y</td>
+ </tr>
+ <tr>
+ <td>.NET</td>
+ <td rowspan="2"><a href="https://www.nuget.org/">NuGet</a></td>
+ <td rowspan="2">&gt;= 4.9</td>
+ <td rowspan="2"><a href="https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files#enabling-lock-file"><code>packages.lock.json</code></a></td>
+ <td rowspan="2"><a href="https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium">Gemnasium</a></td>
+ <td rowspan="2">Y</td>
+ </tr>
+ <tr>
+ <td>C#</td>
+ </tr>
+ <tr>
+ <td rowspan="3">Python</td>
+ <td><a href="https://setuptools.readthedocs.io/en/latest/">setuptools</a></td>
+ <td>Any</td>
+ <td><code>setup.py</code></td>
+ <td><a href="https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium">Gemnasium</a></td>
+ <td>N</td>
+ </tr>
+ <tr>
+ <td><a href="https://pip.pypa.io/en/stable/">pip</a></td>
+ <td>Any</td>
+ <td>
+ <ul>
+ <li><code>requirements.txt</code></li>
+ <li><code>requirements.pip</code></li>
+ <li><code>requires.txt</code></li>
+ </ul>
+ </td>
+ <td><a href="https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium">Gemnasium</a></td>
+ <td>N</td>
+ </tr>
+ <tr>
+ <td><a href="https://pipenv.pypa.io/en/latest/">Pipenv</a></td>
+ <td>Any</td>
+ <td>
+ <ul>
+ <li><a href="https://pipenv.pypa.io/en/latest/basics/#example-pipfile-pipfile-lock"><code>Pipfile</code></a></li>
+ <li><a href="https://pipenv.pypa.io/en/latest/basics/#example-pipfile-pipfile-lock"><code>Pipfile.lock</code></a><sup><b><a href="#notes-regarding-supported-languages-and-package-managers">1</a></b></sup></li>
+ </ul>
+ </td>
+ <td><a href="https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium">Gemnasium</a></td>
+ <td>N</td>
+ </tr>
+ <tr>
+ <td>Scala</td>
+ <td><a href="https://www.scala-sbt.org/">sbt</a><sup><b><a href="#notes-regarding-supported-languages-and-package-managers">2</a></b></sup></td>
+ <td>Any</td>
+ <td><code>build.sbt</code></td>
+ <td><a href="https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium">Gemnasium</a></td>
+ <td>N</td>
+ </tr>
+ </tbody>
+</table>
+
+### Notes regarding supported languages and package managers
+
+1. The presence of a `Pipfile.lock` file alone will _not_ trigger the analyzer; the presence of a `Pipfile` is still required in order
+for the analyzer to be executed. However, if a `Pipfile.lock` file is found, it will be used by `Gemnasium` to scan the exact package
+versions listed in this file.
+
+ Support for `Pipfile.lock` files without requiring the presence of a `Pipfile` will be implemented in the following upcoming issue:
+ [Dependency Scanning of Pipfile.lock without installing project dependencies](https://gitlab.com/gitlab-org/gitlab/-/issues/299294).
+
1. Support for [sbt](https://www.scala-sbt.org/) 1.3 and above was added in GitLab 13.9.
+### How analyzers are triggered
+
+GitLab relies on [`rules:exists`](../../../ci/yaml/index.md#rulesexists) to start the relevant analyzers for the languages detected by the presence of the
+`Supported files` in the repository as shown in the [table above](#supported-languages-and-package-managers).
+
+The current detection logic limits the maximum search depth to two levels. For example, the `gemnasium-dependency_scanning` job is enabled if
+a repository contains either a `Gemfile.lock` or `api/Gemfile.lock` file, but not if the only supported dependency file is `api/client/Gemfile.lock`.
+
+### How multiple files are processed
+
+NOTE:
+If you've run into problems while scanning multiple files, please contribute a comment to
+[this issue](https://gitlab.com/gitlab-org/gitlab/-/issues/337056).
+
+#### Ruby
+
+The following analyzers are executed, each of which have different behavior when processing multiple files:
+
+- [Gemnasium](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium)
+
+ Supports multiple lockfiles.
+
+- [bundler-audit](https://github.com/rubysec/bundler-audit)
+
+ Does not support multiple lockfiles. When multiple lockfiles exist, `bundler-audit`
+ analyzes the first lockfile discovered while traversing the directory tree in alphabetical order.
+
+We execute both analyzers because they use different sources of vulnerability data. The result is more comprehensive analysis than if only one was executed.
+
+#### Python
+
+We only execute one build in the directory where a requirements file has been detected, such as `requirements.txt` or any
+variation of this file (for example, `requirements.pip` or `requires.txt`).
+
+#### Java and Scala
+
+We only execute one build in the directory where a build file has been detected, such as `build.sbt` or `build.gradle`.
+Please note, we support the following types of Java project stuctures:
+
+- [multi-project sbt builds](https://www.scala-sbt.org/1.x/docs/Multi-Project.html)
+- [multi-project gradle builds](https://docs.gradle.org/current/userguide/intro_multi_project_builds.html)
+- [multi-module maven projects](https://maven.apache.org/pom.html#Aggregation)
+
+#### JavaScript
+
+The following analyzers are executed, each of which have different behavior when processing multiple files:
+
+- [Gemnasium](https://gitlab.com/gitlab-org/security-products/analyzers/gemnasium)
+
+ Supports multiple lockfiles
+
+- [Retire.js](https://retirejs.github.io/retire.js/)
+
+ Does not support multiple lockfiles. When multiple lockfiles exist, `Retire.js`
+ analyzes the first lockfile discovered while traversing the directory tree in alphabetical order.
+
+We execute both analyzers because they use different sources of vulnerability data. The result is more comprehensive analysis than if only one was executed.
+
+#### PHP, Go, C, C++, .NET, C&#35;
+
+The analyzer for these languages supports multiple lockfiles.
+
+### Future support for additional languages
+
Plans are underway for supporting the following languages, dependency managers, and dependency files. For details, see the issue link for each.
For workarounds, see the [Troubleshooting section](#troubleshooting)
@@ -113,17 +357,8 @@ always take the latest dependency scanning artifact available.
### Enable Dependency Scanning via an automatic merge request
> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/4908) in GitLab 14.1.
-> - [Deployed behind a feature flag](../../../user/feature_flags.md), enabled by default.
-> - Enabled on GitLab.com.
-> - Recommended for production use.
-> - For GitLab self-managed instances, GitLab administrators can opt to [disable it](#enable-or-disable-configure-dependency-scanning-via-a-merge-request). **(ULTIMATE SELF)**
-
-WARNING:
-This feature might not be available to you. Check the **version history** note above for details.
-
-There can be
-[risks when disabling released features](../../../user/feature_flags.md#risks-when-disabling-released-features).
-Refer to this feature's version history for more details.
+> - [Enabled with `sec_dependency_scanning_ui_enable` flag](https://gitlab.com/gitlab-org/gitlab/-/issues/282533) for self-managed GitLab in GitLab 14.1 and is ready for production use.
+> - [Feature flag sec_dependency_scanning_ui_enable removed](https://gitlab.com/gitlab-org/gitlab/-/issues/326005) in GitLab 14.2.
To enable Dependency Scanning in a project, you can create a merge request
from the Security Configuration page.
@@ -624,7 +859,7 @@ Generally, the approach is the following:
1. Add [`dependencies: [<your-converter-job>]`](../../../ci/yaml/index.md#dependencies)
to your `dependency_scanning` job to make use of the converted definitions files.
-For example, the currently unsupported `poetry.lock` file can be
+For example, the unsupported `poetry.lock` file can be
[converted](https://python-poetry.org/docs/cli/#export)
to the supported `requirements.txt` as follows.
@@ -633,25 +868,17 @@ include:
- template: Dependency-Scanning.gitlab-ci.yml
stages:
- - .pre
- test
variables:
PIP_REQUIREMENTS_FILE: "requirements-converted.txt"
-convert-poetry:
- stage: .pre
- image: python:3-slim
- script:
+gemnasium-python-dependency_scanning:
+ # Work around https://gitlab.com/gitlab-org/gitlab/-/issues/7006
+ before_script:
- pip install poetry # Or via another method: https://python-poetry.org/docs/#installation
- - poetry export --output "$PIP_REQUIREMENTS_FILE"
- artifacts:
- paths:
- - "$PIP_REQUIREMENTS_FILE"
-
-dependency_scanning:
- stage: test
- dependencies: ["convert-poetry"]
+ - poetry export --output="$PIP_REQUIREMENTS_FILE"
+ - rm poetry.lock pyproject.toml
```
### `Error response from daemon: error processing tar file: docker-tar: relocation error`
@@ -681,22 +908,3 @@ with a dependency on this version of Python should use `retire.js` version 2.10.
### Error: `dependency_scanning is used for configuration only, and its script should not be executed`
For information on this, see the [GitLab Secure troubleshooting section](../index.md#error-job-is-used-for-configuration-only-and-its-script-should-not-be-executed).
-
-### Enable or disable Configure Dependency Scanning via a Merge Request
-
-Configure Dependency Scanning via a Merge Request is under development but ready for production use.
-It is deployed behind a feature flag that is **enabled by default**.
-[GitLab administrators with access to the GitLab Rails console](../../../administration/feature_flags.md)
-can opt to disable it.
-
-To disable it:
-
-```ruby
-Feature.disable(:sec_dependency_scanning_ui_enable)
-```
-
-To enable it:
-
-```ruby
-Feature.enable(:sec_dependency_scanning_ui_enable)
-```
diff --git a/doc/user/application_security/img/vulnerability_page_merge_request_button_dropdown_v13_1.png b/doc/user/application_security/img/vulnerability_page_merge_request_button_dropdown_v13_1.png
deleted file mode 100644
index 05ca74c3d5c..00000000000
--- a/doc/user/application_security/img/vulnerability_page_merge_request_button_dropdown_v13_1.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/application_security/index.md b/doc/user/application_security/index.md
index 616d2f8c790..3b0725021ef 100644
--- a/doc/user/application_security/index.md
+++ b/doc/user/application_security/index.md
@@ -114,7 +114,7 @@ rules:
If you add the security scanning jobs as described in [Security scanning with Auto DevOps](#security-scanning-with-auto-devops) or [Security scanning without Auto DevOps](#security-scanning-without-auto-devops) to your `.gitlab-ci.yml` each added [security scanning tool](#security-scanning-tools) behave as described below.
-For each compatible analyzer, a job is created in the `test`, `dast` or `fuzz` stage of your pipeline and runs on the next new branch pipeline. Features such as the [Security Dashboard](security_dashboard/index.md), [Vulnerability Report](vulnerability_report/index.md), and [Dependency List](dependency_list/index.md) that rely on this scan data only show results from pipelines on the default branch. Please note that one tool may use many analyzers.
+For each compatible analyzer, a job is created in the `test`, `dast` or `fuzz` stage of your pipeline and runs on the next new branch pipeline. Features such as the [Security Dashboard](security_dashboard/index.md), [Vulnerability Report](vulnerability_report/index.md), and [Dependency List](dependency_list/index.md) that rely on this scan data only show results from pipelines on the default branch. One tool might use many analyzers.
Our language and package manager specific jobs attempt to assess which analyzer(s) they should run for your project so that you can do less configuration.
diff --git a/doc/user/application_security/offline_deployments/index.md b/doc/user/application_security/offline_deployments/index.md
index d87da15b4b0..3bf9d85cd0b 100644
--- a/doc/user/application_security/offline_deployments/index.md
+++ b/doc/user/application_security/offline_deployments/index.md
@@ -61,7 +61,7 @@ mirroring the packages inside your own offline network.
Once a vulnerability is found, you can interact with it. Read more on how to
[address the vulnerabilities](../vulnerabilities/index.md).
-Please note that in some cases the reported vulnerabilities provide metadata that can contain
+In some cases the reported vulnerabilities provide metadata that can contain
external links exposed in the UI. These links might not be accessible within an offline environment.
### Resolving vulnerabilities
@@ -87,7 +87,7 @@ above. You can find more information at each of the pages below:
- [Container scanning offline directions](../container_scanning/index.md#running-container-scanning-in-an-offline-environment)
- [SAST offline directions](../sast/index.md#running-sast-in-an-offline-environment)
-- [DAST offline directions](../dast/index.md#running-dast-in-an-offline-environment)
+- [DAST offline directions](../dast/run_dast_offline.md#run-dast-in-an-offline-environment)
- [License Compliance offline directions](../../compliance/license_compliance/index.md#running-license-compliance-in-an-offline-environment)
- [Dependency Scanning offline directions](../dependency_scanning/index.md#running-dependency-scanning-in-an-offline-environment)
diff --git a/doc/user/application_security/policies/index.md b/doc/user/application_security/policies/index.md
index 076872c9864..3d0135678b7 100644
--- a/doc/user/application_security/policies/index.md
+++ b/doc/user/application_security/policies/index.md
@@ -129,9 +129,9 @@ rule in the defined policy are met.
| Field | Type | Possible values | Description |
|-------|------|-----------------|-------------|
-| `scan` | `string` | `dast` | The action's type. |
-| `site_profile` | `string` | Name of the selected [DAST site profile](../dast/index.md#site-profile). | The DAST site profile to execute the DAST scan. |
-| `scanner_profile` | `string` or `null` | Name of the selected [DAST scanner profile](../dast/index.md#scanner-profile). | The DAST scanner profile to execute the DAST scan. |
+| `scan` | `string` | `dast`, `secret_detection` | The action's type. |
+| `site_profile` | `string` | Name of the selected [DAST site profile](../dast/index.md#site-profile). | The DAST site profile to execute the DAST scan. This field should only be set if `scan` type is `dast`. |
+| `scanner_profile` | `string` or `null` | Name of the selected [DAST scanner profile](../dast/index.md#scanner-profile). | The DAST scanner profile to execute the DAST scan. This field should only be set if `scan` type is `dast`.|
Note the following:
@@ -144,6 +144,11 @@ Note the following:
- When configuring policies with a scheduled DAST scan, the author of the commit in the security
policy project's repository must have access to the scanner and site profiles. Otherwise, the scan
is not scheduled successfully.
+- For a secret detection scan, only rules with the default ruleset are supported. [Custom rulesets](../secret_detection/index.md#custom-rulesets)
+ are not supported.
+- A secret detection scan runs in `normal` mode when executed as part of a pipeline, and in
+ [`historic`](../secret_detection/index.md#full-history-secret-scan)
+ mode when executed as part of a scheduled scan.
Here's an example:
@@ -161,8 +166,8 @@ scan_execution_policy:
- scan: dast
scanner_profile: Scanner Profile A
site_profile: Site Profile B
-- name: Enforce DAST scan every 10 minutes
- description: This policy enforces a DAST scan to run every 10 minutes
+- name: Enforce DAST and secret detection scans every 10 minutes
+ description: This policy enforces DAST and secret detection scans to run every 10 minutes
enabled: true
rules:
- type: schedule
@@ -173,12 +178,25 @@ scan_execution_policy:
- scan: dast
scanner_profile: Scanner Profile C
site_profile: Site Profile D
+ - scan: secret_detection
+- name: Enforce Secret Detection in every default branch pipeline
+ description: This policy enforces pipeline configuration to have a job with Secret Detection scan for the default branch
+ enabled: true
+ rules:
+ - type: pipeline
+ branches:
+ - main
+ actions:
+ - scan: secret_detection
```
-In this example, the DAST scan runs with the scanner profile `Scanner Profile A` and the site
-profile `Site Profile B` for every pipeline executed on branches that match the
-`release/*` wildcard (for example, branch name `release/v1.2.1`); and the DAST scan runs with
-the scanner profile `Scanner Profile C` and the site profile `Site Profile D` every 10 minutes.
+In this example:
+
+- For every pipeline executed on branches that match the `release/*` wildcard (for example, branch
+ `release/v1.2.1`), DAST scans run with `Scanner Profile A` and `Site Profile B`.
+- DAST and secret detection scans run every 10 minutes. The DAST scan runs with `Scanner Profile C`
+ and `Site Profile D`.
+- Secret detection scans run for every pipeline executed on the `main` branch.
## Security Policy project selection
diff --git a/doc/user/application_security/sast/img/sast_v13_2.png b/doc/user/application_security/sast/img/sast_v13_2.png
deleted file mode 100644
index 5697ed9beb0..00000000000
--- a/doc/user/application_security/sast/img/sast_v13_2.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/application_security/sast/index.md b/doc/user/application_security/sast/index.md
index c64df616925..6e88f38d900 100644
--- a/doc/user/application_security/sast/index.md
+++ b/doc/user/application_security/sast/index.md
@@ -31,8 +31,8 @@ The results are sorted by the priority of the vulnerability:
1. High
1. Medium
1. Low
+1. Info
1. Unknown
-1. Everything else
A pipeline consists of multiple jobs, including SAST and DAST scanning. If any job fails to finish
for any reason, the security dashboard does not show SAST scanner output. For example, if the SAST
@@ -71,6 +71,7 @@ You can also [view our language roadmap](https://about.gitlab.com/direction/secu
| .NET Core | [Security Code Scan](https://security-code-scan.github.io) | 11.0 |
| .NET Framework | [Security Code Scan](https://security-code-scan.github.io) | 13.0 |
| Apex (Salesforce) | [PMD](https://pmd.github.io/pmd/index.html) | 12.1 |
+| C | [Semgrep](https://semgrep.dev) | 14.2 |
| C/C++ | [Flawfinder](https://github.com/david-a-wheeler/flawfinder) | 10.7 |
| Elixir (Phoenix) | [Sobelow](https://github.com/nccgroup/sobelow) | 11.1 |
| Go | [Gosec](https://github.com/securego/gosec) | 10.7 |
@@ -146,6 +147,7 @@ as shown in the following table:
| [Access to Security Dashboard](../../application_security/security_dashboard/index.md) | **{dotted-circle}** | **{check-circle}** |
| [Configure SAST in the UI](#configure-sast-in-the-ui) | **{dotted-circle}** | **{check-circle}** |
| [Customize SAST Rulesets](#customize-rulesets) | **{dotted-circle}** | **{check-circle}** |
+| [False Positive Detection](#false-positive-detection) | **{dotted-circle}** | **{check-circle}** |
## Contribute your scanner
@@ -355,6 +357,12 @@ To create a custom ruleset:
value = "gosec-config.json"
```
+### False Positive Detection **(ULTIMATE)**
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/292686) in GitLab 14.2.
+
+Vulnerabilities that have been detected and are false positives will be flagged as false positives in the security dashboard.
+
### Using CI/CD variables to pass credentials for private repositories
Some analyzers require downloading the project's dependencies in order to
diff --git a/doc/user/application_security/secret_detection/index.md b/doc/user/application_security/secret_detection/index.md
index 938bd3b41d5..b6ff68c861b 100644
--- a/doc/user/application_security/secret_detection/index.md
+++ b/doc/user/application_security/secret_detection/index.md
@@ -35,7 +35,7 @@ GitLab displays identified secrets visibly in a few places:
Secret Detection detects a variety of common secrets by default. You can also customize the secret detection patterns using [custom rulesets](#custom-rulesets).
-The [default ruleset provided by Gitleaks](https://gitlab.com/gitlab-org/security-products/analyzers/secrets/-/blob/master/gitleaks/gitleaks.toml) includes the following key types:
+The [default ruleset provided by Gitleaks](https://gitlab.com/gitlab-org/security-products/analyzers/secrets/-/blob/master/gitleaks.toml) includes the following key types:
- Cloud services:
- Amazon Web Services (AWS)
diff --git a/doc/user/application_security/security_dashboard/img/pipeline_security_dashboard_v13_10.png b/doc/user/application_security/security_dashboard/img/pipeline_security_dashboard_v13_10.png
deleted file mode 100644
index 72b24a3fd28..00000000000
--- a/doc/user/application_security/security_dashboard/img/pipeline_security_dashboard_v13_10.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/application_security/security_dashboard/img/pipeline_security_dashboard_v14_2.png b/doc/user/application_security/security_dashboard/img/pipeline_security_dashboard_v14_2.png
new file mode 100644
index 00000000000..3a195a5ce8d
--- /dev/null
+++ b/doc/user/application_security/security_dashboard/img/pipeline_security_dashboard_v14_2.png
Binary files differ
diff --git a/doc/user/application_security/security_dashboard/index.md b/doc/user/application_security/security_dashboard/index.md
index 806bc03e30e..b799177ec5a 100644
--- a/doc/user/application_security/security_dashboard/index.md
+++ b/doc/user/application_security/security_dashboard/index.md
@@ -51,7 +51,7 @@ The security dashboard and vulnerability report displays information about vulne
At the pipeline level, the Security section displays the vulnerabilities present in the branch of
the project the pipeline ran against.
-![Pipeline Security Dashboard](img/pipeline_security_dashboard_v13_10.png)
+![Pipeline Security Dashboard](img/pipeline_security_dashboard_v14_2.png)
Visit the page for any pipeline that ran any of the [supported reports](#supported-reports). To view
the pipeline's security findings, select the **Security** tab when viewing the pipeline.
diff --git a/doc/user/application_security/vulnerabilities/index.md b/doc/user/application_security/vulnerabilities/index.md
index 6437f2325e8..a727dc88ffc 100644
--- a/doc/user/application_security/vulnerabilities/index.md
+++ b/doc/user/application_security/vulnerabilities/index.md
@@ -75,7 +75,7 @@ The issue is then opened so you can take further action.
Prerequisites:
-- [Enable Jira integration](../../project/integrations/jira.md).
+- [Enable Jira integration](../../../integration/jira/index.md).
The **Enable Jira issues creation from vulnerabilities** option must be selected as part of the configuration.
- Each user must have a personal Jira user account with permission to create issues in the target project.
diff --git a/doc/user/application_security/vulnerability_report/img/group_vulnerability_report_v13_9.png b/doc/user/application_security/vulnerability_report/img/group_vulnerability_report_v13_9.png
deleted file mode 100644
index 72443180e09..00000000000
--- a/doc/user/application_security/vulnerability_report/img/group_vulnerability_report_v13_9.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/application_security/vulnerability_report/img/group_vulnerability_report_v14_2.png b/doc/user/application_security/vulnerability_report/img/group_vulnerability_report_v14_2.png
new file mode 100644
index 00000000000..193efe9c386
--- /dev/null
+++ b/doc/user/application_security/vulnerability_report/img/group_vulnerability_report_v14_2.png
Binary files differ
diff --git a/doc/user/application_security/vulnerability_report/img/project_security_dashboard_status_change_v13_10.png b/doc/user/application_security/vulnerability_report/img/project_security_dashboard_status_change_v13_10.png
deleted file mode 100644
index f9f60810f20..00000000000
--- a/doc/user/application_security/vulnerability_report/img/project_security_dashboard_status_change_v13_10.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/application_security/vulnerability_report/img/project_security_dashboard_status_change_v14_2.png b/doc/user/application_security/vulnerability_report/img/project_security_dashboard_status_change_v14_2.png
new file mode 100644
index 00000000000..056e051363d
--- /dev/null
+++ b/doc/user/application_security/vulnerability_report/img/project_security_dashboard_status_change_v14_2.png
Binary files differ
diff --git a/doc/user/application_security/vulnerability_report/index.md b/doc/user/application_security/vulnerability_report/index.md
index da59c0fbe79..c2c2e7459ba 100644
--- a/doc/user/application_security/vulnerability_report/index.md
+++ b/doc/user/application_security/vulnerability_report/index.md
@@ -16,7 +16,7 @@ At all levels, the Vulnerability Report contains:
- Filters for common vulnerability attributes.
- Details of each vulnerability, presented in tabular layout.
-![Vulnerability Report](img/group_vulnerability_report_v13_9.png)
+![Vulnerability Report](img/group_vulnerability_report_v14_2.png)
## Project-level Vulnerability Report
@@ -49,7 +49,7 @@ You can filter the vulnerabilities table by:
|:---------|:------------------|
| Status | Detected, Confirmed, Dismissed, Resolved. |
| Severity | Critical, High, Medium, Low, Info, Unknown. |
-| Scanner | For more details, see [Scanner filter](#scanner-filter). |
+| Tool | For more details, see [Tool filter](#tool-filter). |
| Project | For more details, see [Project filter](#project-filter). |
| Activity | For more details, see [Activity filter](#activity-filter). |
@@ -70,17 +70,17 @@ The filters' criteria are combined to show only vulnerabilities matching all cri
An exception to this behavior is the Activity filter. For more details about how it works, see
[Activity filter](#activity-filter).
-## Scanner filter
+## Tool filter
-The scanner filter allows you to focus on vulnerabilities detected by selected scanners.
+The tool filter allows you to focus on vulnerabilities detected by selected tools.
-When using the scanner filter, you can choose:
+When using the tool filter, you can choose:
-- **All scanners** (default).
-- Individual GitLab-provided scanners.
-- Any integrated 3rd-party scanner. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/229661) in GitLab 13.12.
+- **All tools** (default).
+- Individual GitLab-provided tools.
+- Any integrated 3rd-party tool. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/229661) in GitLab 13.12.
-For details of each of the available scanners, see [Security scanning tools](../index.md#security-scanning-tools).
+For details of each of the available tools, see [Security scanning tools](../index.md#security-scanning-tools).
### Project filter
@@ -143,7 +143,7 @@ To change the status of vulnerabilities in the table:
1. Select the checkbox for each vulnerability you want to update the status of.
1. In the dropdown that appears select the desired status, then select **Change status**.
-![Project Vulnerability Report](img/project_security_dashboard_status_change_v13_10.png)
+![Project Vulnerability Report](img/project_security_dashboard_status_change_v14_2.png)
## Export vulnerability details
diff --git a/doc/user/clusters/agent/ci_cd_tunnel.md b/doc/user/clusters/agent/ci_cd_tunnel.md
index 1f794bac37f..09123fdd472 100644
--- a/doc/user/clusters/agent/ci_cd_tunnel.md
+++ b/doc/user/clusters/agent/ci_cd_tunnel.md
@@ -6,7 +6,8 @@ info: To determine the technical writer assigned to the Stage/Group associated w
# CI/CD Tunnel
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/327409) in GitLab 14.1.
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/327409) in GitLab 14.1.
+> - Pre-configured `KUBECONFIG` [added](https://gitlab.com/gitlab-org/gitlab/-/issues/324275) in GitLab 14.2.
The CI/CD Tunnel enables users to access Kubernetes clusters from GitLab CI/CD jobs even if there is no network
connectivity between GitLab Runner and a cluster. GitLab Runner does not have to be running in the same cluster.
@@ -21,47 +22,22 @@ Prerequisites:
- An [Agent record](index.md#create-an-agent-record-in-gitlab).
- The agent is [installed in the cluster](index.md#install-the-agent-into-the-cluster).
-To access your cluster from a CI/CD job through the tunnel:
+If your project has one or more Agent records, a `KUBECONFIG` variable that is compatible with `kubectl` is provided to your CI/CD jobs. A separate context (`kubecontext`) is available for each configured Agent. By default, no context is selected.
-1. In your `.gitlab-ci.yml` add a section that creates a `kubectl` compatible configuration file (`kubecontext`) and use it in one
- or more jobs:
+Contexts are named in the following format: `<agent-configuration-project-path>:<agent-name>`.
- ```yaml
- variables:
- AGENT_ID: 4 # agent id that you got when you created the agent record
- KUBE_CFG_FILE: "$CI_PROJECT_DIR/.kubeconfig.agent.yaml"
+To access your cluster from a CI/CD job through the tunnel:
- .kubectl_config: &kubectl_config
- - |
- cat << EOF > "$KUBE_CFG_FILE"
- apiVersion: v1
- kind: Config
- clusters:
- - name: agent
- cluster:
- server: https://kas.gitlab.com/k8s-proxy/
- users:
- - name: agent
- user:
- token: "ci:$AGENT_ID:$CI_JOB_TOKEN"
- contexts:
- - name: agent
- context:
- cluster: agent
- user: agent
- current-context: agent
- EOF
+1. In your `.gitlab-ci.yml` select the context for the agent you wish to use:
+ ```yaml
deploy:
image:
name: bitnami/kubectl:latest
entrypoint: [""]
script:
- - *kubectl_config
- - kubectl --kubeconfig="$KUBE_CFG_FILE" get pods
+ - kubectl config use-context path/to/agent-configuration-project:your-agent-name
+ - kubectl get pods
```
1. Execute `kubectl` commands directly against your cluster with this CI/CD job you just created.
-
-We are working on [creating the configuration file automatically](https://gitlab.com/gitlab-org/gitlab/-/issues/324275)
-to simplify the process.
diff --git a/doc/user/clusters/agent/index.md b/doc/user/clusters/agent/index.md
index 83933524fd4..c59d2a1f61c 100644
--- a/doc/user/clusters/agent/index.md
+++ b/doc/user/clusters/agent/index.md
@@ -140,46 +140,25 @@ All the options for the [Kubernetes Agent configuration repository](repository.m
### Create an Agent record in GitLab
+> [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/5786) in GitLab 14.1, you can create a new Agent record directly from the GitLab UI.
+
Next, create a GitLab Rails Agent record to associate it with
the configuration repository project. Creating this record also creates a Secret needed to configure
-the Agent in subsequent steps. You can create an Agent record with GraphQL:
-
- ```graphql
- mutation createAgent {
- # agent-name should be the same as specified above in the config.yaml
- createClusterAgent(input: { projectPath: "path-to/your-configuration-project", name: "<agent-name>" }) {
- clusterAgent {
- id
- name
- }
- errors
- }
- }
-
- mutation createToken {
- clusterAgentTokenCreate(
- input: {
- clusterAgentId: "<cluster-agent-id-taken-from-the-previous-mutation>"
- description: "<optional-description-of-token>"
- name: "<required-name-given-to-token>"
- }
- ) {
- secret # This is the value you need to use on the next step
- token {
- createdAt
- id
- }
- errors
- }
- }
- ```
+the Agent in subsequent steps.
-WARNING:
-GraphQL only displays the token and ids **one time** after creating it. Make sure to write down the `secret`, `clusterAgentId`, and `clusterAgentTokenId`; you'll need them later.
+In GitLab:
+
+1. From your project's sidebar, select **Infrastructure > Kubernetes clusters**.
+1. Select the **GitLab Agent managed clusters** tab.
+1. Select **Integrate with the GitLab Agent**.
+1. From the **Select an Agent** dropdown menu, select the Agent you want to connect and select **Next** to access the installation form.
+1. The form reveals your registration token. Securely store this secret token as you cannot view it again.
+1. Copy the command under **Recommended installation method**.
+
+In your computer:
- If you are new to using the GitLab GraphQL API, refer to the
- [Getting started with the GraphQL API page](../../../api/graphql/getting_started.md),
- or the [GraphQL Explorer](https://gitlab.com/-/graphql-explorer).
+1. Open your local terminal and connect to your cluster.
+1. Run the command you copied from the installation form.
### Install the Agent into the cluster
@@ -192,7 +171,7 @@ kubectl create namespace gitlab-kubernetes-agent
To perform a one-liner installation, run the command below. Make sure to replace:
-- `your-agent-token` with the token received from the previous step.
+- `your-agent-token` with the token received from the previous step (identified as `secret` in the JSON output).
- `gitlab-kubernetes-agent` with the namespace you defined in the previous step.
- `wss://kas.gitlab.example.com` with the configured access of the Kubernetes Agent Server (KAS). For GitLab.com users, the KAS is available under `wss://kas.gitlab.com`.
diff --git a/doc/user/clusters/img/jupyter-git-extension.gif b/doc/user/clusters/img/jupyter-git-extension.gif
deleted file mode 100644
index 14dc567af2a..00000000000
--- a/doc/user/clusters/img/jupyter-git-extension.gif
+++ /dev/null
Binary files differ
diff --git a/doc/user/clusters/img/jupyter-gitclone.png b/doc/user/clusters/img/jupyter-gitclone.png
deleted file mode 100644
index aff194dea43..00000000000
--- a/doc/user/clusters/img/jupyter-gitclone.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/clusters/img/threat_monitoring_v12_9.png b/doc/user/clusters/img/threat_monitoring_v12_9.png
deleted file mode 100644
index 9097f9334a8..00000000000
--- a/doc/user/clusters/img/threat_monitoring_v12_9.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/clusters/integrations.md b/doc/user/clusters/integrations.md
index d2861ce2946..5e6843144fc 100644
--- a/doc/user/clusters/integrations.md
+++ b/doc/user/clusters/integrations.md
@@ -22,8 +22,8 @@ Although, the [Cluster management project template](management_project_template.
requires that you manually do the last steps of these sections,
[Enable Prometheus integration for your cluster](#enable-prometheus-integration-for-your-cluster)
or [Enable Elastic Stack integration for your cluster](#enable-elastic-stack-integration-for-your-cluster)
-depending on which application you are installing. We plan to also automate this step in the future,
-see the [opened issue](https://gitlab.com/gitlab-org/gitlab/-/issues/326565).
+depending on which application you are installing. [An issue exists](https://gitlab.com/gitlab-org/gitlab/-/issues/326565)
+to automate this step.
## Prometheus cluster integration
diff --git a/doc/user/clusters/management_project_template.md b/doc/user/clusters/management_project_template.md
index eb86c1702cc..1de17396bf4 100644
--- a/doc/user/clusters/management_project_template.md
+++ b/doc/user/clusters/management_project_template.md
@@ -53,13 +53,13 @@ project. This image consists of a set of Bash utility scripts to support [Helm v
This file has a list of paths to other Helmfiles for each app. They're all commented out by default, so you must uncomment
the paths for the apps that you would like to manage.
-By default, each `helmfile.yaml` in these sub-paths will have the attribute `installed: true`, which signifies that everytime
-the pipeline runs, Helmfile will try to either install or update your apps according to the current state of your
-cluster and Helm releases. If you change this attribute to `installed: false`, Helmfile will try to uninstall this app
+By default, each `helmfile.yaml` in these sub-paths have the attribute `installed: true`. This signifies that every time
+the pipeline runs, Helmfile tries to either install or update your apps according to the current state of your
+cluster and Helm releases. If you change this attribute to `installed: false`, Helmfile tries try to uninstall this app
from your cluster. [Read more](https://github.com/roboll/helmfile) about how Helmfile works.
Furthermore, each app has an `applications/{app}/values.yaml` file. This is the
-place where you can define some default values for your app's Helm chart. Some apps will already have defaults
+place where you can define some default values for your app's Helm chart. Some apps already have defaults
pre-defined by GitLab.
#### Built-in applications
@@ -68,19 +68,19 @@ The built-in applications are intended to provide an easy way to get started wit
The [built-in supported applications](https://gitlab.com/gitlab-org/project-templates/cluster-management/-/tree/master/applications) are:
-- Apparmor
-- Cert-manager
-- Cilium
-- Elastic Stack
-- Falco
-- Fluentd
-- GitLab Runner
-- Ingress
-- Prometheus
-- Sentry
-- Vault
-
-### Migrating from GitLab Managed Apps
+- [Apparmor](../infrastructure/clusters/manage/management_project_applications/apparmor.md)
+- [Cert-manager](../infrastructure/clusters/manage/management_project_applications/certmanager.md)
+- [Cilium](../infrastructure/clusters/manage/management_project_applications/cilium.md)
+- [Elastic Stack](../infrastructure/clusters/manage/management_project_applications/elasticstack.md)
+- [Falco](../infrastructure/clusters/manage/management_project_applications/falco.md)
+- [Fluentd](../infrastructure/clusters/manage/management_project_applications/fluentd.md)
+- [GitLab Runner](../infrastructure/clusters/manage/management_project_applications/runner.md)
+- [Ingress](../infrastructure/clusters/manage/management_project_applications/ingress.md)
+- [Prometheus](../infrastructure/clusters/manage/management_project_applications/prometheus.md)
+- [Sentry](../infrastructure/clusters/manage/management_project_applications/sentry.md)
+- [Vault](../infrastructure/clusters/manage/management_project_applications/vault.md)
+
+### Migrate from GitLab Managed Apps
If you had GitLab Managed Apps, either One-Click or CI/CD install, read the docs on how to
[migrate from GitLab Managed Apps to project template](migrating_from_gma_to_project_template.md)
diff --git a/doc/user/compliance/compliance_dashboard/img/compliance_dashboard_v13_11.png b/doc/user/compliance/compliance_dashboard/img/compliance_dashboard_v13_11.png
deleted file mode 100644
index 73a5c92670a..00000000000
--- a/doc/user/compliance/compliance_dashboard/img/compliance_dashboard_v13_11.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/compliance/compliance_dashboard/index.md b/doc/user/compliance/compliance_dashboard/index.md
index fb6b3fe2cf6..e7f6f908860 100644
--- a/doc/user/compliance/compliance_dashboard/index.md
+++ b/doc/user/compliance/compliance_dashboard/index.md
@@ -1,102 +1,9 @@
---
-type: reference, howto
-stage: Manage
-group: Compliance
-info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+redirect_to: '../compliance_report/index.md'
+remove_date: '2021-10-23'
---
-# Compliance Dashboard **(ULTIMATE)**
+This file was moved to [another location](../compliance_report/index.md).
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/36524) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 12.8.
-
-The Compliance Dashboard gives you the ability to see a group's merge request activity
-by providing a high-level view for all projects in the group. For example, code approved
-for merging into production.
-
-## Overview
-
-To access the Compliance Dashboard for a group, navigate to **{shield}** **Security & Compliance > Compliance** on the group's menu.
-
-![Compliance Dashboard](img/compliance_dashboard_v13_11.png)
-
-NOTE:
-The Compliance Dashboard shows only the latest MR on each project.
-
-## Merge request drawer
-
-> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/299357) in GitLab 14.1.
-
-When you click on a row, a drawer is shown that provides further details about the merge
-request:
-
-- Project name and [compliance framework label](../../project/settings/index.md#compliance-frameworks),
- if the project has one assigned.
-- Link to the merge request.
-- The merge request's branch path in the format `[source] into [target]`.
-- A list of users that committed changes to the merge request.
-- A list of users that commented on the merge request.
-- A list of users that approved the merge request.
-- The user that merged the merge request.
-
-## Use cases
-
-This feature is for people who care about the compliance status of projects within their group.
-
-You can use the dashboard to:
-
-- Get an overview of the latest merge request for each project.
-- See if merge requests were approved and by whom.
-- See merge request authors.
-- See the latest [CI Pipeline](../../../ci/pipelines/index.md) result for each merge request.
-
-## Permissions
-
-- On [GitLab Ultimate](https://about.gitlab.com/pricing/) tier.
-- By **Administrators** and **Group Owners**.
-
-## Approval status and separation of duties
-
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/217939) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 13.3.
-
-We support a separation of duties policy between users who create and approve merge requests.
-The approval status column can help you identify violations of this policy.
-Our criteria for the separation of duties is as follows:
-
-- [A merge request author is **not** allowed to approve their merge request](../../project/merge_requests/approvals/settings.md#prevent-authors-from-approving-their-own-work)
-- [A merge request committer is **not** allowed to approve a merge request they have added commits to](../../project/merge_requests/approvals/settings.md#prevent-committers-from-approving-their-own-work)
-- [The minimum number of approvals required to merge a merge request is **at least** two](../../project/merge_requests/approvals/rules.md)
-
-The "Approval status" column shows you, at a glance, whether a merge request is complying with the above.
-This column has four states:
-
-| State | Description |
-|:------|:------------|
-| Empty | The merge request approval status is unknown |
-| ![Failed](img/failed_icon_v13_3.png) | The merge request **does not** comply with any of the above criteria |
-| ![Warning](img/warning_icon_v13_3.png) | The merge request complies with **some** of the above criteria |
-| ![Success](img/success_icon_v13_3.png) | The merge request complies with **all** of the above criteria |
-
-If you do not see the success icon in your Compliance dashboard; please review the above criteria for the merge requests
-project to make sure it complies with the separation of duties described above.
-
-## Chain of Custody report **(ULTIMATE)**
-
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/213364) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 13.3.
-
-The Chain of Custody report allows customers to export a list of merge commits within the group.
-The data provides a comprehensive view with respect to merge commits. It includes the merge commit SHA,
-merge request author, merge request ID, merge user, pipeline ID, group name, project name, and merge request approvers.
-Depending on the merge strategy, the merge commit SHA can either be a merge commit, squash commit or a diff head commit.
-
-To download the Chain of Custody report, navigate to **{shield}** **Security & Compliance > Compliance** on the group's menu and click **List of all merge commits**
-
-### Commit-specific Chain of Custody Report **(ULTIMATE)**
-
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/267629) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 13.6.
-
-You can generate a commit-specific Chain of Custody report for a given commit SHA. To do so, select
-the dropdown next to the **List of all merge commits** button at the top of the Compliance Dashboard.
-
-NOTE:
-The Chain of Custody report download is a CSV file, with a maximum size of 15 MB.
-The remaining records are truncated when this limit is reached.
+<!-- This redirect file can be deleted after <2021-10-23>. -->
+<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/user/compliance/compliance_dashboard/img/failed_icon_v13_3.png b/doc/user/compliance/compliance_report/img/failed_icon_v13_3.png
index c3f386c9dee..c3f386c9dee 100644
--- a/doc/user/compliance/compliance_dashboard/img/failed_icon_v13_3.png
+++ b/doc/user/compliance/compliance_report/img/failed_icon_v13_3.png
Binary files differ
diff --git a/doc/user/compliance/compliance_dashboard/img/success_icon_v13_3.png b/doc/user/compliance/compliance_report/img/success_icon_v13_3.png
index ea6ca924f81..ea6ca924f81 100644
--- a/doc/user/compliance/compliance_dashboard/img/success_icon_v13_3.png
+++ b/doc/user/compliance/compliance_report/img/success_icon_v13_3.png
Binary files differ
diff --git a/doc/user/compliance/compliance_dashboard/img/warning_icon_v13_3.png b/doc/user/compliance/compliance_report/img/warning_icon_v13_3.png
index 168a7021948..168a7021948 100644
--- a/doc/user/compliance/compliance_dashboard/img/warning_icon_v13_3.png
+++ b/doc/user/compliance/compliance_report/img/warning_icon_v13_3.png
Binary files differ
diff --git a/doc/user/compliance/compliance_report/index.md b/doc/user/compliance/compliance_report/index.md
new file mode 100644
index 00000000000..c51636e33f5
--- /dev/null
+++ b/doc/user/compliance/compliance_report/index.md
@@ -0,0 +1,99 @@
+---
+type: reference, howto
+stage: Manage
+group: Compliance
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# Compliance report **(ULTIMATE)**
+
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/36524) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 12.8 as Compliance Dashboard.
+> - [Renamed](https://gitlab.com/gitlab-org/gitlab/-/issues/299360) to compliance report in GitLab 14.2.
+
+Compliance report gives you the ability to see a group's merge request activity. It provides a
+high-level view for all projects in the group. For example, code approved for merging into
+production.
+
+To access compliance report for a group, go to **{shield}** **Security & Compliance > Compliance**
+on the group's menu.
+
+NOTE:
+Compliance report shows only the latest merge request on each project.
+
+## Merge request drawer
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/299357) in GitLab 14.1.
+
+When you click on a row, a drawer is shown that provides further details about the merge
+request:
+
+- Project name and [compliance framework label](../../project/settings/index.md#compliance-frameworks),
+ if the project has one assigned.
+- Link to the merge request.
+- The merge request's branch path in the format `[source] into [target]`.
+- A list of users that committed changes to the merge request.
+- A list of users that commented on the merge request.
+- A list of users that approved the merge request.
+- The user that merged the merge request.
+
+## Use cases
+
+This feature is for people who care about the compliance status of projects within their group.
+
+You can use the report to:
+
+- Get an overview of the latest merge request for each project.
+- See if merge requests were approved and by whom.
+- See merge request authors.
+- See the latest [CI Pipeline](../../../ci/pipelines/index.md) result for each merge request.
+
+## Permissions
+
+- On [GitLab Ultimate](https://about.gitlab.com/pricing/) tier.
+- By **Administrators** and **Group Owners**.
+
+## Approval status and separation of duties
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/217939) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 13.3.
+
+We support a separation of duties policy between users who create and approve merge requests.
+The approval status column can help you identify violations of this policy.
+Our criteria for the separation of duties is as follows:
+
+- [A merge request author is **not** allowed to approve their merge request](../../project/merge_requests/approvals/settings.md#prevent-approval-by-author)
+- [A merge request committer is **not** allowed to approve a merge request they have added commits to](../../project/merge_requests/approvals/settings.md#prevent-approvals-by-users-who-add-commits)
+- [The minimum number of approvals required to merge a merge request is **at least** two](../../project/merge_requests/approvals/rules.md)
+
+The **Approval status** column shows you at a glance whether a merge request is complying with the above.
+This column has four states:
+
+| State | Description |
+|:------|:------------|
+| Empty | The merge request approval status is unknown |
+| ![Failed](img/failed_icon_v13_3.png) | The merge request **does not** comply with any of the above criteria |
+| ![Warning](img/warning_icon_v13_3.png) | The merge request complies with **some** of the above criteria |
+| ![Success](img/success_icon_v13_3.png) | The merge request complies with **all** of the above criteria |
+
+If you see a non-success state, review the criteria for the merge request's project to ensure it complies with the separation of duties.
+
+## Chain of Custody report **(ULTIMATE)**
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/213364) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 13.3.
+
+The Chain of Custody report allows customers to export a list of merge commits within the group.
+The data provides a comprehensive view with respect to merge commits. It includes the merge commit SHA,
+merge request author, merge request ID, merge user, pipeline ID, group name, project name, and merge request approvers.
+Depending on the merge strategy, the merge commit SHA can be a merge commit, squash commit, or a diff head commit.
+
+To download the Chain of Custody report, navigate to **{shield}** **Security & Compliance > Compliance** on the group's menu and click **List of all merge commits**
+
+### Commit-specific Chain of Custody Report **(ULTIMATE)**
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/267629) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 13.6.
+
+You can generate a commit-specific Chain of Custody report for a given commit SHA. To do so, select
+the dropdown next to the **List of all merge commits** button at the top of the compliance report.
+
+NOTE:
+The Chain of Custody report download is a CSV file, with a maximum size of 15 MB.
+The remaining records are truncated when this limit is reached.
diff --git a/doc/user/compliance/index.md b/doc/user/compliance/index.md
index 69deefd08a7..61b65bf254f 100644
--- a/doc/user/compliance/index.md
+++ b/doc/user/compliance/index.md
@@ -10,7 +10,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
The compliance tools provided by GitLab let you keep an eye on various aspects of your project. The
following compliance tools are available:
-- [Compliance Dashboard](compliance_dashboard/index.md): View recent merge request activity across
+- [Compliance report](compliance_report/index.md): View recent merge request activity across
all projects in a group. This lets you see if merge requests were approved, and by whom.
- [License Compliance](license_compliance/index.md): Search your project's dependencies for their
licenses. This lets you determine if the licenses of your project's dependencies are compatible
diff --git a/doc/user/compliance/license_compliance/img/policies_maintainer_edit_v14_2.png b/doc/user/compliance/license_compliance/img/policies_maintainer_edit_v14_2.png
index c188c6cd834..2ad08919f86 100644
--- a/doc/user/compliance/license_compliance/img/policies_maintainer_edit_v14_2.png
+++ b/doc/user/compliance/license_compliance/img/policies_maintainer_edit_v14_2.png
Binary files differ
diff --git a/doc/user/compliance/license_compliance/index.md b/doc/user/compliance/license_compliance/index.md
index 1a43c5ae96f..e39a3f7111b 100644
--- a/doc/user/compliance/license_compliance/index.md
+++ b/doc/user/compliance/license_compliance/index.md
@@ -83,6 +83,9 @@ The reported licenses might be incomplete or inaccurate.
## Requirements
+WARNING:
+License Compliance Scanning does not support run-time installation of compilers and interpreters.
+
To run a License Compliance scanning job, you need GitLab Runner with the
[`docker` executor](https://docs.gitlab.com/runner/executors/docker.html).
diff --git a/doc/user/discussions/img/only_allow_merge_if_all_threads_are_resolved.png b/doc/user/discussions/img/only_allow_merge_if_all_threads_are_resolved.png
deleted file mode 100644
index bd0aaca79b2..00000000000
--- a/doc/user/discussions/img/only_allow_merge_if_all_threads_are_resolved.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/discussions/index.md b/doc/user/discussions/index.md
index 825f9be6ba6..a1d8863710c 100644
--- a/doc/user/discussions/index.md
+++ b/doc/user/discussions/index.md
@@ -138,6 +138,8 @@ who have at least the Reporter role.
![Confidential comments](img/confidential_comments_v13_9.png)
+You can also make an [entire issue confidential](../project/issues/confidential_issues.md).
+
## Show only comments
> - [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/26723) in GitLab 11.5.
diff --git a/doc/user/feature_flags.md b/doc/user/feature_flags.md
index e05fc582dc0..e288be87474 100644
--- a/doc/user/feature_flags.md
+++ b/doc/user/feature_flags.md
@@ -20,21 +20,13 @@ may be unavailable to you.
In this case, you'll see a warning like this in the feature documentation:
This in-development feature might not be available for your use. There can be
-[risks when enabling features still in development](#risks-when-enabling-features-still-in-development).
+[risks when enabling features still in development](../administration/feature_flags.md#risks-when-enabling-features-still-in-development).
Refer to this feature's version history for more details.
In the version history note, you'll find information on the state of the
feature flag, including whether the feature is on ("enabled by default") or
off ("disabled by default") for self-managed GitLab instances and for users of
-GitLab.com. To see the full notes:
-
-1. Click the three-dots icon (ellipsis) to expand version history notes:
-
- ![Version history note with FF information](img/version_history_notes_collapsed_v13_2.png)
-
-1. Read the version history information:
-
- ![Version history note with FF information](img/feature_flags_history_note_info_v13_2.png)
+GitLab.com.
If you're a user of a GitLab self-managed instance and you want to try to use a
disabled feature, you can ask a [GitLab administrator to enable it](../administration/feature_flags.md),
@@ -42,17 +34,3 @@ although changing a feature's default state isn't recommended.
If you're a GitLab.com user and the feature is disabled, be aware that GitLab may
be working on the feature for potential release in the future.
-
-## Risks when enabling features still in development
-
-Features that are disabled by default may change or be removed without notice in a future version of GitLab.
-
-Data corruption, stability degradation, or performance degradation might occur if
-you enable a feature that's disabled by default. Problems caused by using a default
-disabled feature aren't covered by GitLab support, unless you were directed by GitLab
-to enable the feature.
-
-## Risks when disabling released features
-
-In most cases, the feature flag code is removed in a future version of GitLab.
-If and when that occurs, from that point onward you can't keep the feature in a disabled state.
diff --git a/doc/user/gitlab_com/index.md b/doc/user/gitlab_com/index.md
index ef458db67f0..024ab86a1b7 100644
--- a/doc/user/gitlab_com/index.md
+++ b/doc/user/gitlab_com/index.md
@@ -67,6 +67,13 @@ Similarly, you can clone a project's wiki to back it up. All files
[uploaded after August 22, 2020](../project/wiki/index.md#create-a-new-wiki-page)
are included when cloning.
+## Delayed project deletion **(PREMIUM SAAS)**
+
+Top-level groups created after August 12, 2021 have delayed project deletion enabled by default.
+Projects are permanently deleted after a seven-day delay.
+
+You can disable this by changing the [group setting](../group/index.md#enable-delayed-project-removal).
+
## Alternative SSH port
GitLab.com can be reached by using a [different SSH port](https://about.gitlab.com/blog/2016/02/18/gitlab-dot-com-now-supports-an-alternate-git-plus-ssh-port/) for `git+ssh`.
@@ -148,7 +155,7 @@ from those IPs and allow them.
GitLab.com is fronted by Cloudflare. For incoming connections to GitLab.com, you might need to allow CIDR blocks of Cloudflare ([IPv4](https://www.cloudflare.com/ips-v4) and [IPv6](https://www.cloudflare.com/ips-v6)).
For outgoing connections from CI/CD runners, we are not providing static IP
-addresses. All GitLab runners are deployed into Google Cloud Platform (GCP). Any
+addresses. All GitLab.com shared runners are deployed into Google Cloud Platform (GCP). Any
IP-based firewall can be configured by looking up all
[IP address ranges or CIDR blocks for GCP](https://cloud.google.com/compute/docs/faq#find_ip_range).
@@ -177,11 +184,11 @@ The following limits apply for [Webhooks](../project/integrations/webhooks.md):
| [Number of webhooks](../../administration/instance_limits.md#number-of-webhooks) | `100` per project, `50` per group | `100` per project, `50` per group |
| Maximum payload size | 25 MB | 25 MB |
-## Shared runners
+## Shared Build Cloud runners
GitLab has shared runners on GitLab.com that you can use to run your CI jobs.
-For more information, see [choosing a runner](../../ci/runners/index.md).
+For more information, see [GitLab Build Cloud runners](../../ci/runners/index.md).
## Sidekiq
diff --git a/doc/user/group/bulk_editing/index.md b/doc/user/group/bulk_editing/index.md
deleted file mode 100644
index feceafd0991..00000000000
--- a/doc/user/group/bulk_editing/index.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: '../../../user/group/index.md'
-remove_date: '2021-08-13'
----
-
-This document was moved to [another location](../../../user/group/index.md).
-
-<!-- This redirect file can be deleted after <2021-08-13>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/user/group/contribution_analytics/index.md b/doc/user/group/contribution_analytics/index.md
index 670ecc48370..a2d7f358cd9 100644
--- a/doc/user/group/contribution_analytics/index.md
+++ b/doc/user/group/contribution_analytics/index.md
@@ -55,6 +55,7 @@ Contributions per group member are also presented in tabular format. Click a col
- Number of closed issues
- Number of opened MRs
- Number of merged MRs
+- Number of closed MRs
- Number of total contributions
![Contribution analytics contributions table](img/group_stats_table.png)
diff --git a/doc/user/group/devops_adoption/img/group_devops_adoption_v14_1.png b/doc/user/group/devops_adoption/img/group_devops_adoption_v14_1.png
deleted file mode 100644
index a790a560a9b..00000000000
--- a/doc/user/group/devops_adoption/img/group_devops_adoption_v14_1.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/group/devops_adoption/img/group_devops_adoption_v14_2.png b/doc/user/group/devops_adoption/img/group_devops_adoption_v14_2.png
new file mode 100644
index 00000000000..073e747153f
--- /dev/null
+++ b/doc/user/group/devops_adoption/img/group_devops_adoption_v14_2.png
Binary files differ
diff --git a/doc/user/group/devops_adoption/index.md b/doc/user/group/devops_adoption/index.md
index 4332f261481..5c84a343da9 100644
--- a/doc/user/group/devops_adoption/index.md
+++ b/doc/user/group/devops_adoption/index.md
@@ -10,6 +10,9 @@ info: To determine the technical writer assigned to the Stage/Group associated w
> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/333556) in GitLab 14.1.
> - The Overview tab [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/330401) in GitLab 14.1.
> - DAST and SAST metrics [added](https://gitlab.com/gitlab-org/gitlab/-/issues/328033) in GitLab 14.1.
+> - Fuzz Testing metrics [added](https://gitlab.com/gitlab-org/gitlab/-/issues/330398) in GitLab 14.2.
+> - Dependency Scanning metrics [added](https://gitlab.com/gitlab-org/gitlab/-/issues/328034) in GitLab 14.2.
+> - Multiselect [added](https://gitlab.com/gitlab-org/gitlab/-/issues/333586) in GitLab 14.2.
Prerequisites:
@@ -17,7 +20,7 @@ Prerequisites:
To access Group DevOps Adoption, go to your group and select **Analytics > DevOps Adoption**.
-Group DevOps Adoption shows you how individual groups and sub-groups within your organization use the following features:
+Group DevOps Adoption shows you how individual groups and subgroups within your organization use the following features:
- Dev
- Approvals
@@ -26,22 +29,27 @@ Group DevOps Adoption shows you how individual groups and sub-groups within your
- Merge requests
- Sec
- DAST
+ - Dependency Scanning
+ - Fuzz Testing
- SAST
- Ops
- Deployments
- Pipelines
- Runners
-When managing groups in the UI, you can add your sub-groups with the **Add sub-group to table**
+When managing groups in the UI, you can add or remove your subgroups with the **Add or remove subgroups**
button, in the top right hand section of your Groups pages.
With DevOps Adoption you can:
- Verify whether you are getting the return on investment that you expected from GitLab.
-- Identify specific sub-groups that are lagging in their adoption of GitLab so you can help them along in their DevOps journey.
-- Find the sub-groups that have adopted certain features and can provide guidance to other sub-groups on how to use those features.
+- Identify specific subgroups that are lagging in their adoption of GitLab, so you can help them along in their DevOps journey.
+- Find the subgroups that have adopted certain features, and can provide guidance to other subgroups on how to use those features.
-![DevOps Report](img/group_devops_adoption_v14_1.png)
+![DevOps Report](img/group_devops_adoption_v14_2.png)
+
+Feature adoption is based on usage in the previous calendar month. Data is updated on the first day
+of each month. If the monthly update fails, it tries again daily until successful.
## Enable data processing
@@ -55,10 +63,10 @@ GitLab requires around a minute to process it.
## What is displayed
DevOps Adoption displays feature adoption data for the given group
-and any added sub-groups for the current calendar month.
+and any added subgroups for the current calendar month.
Each group appears as a separate row in the table.
For each row, a feature is considered "adopted" if it has been used in a project in the given group
-during the time period (including projects in any sub-groups of the given group).
+during the time period (including projects in any subgroups of the given group).
## When is a feature considered adopted
@@ -79,14 +87,14 @@ Following this guideline, GitLab doesn't penalize for:
over time, so we should not consider adoption to have decreased if GitLab adds features.
This means we should not measure adoption by percentages, only total counts.
-## Add a sub-group
+## Add a subgroup
-DevOps Adoption can also display data for sub-groups within the given group,
+DevOps Adoption can also display data for subgroups within the given group,
to show you differences in adoption across the group.
-To add a sub-group to your Group DevOps Adoption report:
+To add subgroups to your Group DevOps Adoption report:
-1. Select **Add/remove sub-groups**.
-1. Select the sub-group you want to add and select **Save changes**.
+1. Select **Add or remove subgroups**.
+1. Select the subgroups you want to add and select **Save changes**.
-The sub-group data might not appear immediately, because GitLab requires around a minute to collect
+The subgroup data might not appear immediately, because GitLab requires around a minute to collect
the data.
diff --git a/doc/user/group/epics/manage_epics.md b/doc/user/group/epics/manage_epics.md
index f6c3ea6c090..1b36d6f03df 100644
--- a/doc/user/group/epics/manage_epics.md
+++ b/doc/user/group/epics/manage_epics.md
@@ -40,9 +40,11 @@ The newly created epic opens.
If you select **Inherited**:
- For the **start date**: GitLab scans all child epics and issues assigned to the epic,
- and sets the start date to match the earliest found start date or milestone.
-- For the **due date**: GitLab sets the due date to match the latest due date or
- milestone found among its child epics and issues.
+ and sets the start date to match the earliest start date found in the child epics or the milestone
+ assigned to the issues.
+- For the **due date**: GitLab scans all child epics and issues assigned to the epic,
+ and sets the due date to match the latest due date found in the child epics or the milestone
+ assigned to the issues.
These are dynamic dates and recalculated if any of the following occur:
@@ -191,7 +193,10 @@ or newest items to be shown first.
If you're working on items that contain private information, you can make an epic confidential.
NOTE:
-A confidential epic can only contain confidential issues and confidential child epics.
+A confidential epic can only contain [confidential issues](../../project/issues/confidential_issues.md)
+and confidential child epics. However, merge requests are public, if created in a public project.
+Read [Merge requests for confidential issues](../../project/merge_requests/confidential.md)
+to learn how to create a confidential merge request.
To make an epic confidential:
diff --git a/doc/user/group/import/index.md b/doc/user/group/import/index.md
index d76685f992b..721afa219d0 100644
--- a/doc/user/group/import/index.md
+++ b/doc/user/group/import/index.md
@@ -11,8 +11,9 @@ info: To determine the technical writer assigned to the Stage/Group associated w
> - [Deployed behind a feature flag](../../feature_flags.md), disabled by default.
> - Enabled on GitLab.com.
-WARNING:
-This feature is [under construction](https://gitlab.com/groups/gitlab-org/-/epics/2771), and migrates only some of the group data. Refer to the following information for the list of what's included in the migration.
+NOTE:
+The importer migrates **only** the group data listed on this page. To leave feedback on this
+feature, see [this issue](https://gitlab.com/gitlab-org/gitlab/-/issues/284495).
Using GitLab Group Migration, you can migrate existing top-level groups from GitLab.com or a self-managed instance. Groups can be migrated to a target instance, as a top-level group, or as a subgroup of any existing top-level group.
@@ -34,7 +35,6 @@ The following resources are migrated to the target instance:
- The user already exists in the target GitLab instance and
- The user has a public email in the source GitLab instance that matches a
confirmed email in the target GitLab instance
- confirmed email in the target GitLab instance
- Epics ([Introduced in 13.7](https://gitlab.com/gitlab-org/gitlab/-/issues/250281))
- title
- description
@@ -77,8 +77,7 @@ Any other items are **not** migrated.
## Enable or disable GitLab Group Migration
-Support for GitLab Group Migration is under development and not ready for production use. It is
-deployed behind a feature flag that is **disabled by default**.
+GitLab Migration is deployed behind a feature flag that is **disabled by default**.
[GitLab administrators with access to the GitLab Rails console](../../../administration/feature_flags.md) can enable it.
To enable it:
diff --git a/doc/user/group/index.md b/doc/user/group/index.md
index 787461f9d96..948f9cab659 100644
--- a/doc/user/group/index.md
+++ b/doc/user/group/index.md
@@ -37,7 +37,7 @@ Like projects, a group can be configured to limit the visibility of it to:
- All signed-in users.
- Only explicit group members.
-The restriction for [visibility levels](../admin_area/settings/visibility_and_access_controls.md#restricted-visibility-levels)
+The restriction for [visibility levels](../admin_area/settings/visibility_and_access_controls.md#restrict-visibility-levels)
on the application setting level also applies to groups. If set to internal, the explore page is
empty for anonymous users. The group page has a visibility level icon.
@@ -220,10 +220,10 @@ To change this setting for a specific group:
1. Select the desired option in the **Default branch protection** dropdown list.
1. Click **Save changes**.
-To change this setting globally, see [Default branch protection](../admin_area/settings/visibility_and_access_controls.md#default-branch-protection).
+To change this setting globally, see [Default branch protection](../admin_area/settings/visibility_and_access_controls.md#protect-default-branches).
NOTE:
-In [GitLab Premium or higher](https://about.gitlab.com/pricing/), GitLab administrators can choose to [disable group owners from updating the default branch protection](../admin_area/settings/visibility_and_access_controls.md#disable-group-owners-from-updating-default-branch-protection).
+In [GitLab Premium or higher](https://about.gitlab.com/pricing/), GitLab administrators can choose to [disable group owners from updating the default branch protection](../admin_area/settings/visibility_and_access_controls.md#prevent-overrides-of-default-branch-protection).
## Add projects to a group
@@ -248,7 +248,7 @@ To change this setting for a specific group:
1. Select the desired option in the **Allowed to create projects** dropdown list.
1. Click **Save changes**.
-To change this setting globally, see [Default project creation protection](../admin_area/settings/visibility_and_access_controls.md#default-project-creation-protection).
+To change this setting globally, see [Default project creation protection](../admin_area/settings/visibility_and_access_controls.md#define-which-roles-can-create-projects).
## Group activity analytics **(PREMIUM)**
@@ -430,6 +430,28 @@ Specifically:
- In [GitLab 13.6 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/39504), if the user who sets up the deletion is removed from the group before the
deletion happens, the job is cancelled, and the group is no longer scheduled for deletion.
+## Remove a group immediately **(PREMIUM)**
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/336985) in GitLab 14.2.
+
+If you don't want to wait, you can remove a group immediately.
+
+Prerequisites:
+
+- You must have at least the Owner role for a group.
+- You have [marked the group for deletion](#remove-a-group).
+
+To immediately remove a group marked for deletion:
+
+1. On the top bar, select **Menu > Groups** and find your group.
+1. On the left sidebar, select **Settings > General**.
+1. Expand **Advanced**.
+1. In the "Permanently remove group" section, select **Remove group**.
+1. Confirm the action when asked to.
+
+Your group, its subgroups, projects, and all related resources, including issues and merge requests,
+are deleted.
+
## Restore a group **(PREMIUM)**
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/33257) in GitLab 12.8.
@@ -494,6 +516,19 @@ To prevent members from being added to a group:
All users who previously had permissions can no longer add members to a group.
API requests to add a new user to a project are not possible.
+## Export members as CSV **(PREMIUM)**
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/287940) in GitLab 14.2.
+
+FLAG:
+On self-managed GitLab, by default this feature is available. To hide the feature per group, ask an administrator to [disable the :ff_group_membership_export flag](../../administration/feature_flags.md). On GitLab.com, this feature is available.
+
+You can export a list of members in a group as a CSV.
+
+1. Go to your project and select **Project information > Members**.
+1. Select **Export as CSV**.
+1. Once the CSV file has been generated, it is emailed as an attachment to the user that requested it.
+
## Restrict group access by IP address **(PREMIUM)**
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/1985) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 12.0.
@@ -623,15 +658,24 @@ To disable group mentions:
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/220382) in GitLab 13.2.
> - [Inheritance and enforcement added](https://gitlab.com/gitlab-org/gitlab/-/issues/321724) in GitLab 13.11.
+> - [Instance setting to enable by default added](https://gitlab.com/gitlab-org/gitlab/-/issues/255449) in GitLab 14.2.
-By default, projects in a group are deleted immediately.
-Optionally, on [Premium](https://about.gitlab.com/pricing/) or higher tiers,
-you can configure the projects in a group to be deleted after a delayed interval.
+Projects can be configured to be deleted either:
+
+- Immediately.
+- After a delayed interval. During this interval period, the projects are in a read-only state
+ and can be restored, if required. The default interval period is seven days but
+ [is configurable](../admin_area/settings/visibility_and_access_controls.md#default-deletion-delay).
-During this interval period, the projects are in a read-only state and can be restored, if required.
-The interval period defaults to 7 days, and can be modified by an administrator in the [instance settings](../admin_area/settings/visibility_and_access_controls.md#default-deletion-delay).
+On:
-To enable delayed deletion of projects:
+- GitLab self-managed instances, projects are deleted immediately by default. In GitLab
+ 14.2 and later, an administrator can
+ [change the default setting](../admin_area/settings/visibility_and_access_controls.md#default-delayed-project-deletion) for projects in newly-created groups.
+- GitLab.com, see [GitLab.com settings page](../gitlab_com/index.md#delayed-project-deletion) for
+ the default setting.
+
+To enable delayed deletion of projects in a group:
1. Go to the group's **Settings > General** page.
1. Expand the **Permissions, LFS, 2FA** section.
@@ -650,17 +694,21 @@ By default, projects in a group can be forked.
Optionally, on [Premium](https://about.gitlab.com/pricing/) or higher tiers,
you can prevent the projects in a group from being forked outside of the current top-level group.
-Previously this setting was available only for groups enforcing group managed account. This setting will be
-removed from SAML setting page and migrated to group settings. In the interim period, both of these settings are taken into consideration.
-If even one is set to `true` then it will be assumed the group does not allow forking projects outside.
+Previously, this setting was available only for groups enforcing a
+[Group Managed Account](saml_sso/group_managed_accounts.md) in SAML.
+This setting will be removed from the SAML setting page, and migrated to the
+group settings page. In the interim period, both of these settings are taken into consideration.
+If even one is set to `true`, then the group does not allow outside forks.
-To enable prevent project forking:
+To prevent projects from being forked outside the group:
1. Go to the top-level group's **Settings > General** page.
1. Expand the **Permissions, LFS, 2FA** section.
1. Check **Prevent project forking outside current group**.
1. Select **Save changes**.
+Existing forks are not removed.
+
## Group push rules **(PREMIUM)**
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/34370) in GitLab 12.8.
@@ -704,6 +752,7 @@ The group's new subgroups have push rules set for them based on either:
- [Lock the sharing with group feature](#prevent-a-project-from-being-shared-with-groups).
- [Enforce two-factor authentication (2FA)](../../security/two_factor_authentication.md#enforcing-2fa-for-all-users-in-a-group): Enforce 2FA
for all group members.
+- Namespaces [API](../../api/namespaces.md) and [Rake tasks](../../raketasks/features.md)..
## Troubleshooting
diff --git a/doc/user/group/issues_analytics/index.md b/doc/user/group/issues_analytics/index.md
index 20b8e4b0583..9240828db0a 100644
--- a/doc/user/group/issues_analytics/index.md
+++ b/doc/user/group/issues_analytics/index.md
@@ -1,7 +1,7 @@
---
type: reference
-stage: Manage
-group: Optimize
+stage: Plan
+group: Project Management
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/user/group/iterations/index.md b/doc/user/group/iterations/index.md
index 5a435f32569..5c4e66a4539 100644
--- a/doc/user/group/iterations/index.md
+++ b/doc/user/group/iterations/index.md
@@ -41,7 +41,7 @@ In GitLab, iterations are similar to milestones, with a few differences:
> - To use in GitLab self-managed instances, ask a GitLab administrator to [enable it](#enable-or-disable-iteration-cadences). **(PREMIUM SELF)**
This in-development feature might not be available for your use. There can be
-[risks when enabling features still in development](../../feature_flags.md#risks-when-enabling-features-still-in-development).
+[risks when enabling features still in development](../../../administration/feature_flags.md#risks-when-enabling-features-still-in-development).
Refer to this feature's version history for more details.
Iteration cadences automate some common iteration tasks. They can be used to
diff --git a/doc/user/group/roadmap/index.md b/doc/user/group/roadmap/index.md
index 88d43715c58..811297c6eda 100644
--- a/doc/user/group/roadmap/index.md
+++ b/doc/user/group/roadmap/index.md
@@ -69,7 +69,7 @@ You can also filter epics in the Roadmap view by the epics':
- Author
- Label
- Milestone
-- Confidentiality
+- [Confidentiality](../epics/manage_epics.md#make-an-epic-confidential)
- Epic
- Your Reaction
diff --git a/doc/user/group/saml_sso/img/saml_group_links_v13_6.png b/doc/user/group/saml_sso/img/saml_group_links_v13_6.png
deleted file mode 100644
index c78b77b8fcf..00000000000
--- a/doc/user/group/saml_sso/img/saml_group_links_v13_6.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/group/saml_sso/index.md b/doc/user/group/saml_sso/index.md
index c3b57018154..a627f04fa46 100644
--- a/doc/user/group/saml_sso/index.md
+++ b/doc/user/group/saml_sso/index.md
@@ -91,7 +91,7 @@ After you set up your identity provider to work with GitLab, you must configure
![Group SAML Settings for GitLab.com](img/group_saml_settings_v13_12.png)
NOTE:
-Please note that the certificate [fingerprint algorithm](../../../integration/saml.md#notes-on-configuring-your-identity-provider) must be in SHA1. When configuring the identity provider, use a secure signature algorithm.
+The certificate [fingerprint algorithm](../../../integration/saml.md#notes-on-configuring-your-identity-provider) must be in SHA1. When configuring the identity provider, use a secure signature algorithm.
### SSO enforcement
@@ -117,6 +117,7 @@ SSO has the following effects when enabled:
even if the project is forked.
- For a Git activity, users must be signed-in through SSO before they can push to or
pull from a GitLab repository.
+- Users must be signed-in through SSO before they can pull images using the [Dependency Proxy](../../packages/dependency_proxy/index.md).
<!-- Add bullet for API activity when https://gitlab.com/gitlab-org/gitlab/-/issues/9152 is complete -->
## Providers
@@ -128,15 +129,15 @@ When [configuring your identity provider](#configuring-your-identity-provider),
For providers not listed below, you can refer to the [instance SAML notes on configuring an identity provider](../../../integration/saml.md#notes-on-configuring-your-identity-provider)
for additional guidance on information your identity provider may require.
-Please note that GitLab provides the following for guidance only.
+GitLab provides the following information for guidance only.
If you have any questions on configuring the SAML app, please contact your provider's support.
### Azure setup notes
-Please follow the Azure documentation on [configuring single sign-on to applications](https://docs.microsoft.com/en-us/azure/active-directory/manage-apps/view-applications-portal) with the notes below for consideration.
+Follow the Azure documentation on [configuring single sign-on to applications](https://docs.microsoft.com/en-us/azure/active-directory/manage-apps/view-applications-portal) with the notes below for consideration.
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i>
-For a demo of the Azure SAML setup including SCIM, see [SCIM Provisioning on Azure Using SAML SSO for Groups Demo](https://youtu.be/24-ZxmTeEBU). Please note that the video is outdated in regard to
+For a demo of the Azure SAML setup including SCIM, see [SCIM Provisioning on Azure Using SAML SSO for Groups Demo](https://youtu.be/24-ZxmTeEBU). The video is outdated in regard to
objectID mapping and the [SCIM documentation should be followed](scim_setup.md#azure-configuration-steps).
| GitLab Setting | Azure Field |
diff --git a/doc/user/group/saml_sso/scim_setup.md b/doc/user/group/saml_sso/scim_setup.md
index fd75c49fa6c..a0c281971fc 100644
--- a/doc/user/group/saml_sso/scim_setup.md
+++ b/doc/user/group/saml_sso/scim_setup.md
@@ -121,7 +121,7 @@ configuration. Otherwise, the Okta SCIM app may not work properly.
1. In the **Application** tab, click **Add Application**.
1. Search for **GitLab**, find and click on the 'GitLab' application.
1. On the GitLab application overview page, click **Add**.
-1. Under **Application Visibility** select both check boxes. Currently the GitLab application does not support SAML authentication so the icon should not be shown to users.
+1. Under **Application Visibility** select both checkboxes. Currently the GitLab application does not support SAML authentication so the icon should not be shown to users.
1. Click **Done** to finish adding the application.
1. In the **Provisioning** tab, click **Configure API integration**.
1. Select **Enable API integration**.
diff --git a/doc/user/group/settings/img/export_panel_v13_0.png b/doc/user/group/settings/img/export_panel_v13_0.png
deleted file mode 100644
index 36549e1f3f5..00000000000
--- a/doc/user/group/settings/img/export_panel_v13_0.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/group/settings/import_export.md b/doc/user/group/settings/import_export.md
index 5f732bee03f..a0930867b2a 100644
--- a/doc/user/group/settings/import_export.md
+++ b/doc/user/group/settings/import_export.md
@@ -19,9 +19,11 @@ See also:
- [Project Import/Export](../../project/settings/import_export.md)
- [Project Import/Export API](../../../api/project_import_export.md)
-To enable GitLab import/export:
+Users with the [Owner role](../../permissions.md) for a group can enable
+import and export for that group:
-1. On the top bar, go to **Menu > Admin > Settings > General > Visibility and access controls**.
+1. On the top bar, select **Menu >** **{admin}** **Admin**.
+1. On the left sidebar, select **Settings > General > Visibility and access controls**.
1. Scroll to **Import sources**.
1. Enable the desired **Import sources**.
@@ -48,7 +50,8 @@ The following items are exported:
- Subgroups (including all the aforementioned data)
- Epics
- Events
-- Wikis **(PREMIUM SELF)** (Introduced in [GitLab 13.9](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/53247))
+- [Wikis](../../project/wiki/index.md#group-wikis) **(PREMIUM SELF)**
+ (Introduced in [GitLab 13.9](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/53247))
The following items are **not** exported:
@@ -60,21 +63,21 @@ NOTE:
For more details on the specific data persisted in a group export, see the
[`import_export.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/import_export/group/import_export.yml) file.
-## Exporting a Group
+## Export a group
-1. Navigate to your group's homepage.
-
-1. Click **Settings** in the sidebar.
-
-1. In the **Advanced** section, click the **Export Group** button.
-
- ![Export group panel](img/export_panel_v13_0.png)
+Users with the [Owner role](../../permissions.md) for a group can export the
+contents of that group:
+1. On the top bar, select **Menu >** **Groups** and find your group.
+1. In the left sidebar, select **Settings**.
+1. Scroll to the **Advanced** section, and select **Export Group**.
1. After the export is generated, you should receive an email with a link to the [exported contents](#exported-contents)
in a compressed tar archive, with contents in NDJSON format.
+1. Alternatively, you can download the export from the UI:
-1. Alternatively, you can come back to the project settings and download the
- file from there by clicking **Download export**, or generate a new file by clicking **Regenerate export**.
+ 1. Return to your group's **Settings > General** page.
+ 1. Scroll to the **Advanced** section, and select **Download export**.
+ You can also generate a new file by clicking **Regenerate export**.
NOTE:
The maximum import file size can be set by the Administrator, default is `0` (unlimited).
@@ -103,7 +106,7 @@ on an existing group's page.
1. Click **Choose file**
-1. Select the file that you exported in the [exporting a group](#exporting-a-group) section.
+1. Select the file that you exported in the [Export a group](#export-a-group) section.
1. Click **Import group** to begin importing. Your newly imported group page appears after the operation completes.
@@ -138,4 +141,4 @@ To help avoid abuse, by default, users are rate limited to:
| Download export | 1 download per group per minute |
| Import | 6 groups per minute |
-Please note that GitLab.com may have [different settings](../../gitlab_com/index.md#importexport) from the defaults.
+GitLab.com may have [different settings](../../gitlab_com/index.md#importexport) from the defaults.
diff --git a/doc/user/group/value_stream_analytics/index.md b/doc/user/group/value_stream_analytics/index.md
index 773d41947e2..4d254279a3d 100644
--- a/doc/user/group/value_stream_analytics/index.md
+++ b/doc/user/group/value_stream_analytics/index.md
@@ -20,7 +20,12 @@ to uncover, triage, and identify the root cause of slowdowns in the software dev
For information on how to contribute to the development of Value Stream Analytics, see our [contributor documentation](../../../development/value_stream_analytics.md).
-Group-level Value Stream Analytics is available via **Group > Analytics > Value Stream**.
+To view group-level Value Stream Analytics:
+
+1. On the top bar, select **Menu > Groups** and find your group.
+1. On the left sidebar, select **Analytics > Value stream**.
+
+Value Stream Analytics at the group level includes data for the selected group and its subgroups.
[Project-level Value Stream Analytics](../../analytics/value_stream_analytics.md) is also available.
diff --git a/doc/user/img/feature_flags_history_note_info_v13_2.png b/doc/user/img/feature_flags_history_note_info_v13_2.png
deleted file mode 100644
index 07d096b6dde..00000000000
--- a/doc/user/img/feature_flags_history_note_info_v13_2.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/img/todos_index_v13_11.png b/doc/user/img/todos_index_v13_11.png
deleted file mode 100644
index eedb3045d39..00000000000
--- a/doc/user/img/todos_index_v13_11.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/img/todos_todo_list_item.png b/doc/user/img/todos_todo_list_item.png
deleted file mode 100644
index 91bbf9e5373..00000000000
--- a/doc/user/img/todos_todo_list_item.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/img/version_history_notes_collapsed_v13_2.png b/doc/user/img/version_history_notes_collapsed_v13_2.png
deleted file mode 100644
index b85c9cb36dd..00000000000
--- a/doc/user/img/version_history_notes_collapsed_v13_2.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/infrastructure/clusters/manage/management_project_applications/apparmor.md b/doc/user/infrastructure/clusters/manage/management_project_applications/apparmor.md
new file mode 100644
index 00000000000..7fbbbac866c
--- /dev/null
+++ b/doc/user/infrastructure/clusters/manage/management_project_applications/apparmor.md
@@ -0,0 +1,30 @@
+---
+stage: Protect
+group: Container Security
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# Install AppArmor with a cluster management project
+
+> [Introduced](https://gitlab.com/gitlab-org/project-templates/cluster-management/-/merge_requests/5) in GitLab 14.0.
+
+Assuming you already have a [Cluster management project](../../../../../user/clusters/management_project.md) created from a
+[management project template](../../../../../user/clusters/management_project_template.md), to install AppArmor you should
+uncomment this line from your `helmfile.yaml`:
+
+```yaml
+ - path: applications/apparmor/helmfile.yaml
+```
+
+You can define one or more AppArmor profiles by adding them into
+`applications/apparmor/values.yaml` as the following:
+
+```yaml
+profiles:
+ profile-one: |-
+ profile profile-one {
+ file,
+ }
+```
+
+Refer to the [AppArmor chart](https://gitlab.com/gitlab-org/charts/apparmor) for more information on this chart.
diff --git a/doc/user/infrastructure/clusters/manage/management_project_applications/certmanager.md b/doc/user/infrastructure/clusters/manage/management_project_applications/certmanager.md
new file mode 100644
index 00000000000..3bf79ea90c7
--- /dev/null
+++ b/doc/user/infrastructure/clusters/manage/management_project_applications/certmanager.md
@@ -0,0 +1,56 @@
+---
+stage: Configure
+group: Configure
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# Install cert-manager with a cluster management project
+
+> [Introduced](https://gitlab.com/gitlab-org/project-templates/cluster-management/-/merge_requests/5) in GitLab 14.0.
+
+Assuming you already have a [Cluster management project](../../../../../user/clusters/management_project.md) created from a
+[management project template](../../../../../user/clusters/management_project_template.md), to install cert-manager you should
+uncomment this line from your `helmfile.yaml`:
+
+```yaml
+ - path: applications/cert-manager/helmfile.yaml
+```
+
+cert-manager:
+
+- Is installed by default into the `gitlab-managed-apps` namespace of your cluster.
+- Can be installed with or without a default
+ [Let's Encrypt `ClusterIssuer`](https://cert-manager.io/docs/configuration/acme/), which requires an
+ email address to be specified. The email address is used by Let's Encrypt to
+ contact you about expiring certificates and issues related to your account.
+
+The following configuration in your `applications/cert-manager/helmfile.yaml` is required to install cert-manager:
+
+```yaml
+certManager:
+ installed: true
+ letsEncryptClusterIssuer:
+ installed: true
+ email: "user@example.com"
+```
+
+Or without the default `ClusterIssuer`:
+
+```yaml
+certManager:
+ installed: true
+ letsEncryptClusterIssuer:
+ installed: false
+```
+
+You can customize the installation of cert-manager by defining a
+`.gitlab/managed-apps/cert-manager/values.yaml` file in your cluster
+management project. Refer to the
+[chart](https://github.com/jetstack/cert-manager) for the
+available configuration options.
+
+Support for installing the Cert Manager managed application is provided by the
+GitLab Configure group. If you run into unknown issues,
+[open a new issue](https://gitlab.com/gitlab-org/gitlab/-/issues/new), and ping at
+least 2 people from the
+[Configure group](https://about.gitlab.com/handbook/product/categories/#configure-group).
diff --git a/doc/user/infrastructure/clusters/manage/management_project_applications/cilium.md b/doc/user/infrastructure/clusters/manage/management_project_applications/cilium.md
new file mode 100644
index 00000000000..4e84f2c5ef4
--- /dev/null
+++ b/doc/user/infrastructure/clusters/manage/management_project_applications/cilium.md
@@ -0,0 +1,128 @@
+---
+stage: Protect
+group: Container Security
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# Install Cilium with a cluster management project
+
+> [Introduced](https://gitlab.com/gitlab-org/project-templates/cluster-management/-/merge_requests/5) in GitLab 14.0.
+
+[Cilium](https://cilium.io/) is a networking plugin for Kubernetes that you can use to implement
+support for [NetworkPolicy](https://kubernetes.io/docs/concepts/services-networking/network-policies/)
+resources. For more information, see [Network Policies](../../../../../topics/autodevops/stages.md#network-policy).
+
+<i class="fa fa-youtube-play youtube" aria-hidden="true"></i>
+For an overview, see the
+[Container Network Security Demo for GitLab 12.8](https://www.youtube.com/watch?v=pgUEdhdhoUI).
+
+Assuming you already have a [Cluster management project](../../../../../user/clusters/management_project.md) created from a
+[management project template](../../../../../user/clusters/management_project_template.md), to install cilium you should
+uncomment this line from your `helmfile.yaml`:
+
+```yaml
+ - path: applications/cilium/helmfile.yaml
+```
+
+and update the `applications/cilium/values.yaml` to set the `clusterType`:
+
+```yaml
+# possible values are gke or eks
+clusterType: gke
+```
+
+The `clusterType` variable enables the recommended Helm variables for a corresponding cluster type.
+You can check the recommended variables for each cluster type in the official documentation:
+
+- [Google GKE](https://docs.cilium.io/en/v1.8/gettingstarted/k8s-install-gke/#deploy-cilium)
+- [AWS EKS](https://docs.cilium.io/en/v1.8/gettingstarted/k8s-install-eks/#deploy-cilium)
+
+Do not use `clusterType` for sandbox environments like [Minikube](https://minikube.sigs.k8s.io/docs/).
+
+You can customize Cilium's Helm variables by defining the
+`applications/cilium/values.yaml` file in your cluster
+management project. Refer to the
+[Cilium chart](https://github.com/cilium/cilium/tree/master/install/kubernetes/cilium)
+for the available configuration options.
+
+You can check Cilium's installation status on the cluster management page:
+
+- [Project-level cluster](../../../../project/clusters/index.md): Navigate to your project's
+ **Infrastructure > Kubernetes clusters** page.
+- [Group-level cluster](../../../../group/clusters/index.md): Navigate to your group's
+ **Kubernetes** page.
+
+WARNING:
+Installation and removal of the Cilium requires a **manual**
+[restart](https://docs.cilium.io/en/stable/gettingstarted/k8s-install-helm/#restart-unmanaged-pods)
+of all affected pods in all namespaces to ensure that they are
+[managed](https://docs.cilium.io/en/v1.8/operations/troubleshooting/#ensure-managed-pod)
+by the correct networking plugin. Whenever Hubble is enabled, its related pod might require a
+restart depending on whether it started prior to Cilium. For more information, see
+[Failed Deployment](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#failed-deployment)
+in the Kubernetes docs.
+
+NOTE:
+Major upgrades might require additional setup steps. For more information, see
+the official [upgrade guide](https://docs.cilium.io/en/v1.8/operations/upgrade/).
+
+By default, Cilium's
+[audit mode](https://docs.cilium.io/en/v1.8/gettingstarted/policy-creation/#enable-policy-audit-mode)
+is enabled. In audit mode, Cilium doesn't drop disallowed packets. You
+can use `policy-verdict` log to observe policy-related decisions. You
+can disable audit mode by adding the following to
+`applications/cilium/values.yaml`:
+
+```yaml
+config:
+ policyAuditMode: false
+
+agent:
+ monitor:
+ eventTypes: ["drop"]
+```
+
+The Cilium monitor log for traffic is logged out by the
+`cilium-monitor` sidecar container. You can check these logs with the following command:
+
+```shell
+kubectl -n gitlab-managed-apps logs -l k8s-app=cilium -c cilium-monitor
+```
+
+You can disable the monitor log in `.gitlab/managed-apps/cilium/values.yaml`:
+
+```yaml
+agent:
+ monitor:
+ enabled: false
+```
+
+The [Hubble](https://github.com/cilium/hubble) monitoring daemon is enabled by default
+and it's set to collect per namespace flow metrics. This metrics are accessible on the
+[Threat Monitoring](../../../../application_security/threat_monitoring/index.md)
+dashboard. You can disable Hubble by adding the following to
+`applications/cilium/values.yaml`:
+
+```yaml
+global:
+ hubble:
+ enabled: false
+```
+
+You can also adjust Helm values for Hubble by using
+`applications/cilium/values.yaml`:
+
+```yaml
+global:
+ hubble:
+ enabled: true
+ metrics:
+ enabled:
+ - 'flow:sourceContext=namespace;destinationContext=namespace'
+```
+
+Support for installing the Cilium managed application is provided by the
+GitLab Container Security group. If you run into unknown issues,
+[open a new issue](https://gitlab.com/gitlab-org/gitlab/-/issues/new), and ping at
+least 2 people from the
+[Container Security group](https://about.gitlab.com/handbook/product/categories/#container-security-group).
diff --git a/doc/user/infrastructure/clusters/manage/management_project_applications/elasticstack.md b/doc/user/infrastructure/clusters/manage/management_project_applications/elasticstack.md
new file mode 100644
index 00000000000..3d2b3caf0af
--- /dev/null
+++ b/doc/user/infrastructure/clusters/manage/management_project_applications/elasticstack.md
@@ -0,0 +1,34 @@
+---
+stage: Monitor
+group: Monitor
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# Install Elastic Stack with a cluster management project
+
+> [Introduced](https://gitlab.com/gitlab-org/project-templates/cluster-management/-/merge_requests/5) in GitLab 14.0.
+
+Assuming you already have a [Cluster management project](../../../../../user/clusters/management_project.md) created from a
+[management project template](../../../../../user/clusters/management_project_template.md), to install Elastic Stack you should
+uncomment this line from your `helmfile.yaml`:
+
+```yaml
+ - path: applications/elastic-stack/helmfile.yaml
+```
+
+Elastic Stack is installed by default into the `gitlab-managed-apps` namespace of your cluster.
+
+You can check the default
+[`values.yaml`](https://gitlab.com/gitlab-org/project-templates/cluster-management/-/blob/master/applications/elastic-stack/values.yaml)
+we set for this chart.
+
+You can customize the installation of Elastic Stack by updating the
+`applications/elastic-stack/values.yaml` file in your cluster
+management project. Refer to the
+[chart](https://gitlab.com/gitlab-org/charts/elastic-stack) for all
+available configuration options.
+
+Support for installing the Elastic Stack managed application is provided by the
+GitLab APM group. If you run into unknown issues,
+[open a new issue](https://gitlab.com/gitlab-org/gitlab/-/issues/new), and ping at
+least 2 people from the [APM group](https://about.gitlab.com/handbook/product/categories/#apm-group).
diff --git a/doc/user/infrastructure/clusters/manage/management_project_applications/falco.md b/doc/user/infrastructure/clusters/manage/management_project_applications/falco.md
new file mode 100644
index 00000000000..dff0c3bd7bc
--- /dev/null
+++ b/doc/user/infrastructure/clusters/manage/management_project_applications/falco.md
@@ -0,0 +1,101 @@
+---
+stage: Protect
+group: Container Security
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# Install Falco with a cluster management project
+
+> [Introduced](https://gitlab.com/gitlab-org/project-templates/cluster-management/-/merge_requests/5) in GitLab 14.0.
+
+GitLab Container Host Security Monitoring uses [Falco](https://falco.org/)
+as a runtime security tool that listens to the Linux kernel using eBPF. Falco parses system calls
+and asserts the stream against a configurable rules engine in real-time. For more information, see
+[Falco's Documentation](https://falco.org/docs/).
+
+Assuming you already have a [Cluster management project](../../../../../user/clusters/management_project.md) created from a
+[management project template](../../../../../user/clusters/management_project_template.md), to install Falco you should
+uncomment this line from your `helmfile.yaml`:
+
+```yaml
+ - path: applications/falco/helmfile.yaml
+```
+
+You can customize Falco's Helm variables by defining the
+`applications/falco/values.yaml` file in your cluster
+management project. Refer to the
+[Falco chart](https://github.com/falcosecurity/charts/tree/master/falco)
+for the available configuration options.
+
+WARNING:
+By default eBPF support is enabled and Falco uses an
+[eBPF probe](https://falco.org/docs/event-sources/drivers/#using-the-ebpf-probe)
+to pass system calls to user space. If your cluster doesn't support this, you can
+configure it to use Falco kernel module instead by adding the following to
+`applications/falco/values.yaml`:
+
+```yaml
+ebpf:
+ enabled: false
+```
+
+In rare cases where probe installation on your cluster isn't possible and the kernel/probe
+isn't pre-compiled, you may need to manually prepare the kernel module or eBPF probe with
+[`driverkit`](https://github.com/falcosecurity/driverkit#against-a-kubernetes-cluster)
+and install it on each cluster node.
+
+By default, Falco is deployed with a limited set of rules. To add more rules, add
+the following to `applications/falco/values.yaml` (you can get examples from
+[Cloud Native Security Hub](https://securityhub.dev/)):
+
+```yaml
+customRules:
+ file-integrity.yaml: |-
+ - rule: Detect New File
+ desc: detect new file created
+ condition: >
+ evt.type = chmod or evt.type = fchmod
+ output: >
+ File below a known directory opened for writing (user=%user.name
+ command=%proc.cmdline file=%fd.name parent=%proc.pname pcmdline=%proc.pcmdline gparent=%proc.aname[2])
+ priority: ERROR
+ tags: [filesystem]
+ - rule: Detect New Directory
+ desc: detect new directory created
+ condition: >
+ mkdir
+ output: >
+ File below a known directory opened for writing (user=%user.name
+ command=%proc.cmdline file=%fd.name parent=%proc.pname pcmdline=%proc.pcmdline gparent=%proc.aname[2])
+ priority: ERROR
+ tags: [filesystem]
+```
+
+By default, Falco only outputs security events to logs as JSON objects. To set it to output to an
+[external API](https://falco.org/docs/alerts/#https-output-send-alerts-to-an-https-end-point)
+or [application](https://falco.org/docs/alerts/#program-output),
+add the following to `applications/falco/values.yaml`:
+
+```yaml
+falco:
+ programOutput:
+ enabled: true
+ keepAlive: false
+ program: mail -s "Falco Notification" someone@example.com
+
+ httpOutput:
+ enabled: true
+ url: http://some.url
+```
+
+You can check these logs with the following command:
+
+```shell
+kubectl -n gitlab-managed-apps logs -l app=falco
+```
+
+Support for installing the Falco managed application is provided by the
+GitLab Container Security group. If you run into unknown issues,
+[open a new issue](https://gitlab.com/gitlab-org/gitlab/-/issues/new), and ping at
+least 2 people from the
+[Container Security group](https://about.gitlab.com/handbook/product/categories/#container-security-group).
diff --git a/doc/user/infrastructure/clusters/manage/management_project_applications/fluentd.md b/doc/user/infrastructure/clusters/manage/management_project_applications/fluentd.md
new file mode 100644
index 00000000000..bf05f8f87d8
--- /dev/null
+++ b/doc/user/infrastructure/clusters/manage/management_project_applications/fluentd.md
@@ -0,0 +1,36 @@
+---
+stage: Protect
+group: Container Security
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# Install Fluentd with a cluster management project
+
+> [Introduced](https://gitlab.com/gitlab-org/project-templates/cluster-management/-/merge_requests/5) in GitLab 14.0.
+
+Assuming you already have a [Cluster management project](../../../../../user/clusters/management_project.md) created from a
+[management project template](../../../../../user/clusters/management_project_template.md), to install Fluentd you should
+uncomment this line from your `helmfile.yaml`:
+
+```yaml
+ - path: applications/fluentd/helmfile.yaml
+```
+
+You can also review the default values set for this chart in the
+[`values.yaml`](https://github.com/helm/charts/blob/master/stable/fluentd/values.yaml) file.
+
+You can customize the installation of Fluentd by defining
+`applications/fluentd/values.yaml` file in your cluster management
+project. Refer to the
+[configuration chart](https://github.com/helm/charts/tree/master/stable/fluentd#configuration)
+for the current development release of Fluentd for all available configuration options.
+
+The configuration chart link points to the current development release, which
+may differ from the version you have installed. To ensure compatibility, switch
+to the specific branch or tag you are using.
+
+Support for installing the Fluentd managed application is provided by the
+GitLab Container Security group. If you run into unknown issues,
+[open a new issue](https://gitlab.com/gitlab-org/gitlab/-/issues/new), and ping at
+least 2 people from the
+[Container Security group](https://about.gitlab.com/handbook/product/categories/#container-security-group).
diff --git a/doc/user/infrastructure/clusters/manage/management_project_applications/ingress.md b/doc/user/infrastructure/clusters/manage/management_project_applications/ingress.md
new file mode 100644
index 00000000000..4f17dbab11b
--- /dev/null
+++ b/doc/user/infrastructure/clusters/manage/management_project_applications/ingress.md
@@ -0,0 +1,31 @@
+---
+stage: Configure
+group: Configure
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# Install Ingress with a cluster management project
+
+> [Introduced](https://gitlab.com/gitlab-org/project-templates/cluster-management/-/merge_requests/5) in GitLab 14.0.
+
+Assuming you already have a [Cluster management project](../../../../../user/clusters/management_project.md) created from a
+[management project template](../../../../../user/clusters/management_project_template.md), to install Ingress you should
+uncomment this line from your `helmfile.yaml`:
+
+```yaml
+ - path: applications/ingress/helmfile.yaml
+```
+
+Ingress is installed by default into the `gitlab-managed-apps` namespace
+of your cluster.
+
+You can customize the installation of Ingress by updating the
+`applications/ingress/values.yaml` file in your cluster
+management project. Refer to the
+[chart](https://github.com/helm/charts/tree/master/stable/nginx-ingress)
+for the available configuration options.
+
+Support for installing the Ingress managed application is provided by the GitLab Configure group.
+If you run into unknown issues, [open a new issue](https://gitlab.com/gitlab-org/gitlab/-/issues/new),
+and ping at least 2 people from the
+[Configure group](https://about.gitlab.com/handbook/product/categories/#configure-group).
diff --git a/doc/user/infrastructure/clusters/manage/management_project_applications/prometheus.md b/doc/user/infrastructure/clusters/manage/management_project_applications/prometheus.md
new file mode 100644
index 00000000000..19e6c76d133
--- /dev/null
+++ b/doc/user/infrastructure/clusters/manage/management_project_applications/prometheus.md
@@ -0,0 +1,32 @@
+---
+stage: Monitor
+group: Monitor
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# Install Prometheus with a cluster management project
+
+> [Introduced](https://gitlab.com/gitlab-org/project-templates/cluster-management/-/merge_requests/5) in GitLab 14.0.
+
+[Prometheus](https://prometheus.io/docs/introduction/overview/) is an
+open-source monitoring and alerting system for supervising your
+deployed applications.
+
+Assuming you already have a [Cluster management project](../../../../../user/clusters/management_project.md) created from a
+[management project template](../../../../../user/clusters/management_project_template.md), to install Prometheus you should
+uncomment this line from your `helmfile.yaml`:
+
+```yaml
+ - path: applications/prometheus/helmfile.yaml
+```
+
+You can customize the installation of Prometheus by updating the
+`applications/prometheus/values.yaml` file in your cluster
+management project. Refer to the
+[Configuration section](https://github.com/helm/charts/tree/master/stable/prometheus#configuration)
+of the Prometheus chart's README for the available configuration options.
+
+Support for installing the Prometheus managed application is provided by the
+GitLab APM group. If you run into unknown issues,
+[open a new issue](https://gitlab.com/gitlab-org/gitlab/-/issues/new), and ping at
+least 2 people from the [APM group](https://about.gitlab.com/handbook/product/categories/#apm-group).
diff --git a/doc/user/infrastructure/clusters/manage/management_project_applications/runner.md b/doc/user/infrastructure/clusters/manage/management_project_applications/runner.md
new file mode 100644
index 00000000000..56e01be68cb
--- /dev/null
+++ b/doc/user/infrastructure/clusters/manage/management_project_applications/runner.md
@@ -0,0 +1,48 @@
+---
+stage: Verify
+group: Runner
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# Install GitLab Runner with a cluster management project
+
+> [Introduced](https://gitlab.com/gitlab-org/project-templates/cluster-management/-/merge_requests/5) in GitLab 14.0.
+
+Assuming you already have a [Cluster management project](../../../../../user/clusters/management_project.md) created from a
+[management project template](../../../../../user/clusters/management_project_template.md), to install GitLab Runner you should
+uncomment this line from your `helmfile.yaml`:
+
+```yaml
+ - path: applications/gitlab-runner/helmfile.yaml
+```
+
+GitLab Runner is installed by default into the `gitlab-managed-apps` namespace of your cluster.
+
+For GitLab Runner to function, you _must_ specify the following in your
+`applications/gitlab-runner/values.yaml.gotmpl` file:
+
+- `gitlabUrl`: The GitLab server full URL (for example, `https://gitlab.example.com`)
+ to register the Runner against.
+- `runnerRegistrationToken`: The registration token for adding new runners to GitLab.
+ This must be [retrieved from your GitLab instance](../../../../../ci/runners/index.md).
+
+These values can be specified using [CI/CD variables](../../../../../ci/variables/index.md):
+
+- `GITLAB_RUNNER_GITLAB_URL` is used for `gitlabUrl`.
+- `GITLAB_RUNNER_REGISTRATION_TOKEN` is used for `runnerRegistrationToken`
+
+The methods of specifying these values are mutually exclusive. Either specify variables `GITLAB_RUNNER_REGISTRATION_TOKEN` and `GITLAB_RUNNER_TOKEN` as CI variables (recommended) or provide values for `runnerRegistrationToken:` and `runnerToken:` in `applications/gitlab-runner/values.yaml.gotmpl`.
+
+The runner registration token allows connection to a project by a runner and therefore should be treated as a secret to prevent malicious use and code exfiltration through a runner. For this reason, we recommend that you specify the runner registration token as a [protected variable](../../../../../ci/variables/index.md#protect-a-cicd-variable) and [masked variable](../../../../../ci/variables/index.md#mask-a-cicd-variable) and do not commit them to the Git repository in the `values.yaml.gotmpl` file.
+
+You can customize the installation of GitLab Runner by defining
+`applications/gitlab-runner/values.yaml.gotmpl` file in your cluster
+management project. Refer to the
+[chart](https://gitlab.com/gitlab-org/charts/gitlab-runner) for the
+available configuration options.
+
+Support for installing the GitLab Runner managed application is provided by the
+GitLab Runner group. If you run into unknown issues,
+[open a new issue](https://gitlab.com/gitlab-org/gitlab/-/issues/new), and ping at
+least 2 people from the
+[Runner group](https://about.gitlab.com/handbook/product/categories/#runner-group).
diff --git a/doc/user/infrastructure/clusters/manage/management_project_applications/sentry.md b/doc/user/infrastructure/clusters/manage/management_project_applications/sentry.md
new file mode 100644
index 00000000000..4d82fe389d2
--- /dev/null
+++ b/doc/user/infrastructure/clusters/manage/management_project_applications/sentry.md
@@ -0,0 +1,76 @@
+---
+stage: Monitor
+group: Monitor
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# Install Sentry with a cluster management project
+
+> [Introduced](https://gitlab.com/gitlab-org/project-templates/cluster-management/-/merge_requests/5) in GitLab 14.0.
+
+The Sentry Helm chart [recommends](https://github.com/helm/charts/blob/f6e5784f265dd459c5a77430185d0302ed372665/stable/sentry/values.yaml#L284-L285)
+at least 3 GB of available RAM for database migrations.
+
+Assuming you already have a [Cluster management project](../../../../../user/clusters/management_project.md) created from a
+[management project template](../../../../../user/clusters/management_project_template.md), to install Sentry you should
+uncomment this line from your `helmfile.yaml`:
+
+```yaml
+ - path: applications/sentry/helmfile.yaml
+```
+
+Sentry is installed by default into the `gitlab-managed-apps` namespace
+of your cluster.
+
+You can customize the installation of Sentry by defining
+`applications/sentry/values.yaml` file in your cluster
+management project. Refer to the
+[chart](https://github.com/helm/charts/tree/master/stable/sentry)
+for the available configuration options.
+
+We recommend you pay close attention to the following configuration options:
+
+- `email`. Needed to invite users to your Sentry instance and to send error emails.
+- `user`. Where you can set the login credentials for the default administrator user.
+- `postgresql`. For a PostgreSQL password that can be used when running future updates.
+
+When upgrading, it's important to provide the existing PostgreSQL password (given
+using the `postgresql.postgresqlPassword` key) to avoid authentication errors.
+Read the [PostgreSQL chart documentation](https://github.com/helm/charts/tree/master/stable/postgresql#upgrade)
+for more information.
+
+Here is an example configuration for Sentry:
+
+```yaml
+# Admin user to create
+user:
+ # Indicated to create the admin user or not,
+ # Default is true as the initial installation.
+ create: true
+ email: "<your email>"
+ password: "<your password>"
+
+email:
+ from_address: "<your from email>"
+ host: smtp
+ port: 25
+ use_tls: false
+ user: "<your email username>"
+ password: "<your email password>"
+ enable_replies: false
+
+ingress:
+ enabled: true
+ hostname: "<sentry.example.com>"
+
+# Needs to be here between runs.
+# See https://github.com/helm/charts/tree/master/stable/postgresql#upgrade for more info
+postgresql:
+ postgresqlPassword: example-postgresql-password
+```
+
+Support for installing the Sentry managed application is provided by the
+GitLab Health group. If you run into unknown issues,
+[open a new issue](https://gitlab.com/gitlab-org/gitlab/-/issues/new), and ping at
+least 2 people from the
+[Health group](https://about.gitlab.com/handbook/product/categories/#health-group).
diff --git a/doc/user/infrastructure/clusters/manage/management_project_applications/vault.md b/doc/user/infrastructure/clusters/manage/management_project_applications/vault.md
new file mode 100644
index 00000000000..291321963d0
--- /dev/null
+++ b/doc/user/infrastructure/clusters/manage/management_project_applications/vault.md
@@ -0,0 +1,108 @@
+---
+stage: Release
+group: Release
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# Install Vault with a cluster management project
+
+> [Introduced](https://gitlab.com/gitlab-org/project-templates/cluster-management/-/merge_requests/5) in GitLab 14.0.
+
+[HashiCorp Vault](https://www.vaultproject.io/) is a secrets management solution which
+can be used to safely manage and store passwords, credentials, certificates, and more. A Vault
+installation could be leveraged to provide a single secure data store for credentials
+used in your applications, GitLab CI/CD jobs, and more. It could also serve as a way of
+providing SSL/TLS certificates to systems and deployments in your infrastructure. Leveraging
+Vault as a single source for all these credentials allows greater security by having
+a single source of access, control, and auditability around all your sensitive
+credentials and certificates. This feature requires giving GitLab the highest level of access and
+control. Therefore, if GitLab is compromised, the security of this Vault instance is as well. To
+avoid this security risk, GitLab recommends using your own HashiCorp Vault to leverage
+[external secrets with CI](../../../../../ci/secrets/index.md).
+
+Assuming you already have a [Cluster management project](../../../../../user/clusters/management_project.md) created from a
+[management project template](../../../../../user/clusters/management_project_template.md), to install Vault you should
+uncomment this line from your `helmfile.yaml`:
+
+```yaml
+ - path: applications/vault/helmfile.yaml
+```
+
+By default you receive a basic Vault setup with no scalable storage backend. This
+is enough for simple testing and small-scale deployments, though has limits
+to how much it can scale, and as it's a single instance deployment, upgrading the
+Vault application causes downtime.
+
+To optimally use Vault in a production environment, it's ideal to have a good understanding
+of the internals of Vault and how to configure it. This can be done by reading
+the [Vault Configuration guide](../../../../../ci/secrets/#configure-your-vault-server),
+the [Vault documentation](https://www.vaultproject.io/docs/internals) and
+the Vault Helm chart [`values.yaml` file](https://github.com/hashicorp/vault-helm/blob/v0.3.3/values.yaml).
+
+At a minimum, most users set up:
+
+- A [seal](https://www.vaultproject.io/docs/configuration/seal) for extra encryption
+ of the main key.
+- A [storage backend](https://www.vaultproject.io/docs/configuration/storage) that's
+ suitable for environment and storage security requirements.
+- [HA Mode](https://www.vaultproject.io/docs/concepts/ha).
+- The [Vault UI](https://www.vaultproject.io/docs/configuration/ui).
+
+The following is an example values file (`applications/vault/values.yaml`)
+that configures Google Key Management Service for auto-unseal, using a Google Cloud Storage backend, enabling
+the Vault UI, and enabling HA with 3 pod replicas. The `storage` and `seal` stanzas
+below are examples and should be replaced with settings specific to your environment.
+
+```yaml
+# Enable the Vault WebUI
+ui:
+ enabled: true
+server:
+ # Disable the built in data storage volume as it's not safe for High Availability mode
+ dataStorage:
+ enabled: false
+ # Enable High Availability Mode
+ ha:
+ enabled: true
+ # Configure Vault to listen on port 8200 for normal traffic and port 8201 for inter-cluster traffic
+ config: |
+ listener "tcp" {
+ tls_disable = 1
+ address = "[::]:8200"
+ cluster_address = "[::]:8201"
+ }
+ # Configure Vault to store its data in a GCS Bucket backend
+ storage "gcs" {
+ path = "gcs://my-vault-storage/vault-bucket"
+ ha_enabled = "true"
+ }
+ # Configure Vault to unseal storage using a GKMS key
+ seal "gcpckms" {
+ project = "vault-helm-dev-246514"
+ region = "global"
+ key_ring = "vault-helm-unseal-kr"
+ crypto_key = "vault-helm-unseal-key"
+ }
+```
+
+After you have successfully installed Vault, you must
+[initialize the Vault](https://learn.hashicorp.com/tutorials/vault/getting-started-deploy#initializing-the-vault)
+and obtain the initial root token. You need access to your Kubernetes cluster that
+Vault has been deployed into in order to do this. To initialize the Vault, get a
+shell to one of the Vault pods running inside Kubernetes (typically this is done
+by using the `kubectl` command line tool). After you have a shell into the pod,
+run the `vault operator init` command:
+
+```shell
+kubectl -n gitlab-managed-apps exec -it vault-0 sh
+/ $ vault operator init
+```
+
+This should give you your unseal keys and initial root token. Make sure to note these down
+and keep these safe, as they're required to unseal the Vault throughout its lifecycle.
+
+Support for installing the Vault managed application is provided by the
+GitLab Release Management group. If you run into unknown issues,
+[open a new issue](https://gitlab.com/gitlab-org/gitlab/-/issues/new), and ping at
+least 2 people from the
+[Release Management group](https://about.gitlab.com/handbook/product/categories/#release-management-group).
diff --git a/doc/user/infrastructure/iac/index.md b/doc/user/infrastructure/iac/index.md
new file mode 100644
index 00000000000..5b44490f78d
--- /dev/null
+++ b/doc/user/infrastructure/iac/index.md
@@ -0,0 +1,162 @@
+---
+stage: Configure
+group: Configure
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# Infrastructure as Code with Terraform and GitLab **(FREE)**
+
+## Motivation
+
+The Terraform integration features in GitLab enable your GitOps / Infrastructure-as-Code (IaC)
+workflows to tie into GitLab authentication and authorization. These features focus on
+lowering the barrier to entry for teams to adopt Terraform, collaborate effectively in
+GitLab, and support Terraform best practices.
+
+## Quick Start
+
+Use the following `.gitlab-ci.yml` to set up a basic Terraform project integration
+for GitLab versions 14.0 and later:
+
+```yaml
+include:
+ - template: Terraform.gitlab-ci.yml
+
+variables:
+ # If not using GitLab's HTTP backend, remove this line and specify TF_HTTP_* variables
+ TF_STATE_NAME: default
+ TF_CACHE_KEY: default
+ # If your terraform files are in a subdirectory, set TF_ROOT accordingly
+ # TF_ROOT: terraform/production
+```
+
+This template includes some opinionated decisions, which you can override:
+
+- Including the latest [GitLab Terraform Image](https://gitlab.com/gitlab-org/terraform-images).
+- Using the [GitLab managed Terraform State](#gitlab-managed-terraform-state) as
+ the Terraform state storage backend.
+- Creating [four pipeline stages](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Terraform.gitlab-ci.yml):
+ `init`, `validate`, `build`, and `deploy`. These stages
+ [run the Terraform commands](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Terraform/Base.gitlab-ci.yml)
+ `init`, `validate`, `plan`, `plan-json`, and `apply`. The `apply` command only runs on the default branch.
+
+This video from January 2021 walks you through all the GitLab Terraform integration features:
+
+<div class="video-fallback">
+ See the video: <a href="https://www.youtube.com/watch?v=iGXjUrkkzDI">Terraform with GitLab</a>.
+</div>
+<figure class="video-container">
+ <iframe src="https://www.youtube.com/embed/iGXjUrkkzDI" frameborder="0" allowfullscreen="true"> </iframe>
+</figure>
+
+## GitLab Managed Terraform state
+
+[Terraform remote backends](https://www.terraform.io/docs/language/settings/backends/index.html)
+enable you to store the state file in a remote, shared store. GitLab uses the
+[Terraform HTTP backend](https://www.terraform.io/docs/language/settings/backends/http.html)
+to securely store the state files in local storage (the default) or
+[the remote store of your choice](../../../administration/terraform_state.md).
+
+The GitLab managed Terraform state backend can store your Terraform state easily and
+securely. It spares you from setting up additional remote resources like
+Amazon S3 or Google Cloud Storage. Its features include:
+
+- Supporting encryption of the state file both in transit and at rest.
+- Locking and unlocking state.
+- Remote Terraform plan and apply execution.
+
+Read more on setting up and [using GitLab Managed Terraform states](../terraform_state.md)
+
+## Terraform module registry
+
+GitLab can be used as a [Terraform module registry](../../packages/terraform_module_registry/index.md)
+to create and publish Terraform modules to a private registry specific to your
+top-level namespace.
+
+## Terraform integration in Merge Requests
+
+Collaborating around Infrastructure as Code (IaC) changes requires both code changes
+and expected infrastructure changes to be checked and approved. GitLab provides a
+solution to help collaboration around Terraform code changes and their expected
+effects using the Merge Request pages. This way users don't have to build custom
+tools or rely on 3rd party solutions to streamline their IaC workflows.
+
+Read more on setting up and [using the merge request integrations](../mr_integration.md).
+
+## The GitLab Terraform provider
+
+WARNING:
+The GitLab Terraform provider is released separately from GitLab.
+We are working on migrating the GitLab Terraform provider for GitLab.com.
+
+You can use the [GitLab Terraform provider](https://github.com/gitlabhq/terraform-provider-gitlab)
+to manage various aspects of GitLab using Terraform. The provider is an open source project,
+owned by GitLab, where everyone can contribute.
+
+The [documentation of the provider](https://registry.terraform.io/providers/gitlabhq/gitlab/latest/docs)
+is available as part of the official Terraform provider documentations.
+
+## Create a new cluster through IaC
+
+Learn how to [create a new cluster on Google Kubernetes Engine (GKE)](../clusters/connect/new_gke_cluster.md).
+
+## Troubleshooting
+
+### `gitlab_group_share_group` resources not detected when subgroup state is refreshed
+
+The GitLab Terraform provider can fail to detect existing `gitlab_group_share_group` resources
+due to the issue ["User with permissions cannot retrieve `share_with_groups` from the API"](https://gitlab.com/gitlab-org/gitlab/-/issues/328428).
+This results in an error when running `terraform apply` because Terraform attempts to recreate an
+existing resource.
+
+For example, consider the following group/subgroup configuration:
+
+```plaintext
+parent-group
+├── subgroup-A
+└── subgroup-B
+```
+
+Where:
+
+- User `user-1` creates `parent-group`, `subgroup-A`, and `subgroup-B`.
+- `subgroup-A` is shared with `subgroup-B`.
+- User `terraform-user` is member of `parent-group` with inherited `owner` access to both subgroups.
+
+When the Terraform state is refreshed, the API query `GET /groups/:subgroup-A_id` issued by the provider does not return the
+details of `subgroup-B` in the `shared_with_groups` array. This leads to the error.
+
+To workaround this issue, make sure to apply one of the following conditions:
+
+1. The `terraform-user` creates all subgroup resources.
+1. Grant Maintainer or Owner role to the `terraform-user` user on `subgroup-B`.
+1. The `terraform-user` inherited access to `subgroup-B` and `subgroup-B` contains at least one project.
+
+### Invalid CI/CD syntax error when using the "latest" base template
+
+On GitLab 14.2 and later, you might get a CI/CD syntax error when using the
+`latest` Base Terraform template:
+
+```yaml
+include:
+ - template: Terraform/Base.latest.gitlab-ci.yml
+
+my-Terraform-job:
+ extends: .init
+```
+
+The base template's [jobs were renamed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/67719/)
+with better Terraform-specific names. To resolve the syntax error, you can:
+
+- Use the stable `Terraform/Base.gitlab-ci.yml` template, which has not changed.
+- Update your pipeline configuration to use the new job names in
+ `https://gitlab.com/gitlab-org/gitlab/-/tree/master/lib/gitlab/ci/templates/Terraform/Base.latest.gitlab-ci.yml`.
+ For example:
+
+ ```yaml
+ include:
+ - template: Terraform/Base.latest.gitlab-ci.yml
+
+ my-Terraform-job:
+ extends: .terraform:init # The updated name.
+ ```
diff --git a/doc/user/infrastructure/img/terraform_list_view_actions_v13_8.png b/doc/user/infrastructure/img/terraform_list_view_actions_v13_8.png
deleted file mode 100644
index 7d619b6ad7e..00000000000
--- a/doc/user/infrastructure/img/terraform_list_view_actions_v13_8.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/infrastructure/index.md b/doc/user/infrastructure/index.md
index bdaae4b8225..b2d75a22615 100644
--- a/doc/user/infrastructure/index.md
+++ b/doc/user/infrastructure/index.md
@@ -4,136 +4,11 @@ group: Configure
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
-# Infrastructure as code with Terraform and GitLab **(FREE)**
+# Infrastructure management **(FREE)**
-## Motivation
+GitLab provides you with great solutions to help you manage your
+infrastructure:
-The Terraform integration features in GitLab enable your GitOps / Infrastructure-as-Code (IaC)
-workflows to tie into GitLab authentication and authorization. These features focus on
-lowering the barrier to entry for teams to adopt Terraform, collaborate effectively in
-GitLab, and support Terraform best practices.
-
-## Quick Start
-
-Use the following `.gitlab-ci.yml` to set up a basic Terraform project integration
-for GitLab versions 14.0 and later:
-
-```yaml
-include:
- - template: Terraform.gitlab-ci.yml
-
-variables:
- # If not using GitLab's HTTP backend, remove this line and specify TF_HTTP_* variables
- TF_STATE_NAME: default
- TF_CACHE_KEY: default
- # If your terraform files are in a subdirectory, set TF_ROOT accordingly
- # TF_ROOT: terraform/production
-```
-
-This template includes some opinionated decisions, which you can override:
-
-- Including the latest [GitLab Terraform Image](https://gitlab.com/gitlab-org/terraform-images).
-- Using the [GitLab managed Terraform State](#gitlab-managed-terraform-state) as
- the Terraform state storage backend.
-- Creating [four pipeline stages](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Terraform.gitlab-ci.yml):
- `init`, `validate`, `build`, and `deploy`. These stages
- [run the Terraform commands](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Terraform/Base.gitlab-ci.yml)
- `init`, `validate`, `plan`, `plan-json`, and `apply`. The `apply` command only runs on the default branch.
-
-This video from January 2021 walks you through all the GitLab Terraform integration features:
-
-<div class="video-fallback">
- See the video: <a href="https://www.youtube.com/watch?v=iGXjUrkkzDI">Terraform with GitLab</a>.
-</div>
-<figure class="video-container">
- <iframe src="https://www.youtube.com/embed/iGXjUrkkzDI" frameborder="0" allowfullscreen="true"> </iframe>
-</figure>
-
-## GitLab Managed Terraform state
-
-[Terraform remote backends](https://www.terraform.io/docs/language/settings/backends/index.html)
-enable you to store the state file in a remote, shared store. GitLab uses the
-[Terraform HTTP backend](https://www.terraform.io/docs/language/settings/backends/http.html)
-to securely store the state files in local storage (the default) or
-[the remote store of your choice](../../administration/terraform_state.md).
-
-The GitLab managed Terraform state backend can store your Terraform state easily and
-securely. It spares you from setting up additional remote resources like
-Amazon S3 or Google Cloud Storage. Its features include:
-
-- Supporting encryption of the state file both in transit and at rest.
-- Locking and unlocking state.
-- Remote Terraform plan and apply execution.
-
-Read more on setting up and [using GitLab Managed Terraform states](terraform_state.md)
-
-WARNING:
-Like any other job artifact, Terraform plan data is [viewable by anyone with Guest access](../permissions.md) to the repository.
-Neither Terraform nor GitLab encrypts the plan file by default. If your Terraform plan
-includes sensitive data such as passwords, access tokens, or certificates, GitLab strongly
-recommends encrypting plan output or modifying the project visibility settings.
-
-## Terraform module registry
-
-GitLab can be used as a [Terraform module registry](../packages/terraform_module_registry/index.md)
-to create and publish Terraform modules to a private registry specific to your
-top-level namespace.
-
-## Terraform integration in Merge Requests
-
-Collaborating around Infrastructure as Code (IaC) changes requires both code changes
-and expected infrastructure changes to be checked and approved. GitLab provides a
-solution to help collaboration around Terraform code changes and their expected
-effects using the Merge Request pages. This way users don't have to build custom
-tools or rely on 3rd party solutions to streamline their IaC workflows.
-
-Read more on setting up and [using the merge request integrations](mr_integration.md).
-
-## The GitLab Terraform provider
-
-WARNING:
-The GitLab Terraform provider is released separately from GitLab.
-We are working on migrating the GitLab Terraform provider for GitLab.com.
-
-You can use the [GitLab Terraform provider](https://github.com/gitlabhq/terraform-provider-gitlab)
-to manage various aspects of GitLab using Terraform. The provider is an open source project,
-owned by GitLab, where everyone can contribute.
-
-The [documentation of the provider](https://registry.terraform.io/providers/gitlabhq/gitlab/latest/docs)
-is available as part of the official Terraform provider documentations.
-
-## Create a new cluster through IaC
-
-Learn how to [create a new cluster on Google Kubernetes Engine (GKE)](clusters/connect/new_gke_cluster.md).
-
-## Troubleshooting
-
-### `gitlab_group_share_group` resources not detected when subgroup state is refreshed
-
-The GitLab Terraform provider can fail to detect existing `gitlab_group_share_group` resources
-due to the issue ["User with permissions cannot retrieve `share_with_groups` from the API"](https://gitlab.com/gitlab-org/gitlab/-/issues/328428).
-This results in an error when running `terraform apply` because Terraform attempts to recreate an
-existing resource.
-
-For example, consider the following group/subgroup configuration:
-
-```plaintext
-parent-group
-├── subgroup-A
-└── subgroup-B
-```
-
-Where:
-
-- User `user-1` creates `parent-group`, `subgroup-A`, and `subgroup-B`.
-- `subgroup-A` is shared with `subgroup-B`.
-- User `terraform-user` is member of `parent-group` with inherited `owner` access to both subgroups.
-
-When the Terraform state is refreshed, the API query `GET /groups/:subgroup-A_id` issued by the provider does not return the
-details of `subgroup-B` in the `shared_with_groups` array. This leads to the error.
-
-To workaround this issue, make sure to apply one of the following conditions:
-
-1. The `terraform-user` creates all subgroup resources.
-1. Grant Maintainer or Owner role to the `terraform-user` user on `subgroup-B`.
-1. The `terraform-user` inherited access to `subgroup-B` and `subgroup-B` contains at least one project.
+- [Infrastructure as Code and GitOps](iac/index.md)
+- [Kubernetes clusters](../project/clusters/index.md)
+- [Runbooks](../project/clusters/runbooks/index.md)
diff --git a/doc/user/infrastructure/mr_integration.md b/doc/user/infrastructure/mr_integration.md
index 66e00bab6ce..29bf218b109 100644
--- a/doc/user/infrastructure/mr_integration.md
+++ b/doc/user/infrastructure/mr_integration.md
@@ -15,12 +15,17 @@ you can expose details from `terraform plan` runs directly into a merge request
enabling you to see statistics about the resources that Terraform creates,
modifies, or destroys.
-## Setup
+WARNING:
+Like any other job artifact, Terraform Plan data is [viewable by anyone with Guest access](../permissions.md) to the repository.
+Neither Terraform nor GitLab encrypts the plan file by default. If your Terraform Plan
+includes sensitive data such as passwords, access tokens, or certificates, we strongly
+recommend encrypting plan output or modifying the project visibility settings.
-NOTE:
-GitLab ships with a [pre-built CI template](index.md#quick-start) that uses GitLab Managed Terraform state and integrates Terraform changes into merge requests. We recommend customizing the pre-built image and relying on the `gitlab-terraform` helper provided within for a quick setup.
+## Configure Terraform report artifacts
-To manually configure a GitLab Terraform Report artifact requires the following steps:
+GitLab ships with a [pre-built CI template](iac/index.md#quick-start) that uses GitLab Managed Terraform state and integrates Terraform changes into merge requests. We recommend customizing the pre-built image and relying on the `gitlab-terraform` helper provided within for a quick setup.
+
+To manually configure a GitLab Terraform Report artifact:
1. For simplicity, let's define a few reusable variables to allow us to
refer to these files multiple times:
diff --git a/doc/user/infrastructure/terraform_state.md b/doc/user/infrastructure/terraform_state.md
index 57db2b47de4..179f9677b96 100644
--- a/doc/user/infrastructure/terraform_state.md
+++ b/doc/user/infrastructure/terraform_state.md
@@ -14,6 +14,11 @@ enable you to store the state file in a remote, shared store. GitLab uses the
to securely store the state files in local storage (the default) or
[the remote store of your choice](../../administration/terraform_state.md).
+WARNING:
+Using local storage (the default) on clustered deployments of GitLab will result in
+a split state across nodes, making subsequent executions of Terraform inconsistent.
+You are highly advised to use a remote storage in that case.
+
The GitLab managed Terraform state backend can store your Terraform state easily and
securely, and spares you from setting up additional remote resources like
Amazon S3 or Google Cloud Storage. Its features include:
@@ -83,6 +88,14 @@ local machine, this is a simple way to get started:
-backend-config="retry_wait_min=5"
```
+If you already have a GitLab-managed Terraform state, you can use the `terraform init` command
+with the prepopulated parameters values:
+
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Infrastructure > Terraform**.
+1. Next to the environment you want to use, select the [Actions menu](#managing-state-files)
+ **{ellipsis_v}** and select **Copy Terraform init command**.
+
You can now run `terraform plan` and `terraform apply` as you normally would.
### Get started using GitLab CI
@@ -222,7 +235,7 @@ An example setup is shown below:
```plaintext
example_remote_state_address=https://gitlab.com/api/v4/projects/<TARGET-PROJECT-ID>/terraform/state/<TARGET-STATE-NAME>
example_username=<GitLab username>
- example_access_token=<GitLab Personal Acceess Token>
+ example_access_token=<GitLab Personal Access Token>
```
1. Define the data source by adding the following code block in a `.tf` file (such as `data.tf`):
@@ -362,10 +375,8 @@ contains these fields:
state file is locked.
- **Pipeline**: A link to the most recent pipeline and its status.
- **Details**: Information about when the state file was created or changed.
-- **Actions**: Actions you can take on the state file, including downloading,
- locking, unlocking, or [removing](#remove-a-state-file) the state file and versions:
-
- ![Terraform state list](img/terraform_list_view_actions_v13_8.png)
+- **Actions**: Actions you can take on the state file, including copying the `terraform init` command,
+ downloading, locking, unlocking, or [removing](#remove-a-state-file) the state file and versions.
NOTE:
Additional improvements to the
diff --git a/doc/user/instance/clusters/index.md b/doc/user/instance/clusters/index.md
index 24fabbc5a42..5f51286cf7f 100644
--- a/doc/user/instance/clusters/index.md
+++ b/doc/user/instance/clusters/index.md
@@ -28,7 +28,7 @@ GitLab tries to match clusters in the following order:
- Instance-level clusters.
To be selected, the cluster must be enabled and
-match the [environment selector](../../../ci/environments/index.md#scoping-environments-with-specs).
+match the [environment selector](../../../ci/environments/index.md#scope-environments-with-specs).
## Cluster environments **(PREMIUM)**
diff --git a/doc/user/markdown.md b/doc/user/markdown.md
index fc278007463..4149307c45a 100644
--- a/doc/user/markdown.md
+++ b/doc/user/markdown.md
@@ -410,7 +410,7 @@ To create a task list, follow the format of an ordered or unordered list:
A table of contents is an unordered list that links to subheadings in the document.
To add a table of contents to a Markdown file, wiki page, issue request, or merge request
-description, add the `[[_TOC_]]` tag on its own line.
+description, add either the `[[_TOC_]]` or `[TOC]` tag on its own line.
NOTE:
You can add a table of contents to issues and merge requests, but you can't add one
@@ -511,7 +511,7 @@ This example links to `<wiki_root>/miscellaneous.md`:
GitLab Flavored Markdown renders GitLab-specific references. For example, you can reference
an issue, a commit, a team member, or even an entire project team. GitLab Flavored Markdown turns
-that reference into a link so you can navigate between them. All references to projects should use the
+that reference into a link so you can navigate between them. All references to projects should use the
**project slug** rather than the project name.
Additionally, GitLab Flavored Markdown recognizes certain cross-project references and also has a shorthand
diff --git a/doc/user/packages/composer_repository/index.md b/doc/user/packages/composer_repository/index.md
index b6eb2975374..2787aefdeca 100644
--- a/doc/user/packages/composer_repository/index.md
+++ b/doc/user/packages/composer_repository/index.md
@@ -63,7 +63,7 @@ a group's namespace, rather than a user's namespace. Composer packages
git commit -m 'Composer package test'
git tag v1.0.0
git remote add origin git@gitlab.example.com:<namespace>/<project-name>.git
- git push --set-upstream origin master
+ git push --set-upstream origin main
git push origin v1.0.0
```
diff --git a/doc/user/packages/conan_repository/index.md b/doc/user/packages/conan_repository/index.md
index c6cc7e7905a..d3e913edfda 100644
--- a/doc/user/packages/conan_repository/index.md
+++ b/doc/user/packages/conan_repository/index.md
@@ -210,13 +210,6 @@ conan user <gitlab_username or deploy_token_username> -r gitlab -p <personal_acc
Now when you run commands with `--remote=gitlab`, your username and password are
included in the requests.
-Alternatively, you can explicitly include your credentials in any given command.
-For example:
-
-```shell
-CONAN_LOGIN_USERNAME=<gitlab_username or deploy_token_username> CONAN_PASSWORD=<personal_access_token or deploy_token> conan upload Hello/0.1@mycompany/beta --all --remote=gitlab
-```
-
NOTE:
Because your authentication with GitLab expires on a regular basis, you may
occasionally need to re-enter your personal access token.
diff --git a/doc/user/packages/container_registry/index.md b/doc/user/packages/container_registry/index.md
index eecc17fd60d..18b86c4a357 100644
--- a/doc/user/packages/container_registry/index.md
+++ b/doc/user/packages/container_registry/index.md
@@ -236,7 +236,7 @@ combining the two to save us some typing in the `script` section.
Here's a more elaborate example that splits up the tasks into 4 pipeline stages,
including two tests that run in parallel. The `build` is stored in the container
registry and used by subsequent stages, downloading the image
-when needed. Changes to `master` also get tagged as `latest` and deployed using
+when needed. Changes to `main` also get tagged as `latest` and deployed using
an application-specific deploy script:
```yaml
@@ -285,14 +285,14 @@ release-image:
- docker tag $CONTAINER_TEST_IMAGE $CONTAINER_RELEASE_IMAGE
- docker push $CONTAINER_RELEASE_IMAGE
only:
- - master
+ - main
deploy:
stage: deploy
script:
- ./deploy.sh
only:
- - master
+ - main
```
NOTE:
@@ -436,7 +436,7 @@ build_image:
only:
- branches
except:
- - master
+ - main
delete_image:
image: docker:19.03.12
@@ -457,7 +457,7 @@ delete_image:
only:
- branches
except:
- - master
+ - main
```
NOTE:
@@ -488,8 +488,8 @@ To delete the underlying layers and images that aren't associated with any tags,
Cleanup policies can be run on all projects, with these exceptions:
- For GitLab.com, the project must have been created after 2020-02-22.
- Support for projects created earlier
- [is planned](https://gitlab.com/gitlab-org/gitlab/-/issues/196124).
+ Support for projects created earlier is tracked
+ [in this issue](https://gitlab.com/gitlab-org/gitlab/-/issues/196124).
- For self-managed GitLab instances, the project must have been created
in GitLab 12.8 or later. However, an administrator can enable the cleanup policy
for all projects (even those created before 12.8) in
@@ -605,10 +605,10 @@ Here are examples of regex patterns you may want to use:
v.+
```
-- Match only the tag named `master`:
+- Match only the tag named `main`:
```plaintext
- master
+ main
```
- Match tags that are either named or start with `release`:
@@ -617,10 +617,10 @@ Here are examples of regex patterns you may want to use:
release.*
```
-- Match tags that either start with `v`, are named `master`, or begin with `release`:
+- Match tags that either start with `v`, are named `main`, or begin with `release`:
```plaintext
- (?:v.+|master|release.*)
+ (?:v.+|main|release.*)
```
### Set cleanup limits to conserve resources
@@ -675,11 +675,11 @@ You can set, update, and disable the cleanup policies using the GitLab API.
Examples:
-- Select all tags, keep at least 1 tag per image, clean up any tag older than 14 days, run once a month, preserve any images with the name `master` and the policy is enabled:
+- Select all tags, keep at least 1 tag per image, clean up any tag older than 14 days, run once a month, preserve any images with the name `main` and the policy is enabled:
```shell
curl --request PUT --header 'Content-Type: application/json;charset=UTF-8' --header "PRIVATE-TOKEN: <your_access_token>" \
- --data-binary '{"container_expiration_policy_attributes":{"cadence":"1month","enabled":true,"keep_n":1,"older_than":"14d","name_regex":"","name_regex_delete":".*","name_regex_keep":".*-master"}}' \
+ --data-binary '{"container_expiration_policy_attributes":{"cadence":"1month","enabled":true,"keep_n":1,"older_than":"14d","name_regex":"","name_regex_delete":".*","name_regex_keep":".*-main"}}' \
"https://gitlab.example.com/api/v4/projects/2"
```
@@ -745,6 +745,47 @@ You can, however, remove the Container Registry for a project:
The **Packages & Registries > Container Registry** entry is removed from the project's sidebar.
+## Change visibility of the Container Registry
+
+By default, the Container Registry is visible to everyone with access to the project.
+You can, however, change the visibility of the Container Registry for a project.
+
+See the [Container Registry visibility permissions](#container-registry-visibility-permissions)
+for more details about the permissions that this setting grants to users.
+
+1. Go to your project's **Settings > General** page.
+1. Expand the section **Visibility, project features, permissions**.
+1. Under **Container Registry**, select an option from the dropdown:
+
+ - **Everyone With Access** (Default): The Container Registry is visible to everyone with access
+ to the project. If the project is public, the Container Registry is also public. If the project
+ is internal or private, the Container Registry is also internal or private.
+
+ - **Only Project Members**: The Container Registry is visible only to project members with
+ Reporter role or higher. This is similar to the behavior of a private project with Container
+ Registry visibility set to **Everyone With Access**.
+
+1. Select **Save changes**.
+
+## Container Registry visibility permissions
+
+The ability to view the Container Registry and pull images is controlled by the Container Registry's
+visibility permissions. You can change this through the [visibility setting on the UI](#change-visibility-of-the-container-registry)
+or the [API](../../../api/container_registry.md#change-the-visibility-of-the-container-registry).
+[Other permissions](../../permissions.md)
+such as updating the Container Registry, pushing or deleting images, and so on are not affected by
+this setting. However, disabling the Container Registry disables all Container Registry operations.
+
+| | | Anonymous<br/>(Everyone on internet) | Guest | Reporter, Developer, Maintainer, Owner |
+| -------------------- | --------------------- | --------- | ----- | ------------------------------------------ |
+| Public project with Container Registry visibility <br/> set to **Everyone With Access** (UI) or `enabled` (API) | View Container Registry <br/> and pull images | Yes | Yes | Yes |
+| Public project with Container Registry visibility <br/> set to **Only Project Members** (UI) or `private` (API) | View Container Registry <br/> and pull images | No | No | Yes |
+| Internal project with Container Registry visibility <br/> set to **Everyone With Access** (UI) or `enabled` (API) | View Container Registry <br/> and pull images | No | Yes | Yes |
+| Internal project with Container Registry visibility <br/> set to **Only Project Members** (UI) or `private` (API) | View Container Registry <br/> and pull images | No | No | Yes |
+| Private project with Container Registry visibility <br/> set to **Everyone With Access** (UI) or `enabled` (API) | View Container Registry <br/> and pull images | No | No | Yes |
+| Private project with Container Registry visibility <br/> set to **Only Project Members** (UI) or `private` (API) | View Container Registry <br/> and pull images | No | No | Yes |
+| Any project with Container Registry `disabled` | All operations on Container Registry | No | No | No |
+
## Manifest lists and garbage collection
Manifest lists are commonly used for creating multi-architecture images. If you rely on manifest
diff --git a/doc/user/packages/debian_repository/index.md b/doc/user/packages/debian_repository/index.md
index 59213ccb1a0..789902c03e3 100644
--- a/doc/user/packages/debian_repository/index.md
+++ b/doc/user/packages/debian_repository/index.md
@@ -6,7 +6,9 @@ info: To determine the technical writer assigned to the Stage/Group associated w
# Debian packages in the Package Registry **(FREE)**
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/5835) in GitLab 14.1.
+> - Debian API [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/42670) in GitLab 13.5.
+> - Debian group API [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/66188) in GitLab 14.2.
+> - [Deployed behind a feature flag](../../feature_flags.md), disabled by default.
WARNING:
The Debian package registry for GitLab is under development and isn't ready for production use due to
@@ -20,7 +22,7 @@ Project and Group packages are supported.
For documentation of the specific API endpoints that Debian package manager
clients use, see the [Debian API documentation](../../../api/packages/debian.md).
-## Enable Debian repository feature
+## Enable the Debian API **(FREE SELF)**
Debian repository support is still a work in progress. It's gated behind a feature flag that's
**disabled by default**.
@@ -39,10 +41,35 @@ To disable it:
Feature.disable(:debian_packages)
```
+## Enable the Debian group API **(FREE SELF)**
+
+The Debian group repository is also behind a second feature flag that is disabled by default.
+
+To enable it:
+
+```ruby
+Feature.enable(:debian_group_packages)
+```
+
+To disable it:
+
+```ruby
+Feature.disable(:debian_group_packages)
+```
+
## Build a Debian package
Creating a Debian package is documented [on the Debian Wiki](https://wiki.debian.org/Packaging).
+## Authenticate to the Package Registry
+
+To create a distribution, publish a package, or install a private package, you need one of the
+following:
+
+- [Personal access token](../../../api/index.md#personalproject-access-tokens)
+- [CI/CD job token](../../../api/index.md#gitlab-cicd-job-token)
+- [Deploy token](../../project/deploy_tokens/index.md)
+
## Create a Distribution
On the project-level, Debian packages are published using *Debian Distributions*. To publish
@@ -98,7 +125,7 @@ To upload these files, you can use `dput-ng >= 1.32` (Debian bullseye):
cat <<EOF > dput.cf
[gitlab]
method = https
-fqdn = <login>:<your_access_token>@gitlab.example.com
+fqdn = <username>:<your_access_token>@gitlab.example.com
incoming = /api/v4/projects/<project_id>/packages/debian
EOF
@@ -107,5 +134,27 @@ dput --config=dput.cf --unchecked --no-upload-log gitlab <your_package>.changes
## Install a package
-The Debian package registry for GitLab is under development, and isn't ready for production use. You
-cannot install packages from the registry. However, you can download files directly from the UI.
+To install a package:
+
+1. Configure the repository:
+
+ If you are using a private project, add your [credentials](#authenticate-to-the-package-registry) to your apt config:
+
+ ```shell
+ echo 'machine gitlab.example.com login <username> password <your_access_token>' \
+ | sudo tee /etc/apt/auth.conf.d/gitlab_project.conf
+ ```
+
+ Add your project as a source:
+
+ ```shell
+ echo 'deb [trusted=yes] https://gitlab.example.com/api/v4/projects/<project_id>/packages/debian <codename> <component1> <component2>' \
+ | sudo tee /etc/apt/sources.list.d/gitlab_project.list
+ sudo apt-get update
+ ```
+
+1. Install the package:
+
+ ```shell
+ sudo apt-get -y install -t <codename> <package-name>
+ ```
diff --git a/doc/user/packages/dependency_proxy/index.md b/doc/user/packages/dependency_proxy/index.md
index e2957aff756..c76b0a6810f 100644
--- a/doc/user/packages/dependency_proxy/index.md
+++ b/doc/user/packages/dependency_proxy/index.md
@@ -20,7 +20,7 @@ upstream image from a registry, acting as a pull-through cache.
## Prerequisites
-The Dependency Proxy must be [enabled by an administrator](../../../administration/packages/dependency_proxy.md).
+- The Dependency Proxy is enabled by default but can be [turned off by an administrator](../../../administration/packages/dependency_proxy.md).
### Supported images and packages
@@ -33,11 +33,6 @@ The following images and packages are supported.
For a list of planned additions, view the
[direction page](https://about.gitlab.com/direction/package/#dependency-proxy).
-## Enable the Dependency Proxy
-
-The Dependency Proxy is disabled by default.
-[Learn how an administrator can enable it](../../../administration/packages/dependency_proxy.md).
-
## View the Dependency Proxy
To view the Dependency Proxy:
@@ -68,11 +63,6 @@ The requirement to authenticate is a breaking change added in 13.7. An [administ
disable it](../../../administration/packages/dependency_proxy.md#disabling-authentication) if it
has disrupted your existing Dependency Proxy usage.
-WARNING:
-If [SSO enforcement](../../group/saml_sso/index.md#sso-enforcement)
-is enabled for your Group, requests to the dependency proxy will fail. This bug is being tracked in
-[this issue](https://gitlab.com/gitlab-org/gitlab/-/issues/294018).
-
Because the Dependency Proxy is storing Docker images in a space associated with your group,
you must authenticate against the Dependency Proxy.
@@ -89,6 +79,13 @@ You can authenticate using:
- Your GitLab username and password.
- A [personal access token](../../../user/profile/personal_access_tokens.md) with the scope set to `read_registry` and `write_registry`.
+- A [group deploy token](../../../user/project/deploy_tokens/index.md#group-deploy-token) with the scope set to `read_registry` and `write_registry`.
+
+#### SAML SSO
+
+When [SSO enforcement](../../group/saml_sso/index.md#sso-enforcement)
+is enabled, users must be signed-in through SSO before they can pull images through the Dependency
+Proxy.
#### Authenticate within CI/CD
@@ -123,7 +120,7 @@ Proxy manually without including the port:
docker pull gitlab.example.com:443/my-group/dependency_proxy/containers/alpine:latest
```
-You can also use [custom CI/CD variables](../../../ci/variables/index.md#custom-cicd-variables) to store and access your personal access token or other valid credentials.
+You can also use [custom CI/CD variables](../../../ci/variables/index.md#custom-cicd-variables) to store and access your personal access token or deploy token.
### Store a Docker image in Dependency Proxy cache
@@ -253,6 +250,10 @@ hub_docker_quota_check:
TOKEN=$(curl "https://auth.docker.io/token?service=registry.docker.io&scope=repository:ratelimitpreview/test:pull" | jq --raw-output .token) && curl --head --header "Authorization: Bearer $TOKEN" "https://registry-1.docker.io/v2/ratelimitpreview/test/manifests/latest" 2>&1
```
+## Use the NPM Dependency Proxy for NPM packages
+
+For information on this, see [Dependency Proxy](../npm_registry/#dependency-proxy).
+
## Troubleshooting
### Dependency Proxy Connection Failure
diff --git a/doc/user/packages/generic_packages/index.md b/doc/user/packages/generic_packages/index.md
index cb5258981be..aa6373b66cb 100644
--- a/doc/user/packages/generic_packages/index.md
+++ b/doc/user/packages/generic_packages/index.md
@@ -33,8 +33,6 @@ a [CI/CD job token](../../../api/index.md#gitlab-cicd-job-token), or a [deploy t
When you publish a package file, if the package does not exist, it is created.
-If a package with the same name, version, and filename already exists, it is also created. It does not overwrite the existing package.
-
Prerequisites:
- You need to [authenticate with the API](../../../api/index.md#authentication). If authenticating with a deploy token, it must be configured with the `write_package_registry` scope.
@@ -69,6 +67,30 @@ Example response:
}
```
+### Publishing a package with the same name or version
+
+When you publish a package with the same name and version as an existing package, the new package
+files are added to the existing package. You can still use the UI or API to access and view the
+existing package's older files. To delete these older package revisions, consider using the Packages
+API or the UI.
+
+#### Do not allow duplicate Generic packages
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/293755) in GitLab Free 13.12.
+
+To prevent users from publishing duplicate generic packages, you can use the [GraphQl API](../../../api/graphql/reference/index.md#packagesettings)
+or the UI.
+
+In the UI:
+
+1. For your group, go to **Settings > Packages & Registries**.
+1. Expand the **Package Registry** section.
+1. Turn on the **Reject duplicates** toggle.
+1. Optional. To allow some duplicate packages, in the **Exceptions** box enter a regex pattern that
+ matches the names and/or versions of packages to allow.
+
+Your changes are automatically saved.
+
## Download package file
Download a package file.
@@ -131,6 +153,18 @@ download:
- 'wget --header="JOB-TOKEN: $CI_JOB_TOKEN" ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/my_package/0.0.1/file.txt'
```
+When using a Windows runner with PowerShell, you must use `Invoke-WebRequest` or `Invoke-RestMethod`
+instead of `curl` in the `upload` and `download` stages.
+
+For example:
+
+```yaml
+upload:
+ stage: upload
+ script:
+ - Invoke-RestMethod -Headers @{ "JOB-TOKEN"="$CI_JOB_TOKEN" } -InFile path/to/file.txt -uri "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/my_package/0.0.1/file.txt" -Method put
+```
+
### Enable or disable generic packages in the Package Registry
Support for generic packages is under development but ready for production use.
diff --git a/doc/user/packages/helm_repository/index.md b/doc/user/packages/helm_repository/index.md
index 26d8bf76cd6..f98fc352ab5 100644
--- a/doc/user/packages/helm_repository/index.md
+++ b/doc/user/packages/helm_repository/index.md
@@ -8,10 +8,6 @@ info: To determine the technical writer assigned to the Stage/Group associated w
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/18997) in GitLab 14.1.
-WARNING:
-The Helm package registry for GitLab is under development and isn't ready for production use due to
-limited functionality.
-
Publish Helm packages in your project's Package Registry. Then install the
packages whenever you need to use them as a dependency.
@@ -20,7 +16,10 @@ clients use, see the [Helm API documentation](../../../api/packages/helm.md).
## Build a Helm package
-Creating a Helm package is documented [in the Helm documentation](https://helm.sh/docs/intro/using_helm/#creating-your-own-charts).
+Read more in the Helm documentation about these topics:
+
+- [Create your own Helm charts](https://helm.sh/docs/intro/using_helm/#creating-your-own-charts)
+- [Package a Helm chart into a chart archive](https://helm.sh/docs/helm/helm_package/#helm-package)
## Authenticate to the Helm repository
@@ -32,6 +31,10 @@ To authenticate to the Helm repository, you need either:
## Publish a package
+NOTE:
+You can publish Helm charts with duplicate names or versions. If duplicates exist, GitLab always
+returns the chart with the latest version.
+
Once built, a chart can be uploaded to the `stable` channel with `curl` or `helm-push`:
- With `curl`:
@@ -87,3 +90,12 @@ helm repo update
To update the Helm client with the most currently available charts.
See [Using Helm](https://helm.sh/docs/intro/using_helm/) for more information.
+
+## Troubleshooting
+
+### The chart is not visible in the Package Registry after uploading
+
+Check the [Sidekiq log](../../../administration/logs.md#sidekiqlog)
+for any related errors. If you see `Validation failed: Version is invalid`, it means that the
+version in your `Chart.yaml` file does not follow [Helm Chart versioning specifications](https://helm.sh/docs/topics/charts/#charts-and-versioning).
+To fix the error, use the correct version syntax and upload the chart again.
diff --git a/doc/user/packages/maven_repository/index.md b/doc/user/packages/maven_repository/index.md
index 70b9c28da76..17571047353 100644
--- a/doc/user/packages/maven_repository/index.md
+++ b/doc/user/packages/maven_repository/index.md
@@ -711,7 +711,7 @@ you can configure GitLab CI/CD to build new packages automatically.
### Create Maven packages with GitLab CI/CD by using Maven
-You can create a new package each time the `master` branch is updated.
+You can create a new package each time the `main` branch is updated.
1. Create a `ci_settings.xml` file that serves as Maven's `settings.xml` file.
@@ -768,7 +768,7 @@ You can create a new package each time the `master` branch is updated.
script:
- 'mvn deploy -s ci_settings.xml'
only:
- - master
+ - main
```
1. Push those files to your repository.
@@ -781,7 +781,7 @@ user's home location. In this example:
### Create Maven packages with GitLab CI/CD by using Gradle
-You can create a package each time the `master` branch
+You can create a package each time the `main` branch
is updated.
1. Authenticate with [a CI job token in Gradle](#authenticate-with-a-ci-job-token-in-gradle).
@@ -794,7 +794,7 @@ is updated.
script:
- 'gradle publish'
only:
- - master
+ - main
```
1. Commit files to your repository.
diff --git a/doc/user/packages/npm_registry/index.md b/doc/user/packages/npm_registry/index.md
index 1e5c294689b..fe7e6a0ea46 100644
--- a/doc/user/packages/npm_registry/index.md
+++ b/doc/user/packages/npm_registry/index.md
@@ -353,6 +353,13 @@ In this configuration:
You cannot publish a package if a package of the same name and version already exists.
You must delete the existing package first.
+This rule has a different impact depending on the package name:
+
+- For packages following the [naming convention](#package-naming-convention), you can't publish a
+ package with a duplicate name and version to the root namespace.
+- For packages not following the [naming convention](#package-naming-convention), you can't publish
+ a package with a duplicate name and version to the project you target with the upload.
+
This aligns with npmjs.org's behavior. However, npmjs.org does not ever let you publish
the same version more than once, even if it has been deleted.
@@ -594,3 +601,8 @@ The GitLab npm repository supports the following commands for the npm CLI (`npm`
- `npm view`: Show package metadata.
- `yarn add`: Install an npm package.
- `yarn update`: Update your dependencies.
+
+## Dependency Proxy
+
+The NPM Dependency Proxy for NPM packages isn't available. For more information, see
+[this epic](https://gitlab.com/groups/gitlab-org/-/epics/3608).
diff --git a/doc/user/packages/nuget_repository/index.md b/doc/user/packages/nuget_repository/index.md
index 46cfd763668..40e8b74c2b6 100644
--- a/doc/user/packages/nuget_repository/index.md
+++ b/doc/user/packages/nuget_repository/index.md
@@ -322,7 +322,7 @@ If you're using NuGet with GitLab CI/CD, a CI job token can be used instead of a
personal access token or deploy token. The token inherits the permissions of the
user that generates the pipeline.
-This example shows how to create a new package each time the `master` branch is
+This example shows how to create a new package each time the `main` branch is
updated:
1. Add a `deploy` job to your `.gitlab-ci.yml` file:
@@ -340,7 +340,7 @@ updated:
- dotnet nuget add source "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/nuget/index.json" --name gitlab --username gitlab-ci-token --password $CI_JOB_TOKEN --store-password-in-clear-text
- dotnet nuget push "bin/Release/*.nupkg" --source gitlab
only:
- - master
+ - main
```
1. Commit the changes and push it to your GitLab repository to trigger a new CI/CD build.
@@ -423,6 +423,21 @@ CLI (`dotnet`):
- `nuget install`: Install a package from the registry.
- `dotnet add`: Install a package from the registry.
+## Example project
+
+For an example, see the Guided Exploration project
+[Utterly Automated Software and Artifact Versioning with GitVersion](https://gitlab.com/guided-explorations/devops-patterns/utterly-automated-versioning).
+This project:
+
+- Generates NuGet packages by the `msbuild` method.
+- Generates NuGet packages by the `nuget.exe` method.
+- Uses GitLab releases and `release-cli` in connection with NuGet packaging.
+- Uses a tool called [GitVersion](https://gitversion.net/)
+ to automatically determine and increment versions for the NuGet package in complex repositories.
+
+You can copy this example project to your own group or instance for testing. See the project page
+for more details on what other GitLab CI patterns are demonstrated.
+
## Troubleshooting
To improve performance, NuGet caches files related to a package. If you encounter issues, clear the
diff --git a/doc/user/packages/pypi_repository/index.md b/doc/user/packages/pypi_repository/index.md
index 30d61770094..2d54cfc5f7d 100644
--- a/doc/user/packages/pypi_repository/index.md
+++ b/doc/user/packages/pypi_repository/index.md
@@ -181,7 +181,9 @@ username = <your_personal_access_token_name>
password = <your_personal_access_token>
```
-- Your project ID is on your project's home page.
+The `<project_id>` is either the project's
+[URL-encoded](../../../api/index.md#namespaced-path-encoding)
+path (for example, `group%2Fproject`), or the project's ID (for example `42`).
### Authenticate with a deploy token
@@ -198,7 +200,9 @@ username = <deploy token username>
password = <deploy token>
```
-Your project ID is on your project's home page.
+The `<project_id>` is either the project's
+[URL-encoded](../../../api/index.md#namespaced-path-encoding)
+path (for example, `group%2Fproject`), or the project's ID (for example `42`).
### Authenticate with a CI job token
@@ -324,6 +328,11 @@ more than once, a `400 Bad Request` error occurs.
## Install a PyPI package
+In [GitLab 14.2 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/233413),
+when a PyPI package is not found in the Package Registry, the request is forwarded to [pypi.org](https://pypi.org/).
+
+Administrators can disable this behavior in the [Continuous Integration settings](../../admin_area/settings/continuous_integration.md).
+
### Install from the project level
To install the latest version of a package, use the following command:
@@ -335,7 +344,8 @@ pip install --index-url https://<personal_access_token_name>:<personal_access_to
- `<package_name>` is the package name.
- `<personal_access_token_name>` is a personal access token name with the `read_api` scope.
- `<personal_access_token>` is a personal access token with the `read_api` scope.
-- `<project_id>` is the project ID.
+- `<project_id>` is either the project's [URL-encoded](../../../api/index.md#namespaced-path-encoding)
+ path (for example, `group%2Fproject`), or the project's ID (for example `42`).
In these commands, you can use `--extra-index-url` instead of `--index-url`. However, using
`--extra-index-url` makes you vulnerable to dependency confusion attacks because it checks the PyPi
diff --git a/doc/user/packages/terraform_module_registry/index.md b/doc/user/packages/terraform_module_registry/index.md
index 1365f401506..e3b9563a143 100644
--- a/doc/user/packages/terraform_module_registry/index.md
+++ b/doc/user/packages/terraform_module_registry/index.md
@@ -35,8 +35,8 @@ PUT /projects/:id/packages/terraform/modules/:module_name/:module_system/:module
| Attribute | Type | Required | Description |
| -------------------| --------------- | ---------| -------------------------------------------------------------------------------------------------------------------------------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](../../../api/index.md#namespaced-path-encoding). |
-| `module_name` | string | yes | The package name. It can contain only lowercase letters (`a-z`), uppercase letter (`A-Z`), numbers (`0-9`), or hyphens (`-`).
-| `module_system` | string | yes | The package name. It can contain only lowercase letters (`a-z`), uppercase letter (`A-Z`), numbers (`0-9`), or hyphens (`-`).
+| `module_name` | string | yes | The package name. It can contain only lowercase letters (`a-z`), uppercase letter (`A-Z`), numbers (`0-9`), or hyphens (`-`) and cannot exceed 64 characters.
+| `module_system` | string | yes | The package system. It can contain only lowercase letters (`a-z`) and numbers (`0-9`), and cannot exceed 64 characters.
| `module_version` | string | yes | The package version. It must be valid according to the [Semantic Versioning Specification](https://semver.org/).
Provide the file content in the request body.
diff --git a/doc/user/permissions.md b/doc/user/permissions.md
index 0c3428ee7ee..81681ec1303 100644
--- a/doc/user/permissions.md
+++ b/doc/user/permissions.md
@@ -33,8 +33,7 @@ usernames. A GitLab administrator can configure the GitLab instance to
## Project members permissions
-NOTE:
-In GitLab 11.0, the Master role was renamed to Maintainer.
+> The Master role was renamed to Maintainer in GitLab 11.0.
The Owner role is only available at the group or personal namespace level (and for instance administrators) and is inherited by its projects.
While Maintainer is the highest project-level role, some actions can only be performed by a personal namespace or group owner, or an instance administrator, who receives all permissions.
@@ -42,160 +41,163 @@ For more information, see [projects members documentation](project/members/index
The following table lists project permissions available for each role:
-| Action | Guest | Reporter | Developer |Maintainer| Owner |
-|---------------------------------------------------|---------|------------|-------------|----------|--------|
-| Download project | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ |
-| Leave comments | ✓ | ✓ | ✓ | ✓ | ✓ |
+<!-- Keep this table sorted: first, by minimum role, then alphabetically. -->
+
+| Action | Guest | Reporter | Developer | Maintainer | Owner |
+|-------------------------------------------------------------------------------------------------------------------------|----------|----------|-----------|------------|-------|
+| [Analytics](analytics/index.md):<br>View issue analytics **(PREMIUM)** | ✓ | ✓ | ✓ | ✓ | ✓ |
+| [Analytics](analytics/index.md):<br>View [merge request analytics](analytics/merge_request_analytics.md) **(PREMIUM)** | ✓ | ✓ | ✓ | ✓ | ✓ |
+| [Analytics](analytics/index.md):<br>View value stream analytics | ✓ | ✓ | ✓ | ✓ | ✓ |
+| [Analytics](analytics/index.md):<br>View [DORA metrics](analytics/ci_cd_analytics.md) | | ✓ | ✓ | ✓ | ✓ |
+| [Analytics](analytics/index.md):<br>View [CI/CD analytics](analytics/ci_cd_analytics.md) | | ✓ | ✓ | ✓ | ✓ |
+| [Analytics](analytics/index.md):<br>View [code review analytics](analytics/code_review_analytics.md) **(PREMIUM)** | | ✓ | ✓ | ✓ | ✓ |
+| [Analytics](analytics/index.md):<br>View [repository analytics](analytics/repository_analytics.md) | | ✓ | ✓ | ✓ | ✓ |
+| [Application security](application_security/index.md):<br>View licenses in [dependency list](application_security/dependency_list/index.md) **(ULTIMATE)** | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ |
+| [Application security](application_security/index.md):<br>Create and run [on-demand DAST scans](application_security/dast/index.md#on-demand-scans) **(ULTIMATE)** | | | ✓ | ✓ | ✓ |
+| [Application security](application_security/index.md):<br>Manage [security policy](application_security/policies/index.md) **(ULTIMATE)** | | | ✓ | ✓ | ✓ |
+| [Application security](application_security/index.md):<br>View [dependency list](application_security/dependency_list/index.md) **(ULTIMATE)** | | | ✓ | ✓ | ✓ |
+| [Application security](application_security/index.md):<br>View [threats list](application_security/threat_monitoring/index.md#threat-monitoring) **(ULTIMATE)** | | | ✓ | ✓ | ✓ |
+| [Application security](application_security/index.md):<br>Create a [CVE ID Request](application_security/cve_id_request.md) **(FREE SAAS)** | | | | ✓ | ✓ |
+| [Application security](application_security/index.md):<br>Create or assign [security policy project](application_security/policies/index.md) **(ULTIMATE)** | | | | | ✓ |
+| [CI/CD](../ci/README.md):<br>Download and browse job artifacts | ✓ (*3*) | ✓ | ✓ | ✓ | ✓ |
+| [CI/CD](../ci/README.md):<br>View a job log | ✓ (*3*) | ✓ | ✓ | ✓ | ✓ |
+| [CI/CD](../ci/README.md):<br>View list of jobs | ✓ (*3*) | ✓ | ✓ | ✓ | ✓ |
+| [CI/CD](../ci/README.md):<br>View [environments](../ci/environments/index.md) | | ✓ | ✓ | ✓ | ✓ |
+| [CI/CD](../ci/README.md):<br>Cancel and retry jobs | | | ✓ | ✓ | ✓ |
+| [CI/CD](../ci/README.md):<br>Create new [environments](../ci/environments/index.md) | | | ✓ | ✓ | ✓ |
+| [CI/CD](../ci/README.md):<br>Run CI/CD pipeline against a protected branch | | | ✓ (*5*) | ✓ | ✓ |
+| [CI/CD](../ci/README.md):<br>Stop [environments](../ci/environments/index.md) | | | ✓ | ✓ | ✓ |
+| [CI/CD](../ci/README.md):<br>View a job with [debug logging](../ci/variables/index.md#debug-logging) | | | ✓ | ✓ | ✓ |
+| [CI/CD](../ci/README.md):<br>Manage CI/CD variables | | | | ✓ | ✓ |
+| [CI/CD](../ci/README.md):<br>Manage job triggers | | | | ✓ | ✓ |
+| [CI/CD](../ci/README.md):<br>Manage runners | | | | ✓ | ✓ |
+| [CI/CD](../ci/README.md):<br>Run Web IDE's Interactive Web Terminals **(ULTIMATE ONLY)** | | | | ✓ | ✓ |
+| [CI/CD](../ci/README.md):<br>Use [environment terminals](../ci/environments/index.md#web-terminals) | | | | ✓ | ✓ |
+| [CI/CD](../ci/README.md):<br>Delete pipelines | | | | | ✓ |
+| [Issues](project/issues/index.md):<br>Add Labels | ✓ (*16*) | ✓ | ✓ | ✓ | ✓ |
+| [Issues](project/issues/index.md):<br>Assign | ✓ (*16*) | ✓ | ✓ | ✓ | ✓ |
+| [Issues](project/issues/index.md):<br>Create | ✓ | ✓ | ✓ | ✓ | ✓ |
+| [Issues](project/issues/index.md):<br>Create [confidential issues](project/issues/confidential_issues.md) | ✓ | ✓ | ✓ | ✓ | ✓ |
+| [Issues](project/issues/index.md):<br>View [Design Management](project/issues/design_management.md) pages | ✓ | ✓ | ✓ | ✓ | ✓ |
+| [Issues](project/issues/index.md):<br>View related issues | ✓ | ✓ | ✓ | ✓ | ✓ |
+| [Issues](project/issues/index.md):<br>Set weight | ✓ (*16*) | ✓ | ✓ | ✓ | ✓ |
+| [Issues](project/issues/index.md):<br>View [confidential issues](project/issues/confidential_issues.md) | (*2*) | ✓ | ✓ | ✓ | ✓ |
+| [Issues](project/issues/index.md):<br>Lock threads | | ✓ | ✓ | ✓ | ✓ |
+| [Issues](project/issues/index.md):<br>Manage related issues | | ✓ | ✓ | ✓ | ✓ |
+| [Issues](project/issues/index.md):<br>Manage tracker | | ✓ | ✓ | ✓ | ✓ |
+| [Issues](project/issues/index.md):<br>Move issues (*15*) | | ✓ | ✓ | ✓ | ✓ |
+| [Issues](project/issues/index.md):<br>Set issue [time tracking](project/time_tracking.md) estimate and time spent | | ✓ | ✓ | ✓ | ✓ |
+| [Issues](project/issues/index.md):<br>Upload [Design Management](project/issues/design_management.md) files | | | ✓ | ✓ | ✓ |
+| [Issues](project/issues/index.md):<br>Delete | | | | | ✓ |
+| [Merge requests](project/merge_requests/index.md):<br>Assign reviewer | | ✓ | ✓ | ✓ | ✓ |
+| [Merge requests](project/merge_requests/index.md):<br>See list | | ✓ | ✓ | ✓ | ✓ |
+| [Merge requests](project/merge_requests/index.md):<br>Apply code change suggestions | | | ✓ | ✓ | ✓ |
+| [Merge requests](project/merge_requests/index.md):<br>Approve (*9*) | | | ✓ | ✓ | ✓ |
+| [Merge requests](project/merge_requests/index.md):<br>Assign | | | ✓ | ✓ | ✓ |
+| [Merge requests](project/merge_requests/index.md):<br>Create | | | ✓ | ✓ | ✓ |
+| [Merge requests](project/merge_requests/index.md):<br>Add labels | | | ✓ | ✓ | ✓ |
+| [Merge requests](project/merge_requests/index.md):<br>Lock threads | | | ✓ | ✓ | ✓ |
+| [Merge requests](project/merge_requests/index.md):<br>Manage or accept | | | ✓ | ✓ | ✓ |
+| [Merge requests](project/merge_requests/index.md):<br>Manage merge approval rules (project settings) | | | | ✓ | ✓ |
+| [Merge requests](project/merge_requests/index.md):<br>Delete | | | | | ✓ |
+| [Projects](project/index.md):<br>Download project | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ |
+| [Projects](project/index.md):<br>Leave comments | ✓ | ✓ | ✓ | ✓ | ✓ |
+| [Projects](project/index.md):<br>Reposition comments on images (posted by any user) | ✓ (*10*) | ✓ (*10*) | ✓ (*10*) | ✓ | ✓ |
+| [Projects](project/index.md):<br>View Insights **(ULTIMATE)** | ✓ | ✓ | ✓ | ✓ | ✓ |
+| [Projects](project/index.md):<br>View Requirements **(ULTIMATE)** | ✓ | ✓ | ✓ | ✓ | ✓ |
+| [Projects](project/index.md):<br>View [time tracking](project/time_tracking.md) reports | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ |
+| [Projects](project/index.md):<br>View [wiki](project/wiki/index.md) pages | ✓ | ✓ | ✓ | ✓ | ✓ |
+| [Projects](project/index.md):<br>Create [snippets](snippets.md) | | ✓ | ✓ | ✓ | ✓ |
+| [Projects](project/index.md):<br>Manage labels | | ✓ | ✓ | ✓ | ✓ |
+| [Projects](project/index.md):<br>View project statistics | | ✓ | ✓ | ✓ | ✓ |
+| [Projects](project/index.md):<br>Create, edit, delete [milestones](project/milestones/index.md). | | | ✓ | ✓ | ✓ |
+| [Projects](project/index.md):<br>Create, edit [wiki](project/wiki/index.md) pages | | | ✓ | ✓ | ✓ |
+| [Projects](project/index.md):<br>Enable Review Apps | | | ✓ | ✓ | ✓ |
+| [Projects](project/index.md):<br>View project [Audit Events](../administration/audit_events.md) | | | ✓ (*11*) | ✓ | ✓ |
+| [Projects](project/index.md):<br>Add deploy keys | | | | ✓ | ✓ |
+| [Projects](project/index.md):<br>Add new team members | | | | ✓ | ✓ |
+| [Projects](project/index.md):<br>Change [project features visibility](../public_access/public_access.md) level | | | | ✓ (14) | ✓ |
+| [Projects](project/index.md):<br>Delete [wiki](project/wiki/index.md) pages | | | | ✓ | ✓ |
+| [Projects](project/index.md):<br>Edit comments (posted by any user) | | | | ✓ | ✓ |
+| [Projects](project/index.md):<br>Edit project badges | | | | ✓ | ✓ |
+| [Projects](project/index.md):<br>Edit project settings | | | | ✓ | ✓ |
+| [Projects](project/index.md):<br>Export project | | | | ✓ | ✓ |
+| [Projects](project/index.md):<br>Manage [project access tokens](project/settings/project_access_tokens.md) **(FREE SELF)** **(PREMIUM SAAS)** (*12*) | | | | ✓ | ✓ |
+| [Projects](project/index.md):<br>Manage [Project Operations](../operations/index.md) | | | | ✓ | ✓ |
+| [Projects](project/index.md):<br>Share (invite) projects with groups | | | | ✓ (*8*) | ✓ (*8*) |
+| [Projects](project/index.md):<br>View 2FA status of members | | | | ✓ | ✓ |
+| [Projects](project/index.md):<br>Administer project compliance frameworks | | | | | ✓ |
+| [Projects](project/index.md):<br>Archive project | | | | | ✓ |
+| [Projects](project/index.md):<br>Change project visibility level | | | | | ✓ |
+| [Projects](project/index.md):<br>Delete project | | | | | ✓ |
+| [Projects](project/index.md):<br>Disable notification emails | | | | | ✓ |
+| [Projects](project/index.md):<br>Rename project | | | | | ✓ |
+| [Projects](project/index.md):<br>Transfer project to another namespace | | | | | ✓ |
+| [Security dashboard](application_security/security_dashboard/index.md):<br>View Security reports **(ULTIMATE)** | ✓ (*3*) | ✓ | ✓ | ✓ | ✓ |
+| [Security dashboard](application_security/security_dashboard/index.md):<br>Create issue from vulnerability finding **(ULTIMATE)** | | | ✓ | ✓ | ✓ |
+| [Security dashboard](application_security/security_dashboard/index.md):<br>Create vulnerability from vulnerability finding **(ULTIMATE)** | | | ✓ | ✓ | ✓ |
+| [Security dashboard](application_security/security_dashboard/index.md):<br>Dismiss vulnerability **(ULTIMATE)** | | | ✓ | ✓ | ✓ |
+| [Security dashboard](application_security/security_dashboard/index.md):<br>Dismiss vulnerability finding **(ULTIMATE)** | | | ✓ | ✓ | ✓ |
+| [Security dashboard](application_security/security_dashboard/index.md):<br>Resolve vulnerability **(ULTIMATE)** | | | ✓ | ✓ | ✓ |
+| [Security dashboard](application_security/security_dashboard/index.md):<br>Revert vulnerability to detected state **(ULTIMATE)** | | | ✓ | ✓ | ✓ |
+| [Security dashboard](application_security/security_dashboard/index.md):<br>Use security dashboard **(ULTIMATE)** | | | ✓ | ✓ | ✓ |
+| [Security dashboard](application_security/security_dashboard/index.md):<br>View vulnerability **(ULTIMATE)** | | | ✓ | ✓ | ✓ |
+| [Security dashboard](application_security/security_dashboard/index.md):<br>View vulnerability findings in [dependency list](application_security/dependency_list/index.md) **(ULTIMATE)** | | | ✓ | ✓ | ✓ |
+| Manage user-starred metrics dashboards (*7*) | ✓ | ✓ | ✓ | ✓ | ✓ |
+| Pull project code | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ |
+| View [Releases](project/releases/index.md) | ✓ (*6*) | ✓ | ✓ | ✓ | ✓ |
| View allowed and denied licenses **(ULTIMATE)** | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ |
+| View GitLab Pages protected by [access control](project/pages/introduction.md#gitlab-pages-access-control) | ✓ | ✓ | ✓ | ✓ | ✓ |
| View License Compliance reports **(ULTIMATE)** | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ |
-| View Security reports **(ULTIMATE)** | ✓ (*3*) | ✓ | ✓ | ✓ | ✓ |
-| View Dependency list **(ULTIMATE)** | | | ✓ | ✓ | ✓ |
-| View License list **(ULTIMATE)** | | ✓ | ✓ | ✓ | ✓ |
-| View [Threats list](application_security/threat_monitoring/#threat-monitoring) **(ULTIMATE)** | | | ✓ | ✓ | ✓ |
-| Create and run [on-demand DAST scans](application_security/dast/#on-demand-scans) | | | ✓ | ✓ | ✓ |
-| View licenses in Dependency list **(ULTIMATE)** | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ |
-| View [Design Management](project/issues/design_management.md) pages | ✓ | ✓ | ✓ | ✓ | ✓ |
| View project code | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ |
-| Pull project code | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ |
-| View GitLab Pages protected by [access control](project/pages/introduction.md#gitlab-pages-access-control) | ✓ | ✓ | ✓ | ✓ | ✓ |
-| View wiki pages | ✓ | ✓ | ✓ | ✓ | ✓ |
-| See a list of jobs | ✓ (*3*) | ✓ | ✓ | ✓ | ✓ |
-| See a job log | ✓ (*3*) | ✓ | ✓ | ✓ | ✓ |
-| See a job with [debug logging](../ci/variables/index.md#debug-logging) | | | ✓ | ✓ | ✓ |
-| Download and browse job artifacts | ✓ (*3*) | ✓ | ✓ | ✓ | ✓ |
-| Create confidential issue | ✓ | ✓ | ✓ | ✓ | ✓ |
-| Create new issue | ✓ | ✓ | ✓ | ✓ | ✓ |
-| See linked issues | ✓ | ✓ | ✓ | ✓ | ✓ |
-| View [Releases](project/releases/index.md) | ✓ (*6*) | ✓ | ✓ | ✓ | ✓ |
-| View requirements **(ULTIMATE)** | ✓ | ✓ | ✓ | ✓ | ✓ |
-| View Insights **(ULTIMATE)** | ✓ | ✓ | ✓ | ✓ | ✓ |
-| View Issue analytics **(PREMIUM)** | ✓ | ✓ | ✓ | ✓ | ✓ |
-| View Merge Request analytics **(PREMIUM)** | ✓ | ✓ | ✓ | ✓ | ✓ |
-| View Value Stream analytics | ✓ | ✓ | ✓ | ✓ | ✓ |
-| Manage user-starred metrics dashboards (*7*) | ✓ | ✓ | ✓ | ✓ | ✓ |
-| View confidential issues | (*2*) | ✓ | ✓ | ✓ | ✓ |
-| Assign issues | | ✓ | ✓ | ✓ | ✓ |
-| Assign reviewers | | ✓ | ✓ | ✓ | ✓ |
-| Label issues | | ✓ | ✓ | ✓ | ✓ |
-| Set issue weight | | ✓ | ✓ | ✓ | ✓ |
-| [Set issue estimate and record time spent](project/time_tracking.md) | | ✓ | ✓ | ✓ | ✓ |
-| View a time tracking report | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ |
-| Lock issue threads | | ✓ | ✓ | ✓ | ✓ |
-| Manage issue tracker | | ✓ | ✓ | ✓ | ✓ |
-| Manage linked issues | | ✓ | ✓ | ✓ | ✓ |
-| Manage labels | | ✓ | ✓ | ✓ | ✓ |
-| Create code snippets | | ✓ | ✓ | ✓ | ✓ |
-| See a commit status | | ✓ | ✓ | ✓ | ✓ |
-| See a container registry | | ✓ | ✓ | ✓ | ✓ |
-| See environments | | ✓ | ✓ | ✓ | ✓ |
-| See [DORA metrics](analytics/ci_cd_analytics.md) | | ✓ | ✓ | ✓ | ✓ |
-| See a list of merge requests | | ✓ | ✓ | ✓ | ✓ |
-| View CI/CD analytics | | ✓ | ✓ | ✓ | ✓ |
-| View Code Review analytics **(PREMIUM)** | | ✓ | ✓ | ✓ | ✓ |
-| View Repository analytics | | ✓ | ✓ | ✓ | ✓ |
-| View Error Tracking list | | ✓ | ✓ | ✓ | ✓ |
-| View metrics dashboard annotations | | ✓ | ✓ | ✓ | ✓ |
+| Archive [test case](../ci/test_cases/index.md) | | ✓ | ✓ | ✓ | ✓ |
| Archive/reopen requirements **(ULTIMATE)** | | ✓ | ✓ | ✓ | ✓ |
+| Create new [test case](../ci/test_cases/index.md) | | ✓ | ✓ | ✓ | ✓ |
| Create/edit requirements **(ULTIMATE)** | | ✓ | ✓ | ✓ | ✓ |
| Import/export requirements **(ULTIMATE)** | | ✓ | ✓ | ✓ | ✓ |
-| Create new [test case](../ci/test_cases/index.md) | | ✓ | ✓ | ✓ | ✓ |
-| Archive [test case](../ci/test_cases/index.md) | | ✓ | ✓ | ✓ | ✓ |
| Move [test case](../ci/test_cases/index.md) | | ✓ | ✓ | ✓ | ✓ |
+| Pull [packages](packages/index.md) | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ |
| Reopen [test case](../ci/test_cases/index.md) | | ✓ | ✓ | ✓ | ✓ |
-| Pull [packages](packages/index.md) | | ✓ | ✓ | ✓ | ✓ |
-| View project statistics | | ✓ | ✓ | ✓ | ✓ |
-| Publish [packages](packages/index.md) | | | ✓ | ✓ | ✓ |
-| Create/edit/delete a Cleanup policy | | | ✓ | ✓ | ✓ |
-| Upload [Design Management](project/issues/design_management.md) files | | | ✓ | ✓ | ✓ |
-| Create/edit/delete [releases](project/releases/index.md)| | | ✓ (*13*) | ✓ (*13*) | ✓ (*13*) |
-| Manage merge approval rules (project settings) | | | | ✓ | ✓ |
-| Create new merge request | | | ✓ | ✓ | ✓ |
+| See a commit status | | ✓ | ✓ | ✓ | ✓ |
+| View Error Tracking list | | ✓ | ✓ | ✓ | ✓ |
+| View License list **(ULTIMATE)** | | ✓ | ✓ | ✓ | ✓ |
+| View metrics dashboard annotations | | ✓ | ✓ | ✓ | ✓ |
+| Add tags | | | ✓ | ✓ | ✓ |
| Create new branches | | | ✓ | ✓ | ✓ |
-| Push to non-protected branches | | | ✓ | ✓ | ✓ |
+| Create or update commit status | | | ✓ (*5*) | ✓ | ✓ |
+| Create/edit/delete [releases](project/releases/index.md)| | | ✓ (*13*) | ✓ (*13*) | ✓ (*13*) |
+| Create/edit/delete a Cleanup policy | | | ✓ | ✓ | ✓ |
+| Create/edit/delete metrics dashboard annotations | | | ✓ | ✓ | ✓ |
| Force push to non-protected branches | | | ✓ | ✓ | ✓ |
-| Remove non-protected branches | | | ✓ | ✓ | ✓ |
-| Assign merge requests | | | ✓ | ✓ | ✓ |
-| Label merge requests | | | ✓ | ✓ | ✓ |
-| Lock merge request threads | | | ✓ | ✓ | ✓ |
-| Approve merge requests (*9*) | | | ✓ | ✓ | ✓ |
-| Manage/Accept merge requests | | | ✓ | ✓ | ✓ |
-| Create new environments | | | ✓ | ✓ | ✓ |
-| Stop environments | | | ✓ | ✓ | ✓ |
-| Enable Review Apps | | | ✓ | ✓ | ✓ |
-| View Pods logs | | | ✓ | ✓ | ✓ |
+| Manage Feature Flags **(PREMIUM)** | | | ✓ | ✓ | ✓ |
+| Publish [packages](packages/index.md) | | | ✓ | ✓ | ✓ |
+| Push to non-protected branches | | | ✓ | ✓ | ✓ |
| Read Terraform state | | | ✓ | ✓ | ✓ |
-| Add tags | | | ✓ | ✓ | ✓ |
-| Cancel and retry jobs | | | ✓ | ✓ | ✓ |
-| Create or update commit status | | | ✓ (*5*) | ✓ | ✓ |
-| Update a container registry | | | ✓ | ✓ | ✓ |
| Remove a container registry image | | | ✓ | ✓ | ✓ |
-| Create/edit/delete project milestones | | | ✓ | ✓ | ✓ |
-| Use security dashboard **(ULTIMATE)** | | | ✓ | ✓ | ✓ |
-| View vulnerability findings in Dependency list **(ULTIMATE)** | | | ✓ | ✓ | ✓ |
-| Create issue from vulnerability finding **(ULTIMATE)** | | | ✓ | ✓ | ✓ |
-| Dismiss vulnerability finding **(ULTIMATE)** | | | ✓ | ✓ | ✓ |
-| View vulnerability **(ULTIMATE)** | | | ✓ | ✓ | ✓ |
-| Create vulnerability from vulnerability finding **(ULTIMATE)** | | | ✓ | ✓ | ✓ |
-| Resolve vulnerability **(ULTIMATE)** | | | ✓ | ✓ | ✓ |
-| Dismiss vulnerability **(ULTIMATE)** | | | ✓ | ✓ | ✓ |
-| Revert vulnerability to detected state **(ULTIMATE)** | | | ✓ | ✓ | ✓ |
-| Apply code change suggestions | | | ✓ | ✓ | ✓ |
-| Create and edit wiki pages | | | ✓ | ✓ | ✓ |
+| Remove non-protected branches | | | ✓ | ✓ | ✓ |
| Rewrite/remove Git tags | | | ✓ | ✓ | ✓ |
-| Manage Feature Flags **(PREMIUM)** | | | ✓ | ✓ | ✓ |
-| Create/edit/delete metrics dashboard annotations | | | ✓ | ✓ | ✓ |
-| Run CI/CD pipeline against a protected branch | | | ✓ (*5*) | ✓ | ✓ |
+| Update a container registry | | | ✓ | ✓ | ✓ |
+| View Pods logs | | | ✓ | ✓ | ✓ |
+| Configure project hooks | | | | ✓ | ✓ |
| Delete [packages](packages/index.md) | | | | ✓ | ✓ |
-| Request a CVE ID **(FREE SAAS)** | | | | ✓ | ✓ |
-| Use environment terminals | | | | ✓ | ✓ |
-| Run Web IDE's Interactive Web Terminals **(ULTIMATE SELF)** | | | | ✓ | ✓ |
-| Add new team members | | | | ✓ | ✓ |
| Enable/disable branch protection | | | | ✓ | ✓ |
-| Push to protected branches | | | | ✓ | ✓ |
-| Turn on/off protected branch push for developers | | | | ✓ | ✓ |
| Enable/disable tag protections | | | | ✓ | ✓ |
-| Edit project settings | | | | ✓ | ✓ |
-| Edit project badges | | | | ✓ | ✓ |
-| Export project | | | | ✓ | ✓ |
-| Share (invite) projects with groups | | | | ✓ (*8*) | ✓ (*8*)|
-| Add deploy keys to project | | | | ✓ | ✓ |
-| Configure project hooks | | | | ✓ | ✓ |
-| Manage runners | | | | ✓ | ✓ |
-| Manage job triggers | | | | ✓ | ✓ |
-| Manage CI/CD variables | | | | ✓ | ✓ |
+| Manage [push rules](../push_rules/push_rules.md) | | | | ✓ | ✓ |
+| Manage clusters | | | | ✓ | ✓ |
+| Manage Error Tracking | | | | ✓ | ✓ |
| Manage GitLab Pages | | | | ✓ | ✓ |
| Manage GitLab Pages domains and certificates | | | | ✓ | ✓ |
-| Remove GitLab Pages | | | | ✓ | ✓ |
-| Manage clusters | | | | ✓ | ✓ |
-| Manage Project Operations | | | | ✓ | ✓ |
-| Manage Terraform state | | | | ✓ | ✓ |
| Manage license policy **(ULTIMATE)** | | | | ✓ | ✓ |
-| Manage security policy **(ULTIMATE)** | | | ✓ | ✓ | ✓ |
-| Create or assign security policy project **(ULTIMATE)** | | | | | ✓ |
-| Edit comments (posted by any user) | | | | ✓ | ✓ |
-| Reposition comments on images (posted by any user)|✓ (*10*) | ✓ (*10*) | ✓ (*10*) | ✓ | ✓ |
-| Manage Error Tracking | | | | ✓ | ✓ |
-| Delete wiki pages | | | | ✓ | ✓ |
-| View project Audit Events | | | ✓ (*11*) | ✓ | ✓ |
-| Manage [push rules](../push_rules/push_rules.md) | | | | ✓ | ✓ |
-| Manage [project access tokens](project/settings/project_access_tokens.md) **(FREE SELF)** **(PREMIUM SAAS)** (*12*) | | | | ✓ | ✓ |
-| View 2FA status of members | | | | ✓ | ✓ |
-| Switch visibility level | | | | | ✓ |
-| Transfer project to another namespace | | | | | ✓ |
-| Rename project | | | | | ✓ |
+| Manage Terraform state | | | | ✓ | ✓ |
+| Push to protected branches | | | | ✓ | ✓ |
+| Remove GitLab Pages | | | | ✓ | ✓ |
+| Turn on/off protected branch push for developers | | | | ✓ | ✓ |
| Remove fork relationship | | | | | ✓ |
-| Delete project | | | | | ✓ |
-| Archive project | | | | | ✓ |
-| Delete issues | | | | | ✓ |
-| Delete pipelines | | | | | ✓ |
-| Delete merge request | | | | | ✓ |
-| Disable notification emails | | | | | ✓ |
-| Administer project compliance frameworks | | | | | ✓ |
| Force push to protected branches (*4*) | | | | | |
| Remove protected branches (*4*) | | | | | |
1. Guest users are able to perform this action on public and internal projects, but not private projects. This doesn't apply to [external users](#external-users) where explicit access must be given even if the project is internal.
-1. Guest users can only view the confidential issues they created themselves.
+1. Guest users can only view the [confidential issues](project/issues/confidential_issues.md) they created themselves.
1. If **Public pipelines** is enabled in **Project Settings > CI/CD**.
1. Not allowed for Guest, Reporter, Developer, Maintainer, or Owner. See [protected branches](project/protected_branches.md).
1. If the [branch is protected](project/protected_branches.md), this depends on the access Developers and Maintainers are given.
@@ -209,6 +211,11 @@ The following table lists project permissions available for each role:
1. Project access tokens are supported for self-managed instances on Free and above. They are also
supported on GitLab SaaS Premium and above (excluding [trial licenses](https://about.gitlab.com/free-trial/)).
1. If the [tag is protected](#release-permissions-with-protected-tags), this depends on the access Developers and Maintainers are given.
+1. A Maintainer can't change project features visibility level if
+ [project visibility](../public_access/public_access.md) is set to private.
+1. Attached design files are moved together with the issue even if the user doesn't have the
+ Developer role.
+1. Guest users can set metadata (for example, labels, assignees, or milestones) when creating an issue.
## Project features permissions
@@ -248,10 +255,15 @@ Read through the documentation on [permissions for File Locking](project/file_lo
### Confidential Issues permissions
-Confidential issues can be accessed by users with reporter and higher permission levels,
+[Confidential issues](project/issues/confidential_issues.md) can be accessed by users with reporter and higher permission levels,
as well as by guest users that create a confidential issue. To learn more,
read through the documentation on [permissions and access to confidential issues](project/issues/confidential_issues.md#permissions-and-access-to-confidential-issues).
+### Container Registry visibility permissions
+
+Find the visibility permissions for the Container Registry, as described in the
+[related documentation](packages/container_registry/index.md#container-registry-visibility-permissions).
+
## Group members permissions
NOTE:
@@ -262,6 +274,8 @@ the group.
The following table lists group permissions available for each role:
+<!-- Keep this table sorted: first, by minimum role, then alphabetically. -->
+
| Action | Guest | Reporter | Developer | Maintainer | Owner |
|--------------------------------------------------------|-------|----------|-----------|------------|-------|
| Browse group | ✓ | ✓ | ✓ | ✓ | ✓ |
@@ -287,6 +301,8 @@ The following table lists group permissions available for each role:
| Create/edit/delete iterations | | | ✓ | ✓ | ✓ |
| Create/edit/delete metrics dashboard annotations | | | ✓ | ✓ | ✓ |
| Enable/disable a dependency proxy | | | ✓ | ✓ | ✓ |
+| Pull a container image using the dependency proxy | ✓ | ✓ | ✓ | ✓ | ✓ |
+| Purge the dependency proxy for a group | | | | | ✓ |
| Publish [packages](packages/index.md) | | | ✓ | ✓ | ✓ |
| Use security dashboard **(ULTIMATE)** | | | ✓ | ✓ | ✓ |
| View group Audit Events | | | ✓ (7) | ✓ (7) | ✓ |
@@ -314,7 +330,7 @@ The following table lists group permissions available for each role:
Maintainers to create subgroups](group/subgroups/index.md#creating-a-subgroup)
1. Introduced in GitLab 12.2.
1. Default project creation role can be changed at:
- - The [instance level](admin_area/settings/visibility_and_access_controls.md#default-project-creation-protection).
+ - The [instance level](admin_area/settings/visibility_and_access_controls.md#define-which-roles-can-create-projects).
- The [group level](group/index.md#specify-who-can-add-projects-to-a-group).
1. Does not apply to subgroups.
1. Developers can push commits to the default branch of a new project only if the [default branch protection](group/index.md#change-the-default-branch-protection-of-a-group) is set to "Partially protected" or "Not protected".
diff --git a/doc/user/profile/account/delete_account.md b/doc/user/profile/account/delete_account.md
index c4ab54736bc..f6af373e295 100644
--- a/doc/user/profile/account/delete_account.md
+++ b/doc/user/profile/account/delete_account.md
@@ -70,7 +70,7 @@ username of the original user.
When using the **Delete user and contributions** option, **all** associated records
are removed. This includes all of the items mentioned above including issues,
merge requests, notes/comments, and more. Consider
-[blocking a user](../../admin_area/moderate_users.md#blocking-a-user)
+[blocking a user](../../admin_area/moderate_users.md#block-a-user)
or using the **Delete user** option instead.
When a user is deleted from an [abuse report](../../admin_area/review_abuse_reports.md)
diff --git a/doc/user/profile/index.md b/doc/user/profile/index.md
index d49f4ab0c16..2c76b46249e 100644
--- a/doc/user/profile/index.md
+++ b/doc/user/profile/index.md
@@ -5,7 +5,7 @@ group: Access
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
-# User account
+# User account **(FREE)**
Each GitLab account has a user profile, which contains information about you and your GitLab activity.
@@ -86,7 +86,7 @@ not.
When visiting the public page of a user, you can only see the projects which you have privileges to.
-If the [public level is restricted](../admin_area/settings/visibility_and_access_controls.md#restricted-visibility-levels),
+If the [public level is restricted](../admin_area/settings/visibility_and_access_controls.md#restrict-visibility-levels),
user profiles are only visible to signed-in users.
## Add external accounts to your user profile page
@@ -106,8 +106,6 @@ To add links to other accounts:
## Show private contributions on your user profile page
-> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/14078) in GitLab 11.3.
-
In the user contribution calendar graph and recent activity list, you can see your [contribution actions](../../api/events.md#action-types) to private projects.
To show private contributions:
@@ -131,10 +129,23 @@ To specify your pronouns:
1. In the **Pronouns** field, enter your pronouns.
1. Select **Update profile settings**.
+## Add your name pronunciation
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/25742) in GitLab 14.2.
+
+You can add your name pronunciation to your GitLab account. This is displayed in your profile, below
+your name.
+
+To add your name pronunciation:
+
+1. In the top-right corner, select your avatar.
+1. Select **Edit profile**.
+1. In the **Pronunciation** field, enter how your name is pronounced.
+1. Select **Update profile settings**.
+
## Set your current status
-> - Introduced in GitLab 11.2.
-> - [Improved](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/56649) in GitLab 13.10.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/56649) in GitLab 13.10, users can schedule the clearing of their status.
You can provide a custom status message for your user profile along with an emoji that describes it.
This may be helpful when you are out of office or otherwise not available.
@@ -195,9 +206,15 @@ To set the busy status indicator, either:
| --- | --- |
| ![Busy status - notes](img/busy_indicator_notes_v13_9.png) | ![Busy status - note header](img/busy_indicator_note_header_v13_9.png) |
-## Change the email displayed on your commits
+## Set your time zone
+
+To set your time zone:
+
+1. In the top-right corner, select your avatar.
+1. Select **Edit profile**.
+1. In the **Time settings** section, select your time zone from the dropdown list.
-> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/21598) in GitLab 11.4.
+## Change the email displayed on your commits
A commit email is an email address displayed in every Git-related action carried out through the GitLab interface.
@@ -212,8 +229,6 @@ To change your commit email:
### Use an automatically-generated private commit email
-> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/22560) in GitLab 11.5.
-
GitLab provides an automatically-generated private commit email address,
so you can keep your email information private.
diff --git a/doc/user/profile/notifications.md b/doc/user/profile/notifications.md
index eaf1d33a938..17b4251662e 100644
--- a/doc/user/profile/notifications.md
+++ b/doc/user/profile/notifications.md
@@ -56,11 +56,11 @@ Your **Global notification settings** are the default settings unless you select
different values for a project or a group.
- **Notification email**: the email address your notifications are sent to.
-- **Receive product marketing emails**: select this check box to receive
+- **Receive product marketing emails**: select this checkbox to receive
[periodic emails](#product-marketing-emails) about GitLab features.
- **Global notification level**: the default [notification level](#notification-levels)
which applies to all your notifications.
-- **Receive notifications about your own activity**: select this check box to receive
+- **Receive notifications about your own activity**: select this checkbox to receive
notifications about your own activity. Not selected by default.
![notification settings](img/notification_global_settings_v13_12.png)
@@ -143,7 +143,7 @@ For each project and group you can select one of the following levels:
|:------------|:------------|
| Global | Your global settings apply. |
| Watch | Receive notifications for any activity. |
-| On mention | Receive notifications when `@mentioned` in comments. |
+| On mention | Receive notifications when [mentioned](../project/issues/issue_data_and_actions.md#mentions) in a comment. |
| Participate | Receive notifications for threads you have participated in. |
| Disabled | Turns off notifications. |
| Custom | Receive notifications for custom selected events. |
@@ -278,7 +278,7 @@ The participants are:
- Authors of the design (can be multiple people if different authors have uploaded different versions of the design).
- Authors of comments on the design.
-- Anyone that is `@mentioned` in a comment on the design.
+- Anyone that is [mentioned](../project/issues/issue_data_and_actions.md#mentions) in a comment on the design.
## Opt out of all GitLab emails
@@ -328,5 +328,12 @@ reason `assigned` has this sentence in the footer:
- `You are receiving this email because you have been assigned an item on <configured GitLab hostname>.`
-NOTE:
Notification of other events is being considered for inclusion in the `X-GitLab-NotificationReason` header. For details, see this [related issue](https://gitlab.com/gitlab-org/gitlab/-/issues/20689).
+
+For example, an alert notification email can have one of
+[the alert's](../../operations/incident_management/alerts.md) statuses:
+
+- `alert_triggered`
+- `alert_acknowledged`
+- `alert_resolved`
+- `alert_ignored`
diff --git a/doc/user/profile/personal_access_tokens.md b/doc/user/profile/personal_access_tokens.md
index 0dbf00a83fb..c534a630480 100644
--- a/doc/user/profile/personal_access_tokens.md
+++ b/doc/user/profile/personal_access_tokens.md
@@ -5,13 +5,12 @@ group: Access
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
-# Personal access tokens
+# Personal access tokens **(FREE)**
-> - [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/3749) in GitLab 8.8.
-> - [Notifications for expiring tokens](https://gitlab.com/gitlab-org/gitlab/-/issues/3649) added in GitLab 12.6.
-> - [Token lifetime limits](https://gitlab.com/gitlab-org/gitlab/-/issues/3649) added in [GitLab Ultimate](https://about.gitlab.com/pricing/) 12.6.
-> - [Additional notifications for expiring tokens](https://gitlab.com/gitlab-org/gitlab/-/issues/214721) added in GitLab 13.3.
-> - [Prefill token name and scopes](https://gitlab.com/gitlab-org/gitlab/-/issues/334664) added in GitLab 14.1.
+> - Introduced in GitLab 12.6: [Notifications for expiring tokens](https://gitlab.com/gitlab-org/gitlab/-/issues/3649).
+> - Introduced in GitLab Ultimate 12.6: [Token lifetime limits](https://gitlab.com/gitlab-org/gitlab/-/issues/3649).
+> - Introduced in GitLab 13.3: [Additional notifications for expiring tokens](https://gitlab.com/gitlab-org/gitlab/-/issues/214721).
+> - Introduced in GitLab 14.1: [Prefill token name and scopes](https://gitlab.com/gitlab-org/gitlab/-/issues/334664).
If you're unable to use [OAuth2](../../api/oauth2.md), you can use a personal access token to authenticate with the [GitLab API](../../api/index.md#personalproject-access-tokens). You can also use a personal access token with Git to authenticate over HTTP.
@@ -73,16 +72,16 @@ To view the last time a token was used:
A personal access token can perform actions based on the assigned scopes.
-| Scope | Introduced in | Access |
-| ------------------ | ------------- | ----------- |
-| `api` | [8.15](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/5951) | Read-write for the complete API, including all groups and projects, the Container Registry, and the Package Registry. |
-| `read_user` | [8.15](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/5951) | Read-only for endpoints under `/users`. Essentially, access to any of the `GET` requests in the [Users API](../../api/users.md). |
-| `read_api` | [12.10](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/28944) | Read-only for the complete API, including all groups and projects, the Container Registry, and the Package Registry. |
-| `read_repository` | [10.7](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/17894) | Read-only (pull) for the repository through `git clone`. |
-| `write_repository` | [11.11](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/26021) | Read-write (pull, push) for the repository through `git clone`. Required for accessing Git repositories over HTTP when 2FA is enabled. |
-| `read_registry` | [9.3](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/11845) | Read-only (pull) for [Container Registry](../packages/container_registry/index.md) images if a project is private and authorization is required. |
-| `write_registry` | [12.10](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/28958) | Read-write (push) for [Container Registry](../packages/container_registry/index.md) images if a project is private and authorization is required. |
-| `sudo` | [10.2](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/14838) | API actions as any user in the system (if the authenticated user is an administrator). |
+| Scope | Access |
+|--------------------|--------|
+| `api` | Read-write for the complete API, including all groups and projects, the Container Registry, and the Package Registry. |
+| `read_user` | Read-only for endpoints under `/users`. Essentially, access to any of the `GET` requests in the [Users API](../../api/users.md). |
+| `read_api` | Read-only for the complete API, including all groups and projects, the Container Registry, and the Package Registry. ([Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/28944) in GitLab 12.10.) |
+| `read_repository` | Read-only (pull) for the repository through `git clone`. |
+| `write_repository` | Read-write (pull, push) for the repository through `git clone`. Required for accessing Git repositories over HTTP when 2FA is enabled. |
+| `read_registry` | Read-only (pull) for [Container Registry](../packages/container_registry/index.md) images if a project is private and authorization is required. |
+| `write_registry` | Read-write (push) for [Container Registry](../packages/container_registry/index.md) images if a project is private and authorization is required. ([Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/28958) in GitLab 12.10.) |
+| `sudo` | API actions as any user in the system (if the authenticated user is an administrator). |
## When personal access tokens expire
diff --git a/doc/user/profile/preferences.md b/doc/user/profile/preferences.md
index fad9b67eee4..e079e6dcbee 100644
--- a/doc/user/profile/preferences.md
+++ b/doc/user/profile/preferences.md
@@ -54,9 +54,10 @@ See the epic for:
If you find an issue that isn't listed, please leave a comment on the epic or create a
new issue.
-Dark mode is available as a navigation theme, for MVC and compatibility reasons. In
-the future, we plan to make it configurable in its own section along with support for
-[different navigation themes](https://gitlab.com/gitlab-org/gitlab/-/issues/219512).
+Dark mode is available as a navigation theme, for MVC and compatibility reasons.
+[An issue exists](https://gitlab.com/gitlab-org/gitlab/-/issues/219512)
+to make it configurable in its own section along with support for
+different navigation themes.
Dark theme only works with the **Dark** syntax highlighting theme.
diff --git a/doc/user/project/bulk_editing.md b/doc/user/project/bulk_editing.md
deleted file mode 100644
index 1ecfb3b7292..00000000000
--- a/doc/user/project/bulk_editing.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: 'issues/managing_issues.md'
-remove_date: '2021-08-12'
----
-
-This document was moved to [another location](issues/managing_issues.md).
-
-<!-- This redirect file can be deleted after <2021-08-12>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/user/project/clusters/add_remove_clusters.md b/doc/user/project/clusters/add_remove_clusters.md
index 6cada5648cb..fba02183be5 100644
--- a/doc/user/project/clusters/add_remove_clusters.md
+++ b/doc/user/project/clusters/add_remove_clusters.md
@@ -9,7 +9,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
> [Deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/327908) in GitLab 14.0.
WARNING:
-Creating a new cluster or adding an existing cluster to GitLab through the certificate-based method
+Creating a new cluster through the certificate-based method
is deprecated and no longer recommended. Kubernetes cluster, similar to any other
infrastructure, should be created, updated, maintained using [Infrastructure as Code](../../infrastructure/index.md).
GitLab is developing a built-in capability to create clusters with Terraform.
@@ -42,8 +42,8 @@ providers. To host them on premises and with other providers,
use either the EKS or GKE method to guide you through and enter your cluster's
settings manually:
-- [New cluster hosted on Google Kubernetes Engine (GKE)](add_eks_clusters.md).
-- [New cluster hosted on Amazon Elastic Kubernetes Service (EKS)](add_gke_clusters.md).
+- [New cluster hosted on Google Kubernetes Engine (GKE)](add_gke_clusters.md).
+- [New cluster hosted on Amazon Elastic Kubernetes Service (EKS)](add_eks_clusters.md).
## Add existing cluster
diff --git a/doc/user/project/clusters/cluster_access.md b/doc/user/project/clusters/cluster_access.md
index 713a60b2dd0..7bf202f6963 100644
--- a/doc/user/project/clusters/cluster_access.md
+++ b/doc/user/project/clusters/cluster_access.md
@@ -83,6 +83,4 @@ arbitrary images as they effectively have root access.
If you don't want to use a runner in privileged mode, either:
- Use shared runners on GitLab.com. They don't have this security issue.
-- Set up your own runners using the configuration described at
-[shared runners](../../gitlab_com/index.md#shared-runners) using
-[`docker+machine`](https://docs.gitlab.com/runner/executors/docker_machine.html).
+- Set up your own runners that use [`docker+machine`](https://docs.gitlab.com/runner/executors/docker_machine.html).
diff --git a/doc/user/project/clusters/runbooks/img/ingress-install.png b/doc/user/project/clusters/runbooks/img/ingress-install.png
deleted file mode 100644
index 08256a65138..00000000000
--- a/doc/user/project/clusters/runbooks/img/ingress-install.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/clusters/runbooks/img/jupyterhub-install.png b/doc/user/project/clusters/runbooks/img/jupyterhub-install.png
deleted file mode 100644
index 784e508ff25..00000000000
--- a/doc/user/project/clusters/runbooks/img/jupyterhub-install.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/clusters/serverless/img/dns-entry.png b/doc/user/project/clusters/serverless/img/dns-entry.png
deleted file mode 100644
index 7b5d6497f0e..00000000000
--- a/doc/user/project/clusters/serverless/img/dns-entry.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/clusters/serverless/img/install-knative.png b/doc/user/project/clusters/serverless/img/install-knative.png
deleted file mode 100644
index 1dc830848f2..00000000000
--- a/doc/user/project/clusters/serverless/img/install-knative.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/code_owners.md b/doc/user/project/code_owners.md
index 2a60c06814b..7d51fb59793 100644
--- a/doc/user/project/code_owners.md
+++ b/doc/user/project/code_owners.md
@@ -8,22 +8,21 @@ type: reference
# Code Owners **(PREMIUM)**
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/6916) in GitLab 11.3.
-> - Code Owners for Merge Request approvals was [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/4418) in GitLab Premium 11.9.
+> - Code Owners for merge request approvals was [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/4418) in GitLab Premium 11.9.
> - Moved to GitLab Premium in 13.9.
-Code Owners define who owns specific files or paths in a repository.
-You can require that Code Owners approve a merge request before it's merged.
+Code Owners define who owns specific files or directories in a repository.
-Code Owners help you determine who should review or approve merge requests.
-If you have a question about a file or feature, Code Owners
-can help you find someone who knows the answer.
+- The users you define as Code Owners are displayed in the UI when you browse directories.
+- You can set your merge requests so they must be approved by Code Owners before merge.
+- You can protect a branch and allow only Code Owners to approve changes to the branch.
If you don't want to use Code Owners for approvals, you can
[configure rules](merge_requests/approvals/rules.md) instead.
## Set up Code Owners
-You can specify users or [shared groups](members/share_project_with_groups.md)
+You can use Code Owners to specify users or [shared groups](members/share_project_with_groups.md)
that are responsible for specific files and directories in a repository.
To set up Code Owners:
@@ -38,150 +37,102 @@ To set up Code Owners:
1. In the file, enter text that follows one of these patterns:
```plaintext
- # A member as Code Owner of a file
- filename @username
+ # Code Owners for a file
+ filename @username1 @username2
- # A member as Code Owner of a directory
- directory @username
+ # Code Owners for a directory
+ directoryname/ @username1 @username2
- # All group members as Code Owners of a file
+ # All group members as Code Owners for a file
filename @groupname
- # All group members as Code Owners of a directory
- directory @groupname
+ # All group members as Code Owners for a directory
+ directoryname/ @groupname
```
-The Code Owners are displayed in the UI by the files or directory they apply to.
-These owners apply to this branch only. When you add new files to the repository,
-you should update the `CODEOWNERS` file.
+The Code Owners are now displayed in the UI. They apply to the current branch only.
-## When a file matches multiple `CODEOWNERS` entries
+Next steps:
-When a file matches multiple entries in the `CODEOWNERS` file,
-the users from last pattern matching the file are used.
-
-For example, in the following `CODEOWNERS` file:
+- [Add Code Owners as merge request approvers](merge_requests/approvals/rules.md#code-owners-as-eligible-approvers).
+- Set up [Code Owner approval on a protected branch](protected_branches.md#require-code-owner-approval-on-a-protected-branch).
-```plaintext
-README.md @user1
-
-# This line would also match the file README.md
-*.md @user2
-```
-
-The user that would show for `README.md` would be `@user2`.
-
-## Approvals by Code Owners
+## Groups as Code Owners
-After you've added Code Owners to a project, you can configure it to
-be used for merge request approvals:
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/53182) in GitLab 12.1.
+> - Group and subgroup hierarchy support was [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/32432) in GitLab 13.0.
-- As [merge request eligible approvers](merge_requests/approvals/rules.md#code-owners-as-eligible-approvers).
-- As required approvers for [protected branches](protected_branches.md#require-code-owner-approval-on-a-protected-branch). **(PREMIUM)**
+You can use members of groups and subgroups as Code Owners for a project.
-Developer or higher [permissions](../permissions.md) are required to
-approve a merge request.
+For example, if you have these groups:
-After it's set, Code Owners are displayed in merge request widgets:
+- **Group X** (`group-x`) with **Project A** in it.
+- **Subgroup Y** (`group-x/subgroup-y`), which belongs to **Group X**, with **Project B** in it.
-![MR widget - Code Owners](img/code_owners_mr_widget_v12_4.png)
+The eligible Code Owners:
-While you can use the `CODEOWNERS` file in addition to Merge Request
-[Approval Rules](merge_requests/approvals/rules.md),
-you can also use it as the sole driver of merge request approvals
-without using [Approval Rules](merge_requests/approvals/rules.md):
+- For **Project A** are the members of **Group X** only, because **Project A** doesn't belong to **Subgroup Y**.
+- For **Project B** are the members of both **Group X** and **Subgroup Y**.
-1. Create the file in one of the three locations specified above.
-1. Set the code owners as required approvers for
- [protected branches](protected_branches.md#require-code-owner-approval-on-a-protected-branch).
-1. Use [the syntax of Code Owners files](code_owners.md)
- to specify the actual owners and granular permissions.
+![Eligible Code Owners](img/code_owners_members_v13_4.png)
-Using Code Owners in conjunction with [protected branches](protected_branches.md#require-code-owner-approval-on-a-protected-branch)
-prevents any user who is not specified in the `CODEOWNERS` file from pushing
-changes for the specified files/paths, except those included in the
-**Allowed to push** column. This allows for a more inclusive push strategy, as
-administrators don't have to restrict developers from pushing directly to the
-protected branch, but can restrict pushing to certain files where a review by
-Code Owners is required.
+You can [invite](members/share_project_with_groups.md) **Subgroup Y** to **Project A**
+so that their members also become eligible Code Owners.
-[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/35097) in [GitLab Premium](https://about.gitlab.com/pricing/) 13.5, users and groups who are allowed to push to protected branches do not require a merge request to merge their feature branches. Thus, they can skip merge request approval rules, Code Owners included.
+![Invite subgroup members to become eligible Code Owners](img/code_owners_invite_members_v13_4.png)
-## Groups as Code Owners
+If you do not invite **Subgroup Y** to **Project A**, but make them Code Owners, their approval
+of the merge request becomes optional.
-> - [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/53182) in GitLab 12.1.
-> - Group and subgroup hierarchy support was [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/32432) in GitLab 13.0.
+### Add a group as a Code Owner
-Groups and subgroups members are inherited as eligible Code Owners to a
-project, as long as the hierarchy is respected.
+To set a group as a Code Owner:
-For example, consider a given group called "Group X" (slug `group-x`) and a
-"Subgroup Y" (slug `group-x/subgroup-y`) that belongs to the Group X, and
-suppose you have a project called "Project A" within the group and a
-"Project B" within the subgroup.
+In the `CODEOWNERS` file, enter text that follows one of these patterns:
-The eligible Code Owners to Project B are both the members of the Group X and
-the Subgroup Y. The eligible Code Owners to the Project A are just the
-members of the Group X, given that Project A doesn't belong to the Subgroup Y:
+```plaintext
+# All group members as Code Owners for a file
+file.md @group-x
-![Eligible Code Owners](img/code_owners_members_v13_4.png)
+# All subgroup members as Code Owners for a file
+file.md @group-x/subgroup-y
-But you have the option to [invite](members/share_project_with_groups.md)
-the Subgroup Y to the Project A so that their members also become eligible
-Code Owners:
+# All group and subgroup members as Code Owners for a file
+file.md @group-x @group-x/subgroup-y
+```
-NOTE:
-If you do not invite Subgroup Y to Project A, but make them Code Owners, their approval
-of the merge request becomes optional.
+## When a file matches multiple `CODEOWNERS` entries
-![Invite subgroup members to become eligible Code Owners](img/code_owners_invite_members_v13_4.png)
+When a file matches multiple entries in the `CODEOWNERS` file,
+the users from last pattern matching the file are used.
-After being invited, any member (`@user`) of the group or subgroup can be set
-as Code Owner to files of the Project A or B, and the entire Group X
-(`@group-x`) or Subgroup Y (`@group-x/subgroup-y`), as follows:
+For example, in the following `CODEOWNERS` file:
```plaintext
-# A member of the group or subgroup as Code Owner to a file
-file.md @user
+README.md @user1
-# All group members as Code Owners to a file
-file.md @group-x
+# This line would also match the file README.md
+*.md @user2
+```
-# All subgroup members as Code Owners to a file
-file.md @group-x/subgroup-y
+The Code Owner for `README.md` would be `@user2`.
-# All group and subgroup members as Code Owners to a file
-file.md @group-x @group-x/subgroup-y
-```
+If you use sections, the last user _for each section_ is used.
-### Code Owners Sections **(PREMIUM)**
+Only one CODEOWNERS pattern can match per file path.
+
+### Organize Code Owners by putting them into sections
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/12137) in GitLab Premium 13.2 behind a feature flag, enabled by default.
> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/42389) in GitLab 13.4.
-Code Owner rules can be grouped into named sections. This allows for better
-organization of broader categories of Code Owner rules to be applied.
-Additionally, the usual guidance that only the last pattern matching the file is
-applied is expanded such that the last pattern matching _for each section_ is
-applied.
-
-For example, in a large organization, independent teams may have a common interest
-in parts of the application, for instance, a payment processing company may have
-"development", "security", and "compliance" teams looking after common parts of
-the codebase. All three teams may need to approve changes. Although approval rules
-make this possible, they apply to every merge request. Also, while Code Owners are
-applied based on which files are changed, only one CODEOWNERS pattern can match per
-file path.
-
-Using `CODEOWNERS` sections allows multiple teams that only need to approve certain
-changes, to set their own independent patterns by specifying discrete sections in the
-`CODEOWNERS` file. The section rules may be used for shared paths so that multiple
-teams can be added as reviewers.
-
-Sections can be added to `CODEOWNERS` files as a new line with the name of the
-section inside square brackets. Every entry following is assigned to that
-section. The following example would create two Code Owner rules for the "README
-Owners" section:
+You can organize Code Owners by putting them into named sections.
+
+You can use sections for shared directories, so that multiple
+teams can be reviewers.
+
+To add a section to the `CODEOWNERS` file, enter a section name in brackets,
+followed by the files or directories, and users, groups, or subgroups:
```plaintext
[README Owners]
@@ -189,43 +140,41 @@ README.md @user1 @user2
internal/README.md @user2
```
-Multiple sections can be used, even with matching file or directory patterns.
-Reusing the same section name groups the results together under the same
-section, with the most specific rule or last matching pattern being used. For
-example, consider the following entries in a `CODEOWNERS` file:
+Each Code Owner in the merge request widget is listed under a label.
+The following image shows a **Groups** and **Documentation** section:
+
+![MR widget - Sectional Code Owners](img/sectional_code_owners_v13.2.png)
+
+### Sections with duplicate names
+
+If multiple sections have the same name, they are combined.
+Also, section headings are not case-sensitive. For example:
```plaintext
[Documentation]
-ee/docs @gl-docs
-docs @gl-docs
+ee/docs/ @docs
+docs/ @docs
[Database]
-README.md @gl-database
-model/db @gl-database
+README.md @database
+model/db/ @database
[DOCUMENTATION]
-README.md @gl-docs
+README.md @docs
```
-This results in three entries under the "Documentation" section header, and two
-entries under "Database". Case is not considered when combining sections, so in
-this example, entries defined under the sections "Documentation" and
-"DOCUMENTATION" would be combined into one, using the case of the first instance
-of the section encountered in the file.
+This code results in three entries under the **Documentation** section header, and two
+entries under **Database**. The entries defined under the sections **Documentation** and
+**DOCUMENTATION** are combined, using the case of the first section.
-When assigned to a section, each code owner rule displayed in merge requests
-widget is sorted under a "section" label. In the screenshot below, we can see
-the rules for "Groups" and "Documentation" sections:
-
-![MR widget - Sectional Code Owners](img/sectional_code_owners_v13.2.png)
-
-#### Optional Code Owners Sections **(PREMIUM)**
+### Make a Code Owners section optional
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/232995) in GitLab Premium 13.8 behind a feature flag, enabled by default.
> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/53227) in GitLab 13.9.
-To make a certain section optional, add a code owners section prepended with the
-caret `^` character. Approvals from owners listed in the section are **not** required. For example:
+You can make a section optional, so that approval from the Code Owners in that section is optional.
+
+Put a caret `^` character before the Code Owners section name. For example:
```plaintext
[Documentation]
@@ -238,102 +187,83 @@ caret `^` character. Approvals from owners listed in the section are **not** req
*.go @root
```
-The optional code owners section displays in merge requests under the **Approval Rules** area:
-
-![MR widget - Optional Code Owners Sections](img/optional_code_owners_sections_v13_8.png)
-
-If a section is duplicated in the file, and one of them is marked as optional and the other isn't, the requirement prevails.
-
-For example, the code owners of the "Documentation" section below is still required to approve merge requests:
-
-```plaintext
-[Documentation]
-*.md @root
-
-[Ruby]
-*.rb @root
+The optional Code Owners section displays in merge requests under the **Approval Rules** area:
-^[Go]
-*.go @root
+![MR widget - Optional Code Owners sections](img/optional_code_owners_sections_v13_8.png)
-^[Documentation]
-*.txt @root
-```
+If a section is duplicated in the file, and one of them is marked as optional and the other isn't, the section is required.
-Optional sections in the code owners file are treated as optional only
+Optional sections in the `CODEOWNERS` file are treated as optional only
when changes are submitted by using merge requests. If a change is submitted directly
-to the protected branch, approval from code owners is still required, even if the
-section is marked as optional. We plan to change this behavior in a
-[future release](https://gitlab.com/gitlab-org/gitlab/-/issues/297638),
-and allow direct pushes to the protected branch for sections marked as optional.
+to the protected branch, approval from Code Owners is still required, even if the
+section is marked as optional. [An issue exists](https://gitlab.com/gitlab-org/gitlab/-/issues/297638)
+to allow direct pushes to the protected branch for sections marked as optional.
## Example `CODEOWNERS` file
```plaintext
-# This is an example of a code owners file
-# lines starting with a `#` will be ignored.
+# This is an example of a CODEOWNERS file.
+# Lines that start with `#` are ignored.
# app/ @commented-rule
-# We can specify a default match using wildcards:
+# Specify a default Code Owner by using a wildcard:
* @default-codeowner
-# We can also specify "multiple tab or space" separated codeowners:
+# Specify multiple Code Owners by using a tab or space:
* @multiple @code @owners
# Rules defined later in the file take precedence over the rules
# defined before.
-# This will match all files for which the file name ends in `.rb`
+# For example, for all files with a filename ending in `.rb`:
*.rb @ruby-owner
-# Files with a `#` can still be accessed by escaping the pound sign
+# Files with a `#` can still be accessed by escaping the pound sign:
\#file_with_pound.rb @owner-file-with-pound
-# Multiple codeowners can be specified, separated by spaces or tabs
+# Specify multiple Code Owners separated by spaces or tabs.
# In the following case the CODEOWNERS file from the root of the repo
-# has 3 code owners (@multiple @code @owners)
+# has 3 Code Owners (@multiple @code @owners):
CODEOWNERS @multiple @code @owners
-# Both usernames or email addresses can be used to match
-# users. Everything else will be ignored. For example this will
-# specify `@legal` and a user with email `janedoe@gitlab.com` as the
-# owner for the LICENSE file
+# You can use both usernames or email addresses to match
+# users. Everything else is ignored. For example, this code
+# specifies the `@legal` and a user with email `janedoe@gitlab.com` as the
+# owner for the LICENSE file:
LICENSE @legal this_does_not_match janedoe@gitlab.com
-# Group names can be used to match groups and nested groups to specify
-# them as owners for a file
+# Use group names to match groups, and nested groups to specify
+# them as owners for a file:
README @group @group/with-nested/subgroup
-# Ending a path in a `/` will specify the code owners for every file
-# nested in that directory, on any level
+# End a path in a `/` to specify the Code Owners for every file
+# nested in that directory, on any level:
/docs/ @all-docs
-# Ending a path in `/*` will specify code owners for every file in
-# that directory, but not nested deeper. This will match
-# `docs/index.md` but not `docs/projects/index.md`
+# End a path in `/*` to specify Code Owners for every file in
+# a directory, but not nested deeper. This code matches
+# `docs/index.md` but not `docs/projects/index.md`:
/docs/* @root-docs
-# This will make a `lib` directory nested anywhere in the repository
-# match
+# This code makes matches a `lib` directory nested anywhere in the repository:
lib/ @lib-owner
-# This will only match a `config` directory in the root of the
-# repository
+# This code match only a `config` directory in the root of the repository:
/config/ @config-owner
-# If the path contains spaces, these need to be escaped like this:
+# If the path contains spaces, escape them like this:
path\ with\ spaces/ @space-owner
# Code Owners section:
[Documentation]
-ee/docs @gl-docs
-docs @gl-docs
+ee/docs @docs
+docs @docs
[Database]
-README.md @gl-database
-model/db @gl-database
+README.md @database
+model/db @database
-# This section will be joined with the [Documentation] section previously defined:
+# This section is combined with the previously defined [Documentation] section:
[DOCUMENTATION]
-README.md @gl-docs
+README.md @docs
```
diff --git a/doc/user/project/deploy_boards.md b/doc/user/project/deploy_boards.md
index a09448d4755..64a5515136b 100644
--- a/doc/user/project/deploy_boards.md
+++ b/doc/user/project/deploy_boards.md
@@ -59,7 +59,7 @@ specific environment, there are a lot of use cases. To name a few:
- You want to promote what's running in staging, to production. You go to the
environments list, verify that what's running in staging is what you think is
- running, then click on the [manual action](../../ci/yaml/index.md#whenmanual) to deploy to production.
+ running, then click on the [manual job](../../ci/jobs/job_control.md#create-a-job-that-must-be-run-manually) to deploy to production.
- You trigger a deploy, and you have many containers to upgrade so you know
this takes a while (you've also throttled your deploy to only take down X
containers at a time). But you need to tell someone when it's deployed, so you
diff --git a/doc/user/project/deploy_tokens/index.md b/doc/user/project/deploy_tokens/index.md
index 800aa27f612..70363b67c88 100644
--- a/doc/user/project/deploy_tokens/index.md
+++ b/doc/user/project/deploy_tokens/index.md
@@ -20,6 +20,8 @@ Deploy tokens can be managed by [maintainers only](../../permissions.md).
Deploy tokens cannot be used with the GitLab API.
+Deploy tokens are tied to the project and stay enabled even when the user who created the token is removed from the project.
+
If you have a key pair, you might want to use [deploy keys](../../project/deploy_keys/index.md)
instead.
@@ -171,6 +173,16 @@ To use a group deploy token:
The scopes applied to a group deploy token (such as `read_repository`)
apply consistently when cloning the repository of related projects.
+### Pull images from the Dependency Proxy
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/280586) in GitLab 14.2.
+
+To pull images from the Dependency Proxy, you must:
+
+1. Create a group deploy token with both `read_registry` and `write_registry` scopes.
+1. Take note of your `username` and `token`.
+1. Follow the Depenency Proxy [authentication instructions](../../packages/dependency_proxy/index.md).
+
### GitLab deploy token
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/18414) in GitLab 10.8.
diff --git a/doc/user/project/highlighting.md b/doc/user/project/highlighting.md
index aa8cf4549e2..728f51a8062 100644
--- a/doc/user/project/highlighting.md
+++ b/doc/user/project/highlighting.md
@@ -14,18 +14,23 @@ The [Web IDE](web_ide/index.md) and [Snippets](../snippets.md) use [Monaco Edito
for text editing, which internally uses the [Monarch](https://microsoft.github.io/monaco-editor/monarch.html)
library for syntax highlighting.
+<!-- vale gitlab.Spelling = NO -->
+
If GitLab is guessing wrong, you can override its choice of language using the
-`gitlab-language` attribute in `.gitattributes`. For example, if you are working in a
-<!-- vale gitlab.Spelling = NO --> Prolog <!-- vale gitlab.Spelling = YES -->
+`gitlab-language` attribute in `.gitattributes`. For example, if you are working in a Prolog
project and using the `.pl` file extension (which would normally be highlighted as Perl),
you can add the following to your `.gitattributes` file:
+<!-- vale gitlab.Spelling = YES -->
+
``` conf
*.pl gitlab-language=prolog
```
<!-- vale gitlab.Spelling = NO -->
+
When you check in and push that change, all `*.pl` files in your project are highlighted as Prolog.
+
<!-- vale gitlab.Spelling = YES -->
The paths here are Git's built-in [`.gitattributes` interface](https://git-scm.com/docs/gitattributes). So, if you were to invent a file format called a `Nicefile` at the root of your project that used Ruby syntax, all you need is:
@@ -44,7 +49,7 @@ To disable highlighting entirely, use `gitlab-language=text`. Lots more fun shen
/other-file gitlab-language=text?token=Error
```
-Please note that these configurations only take effect when the `.gitattributes`
+These configurations only take effect when the `.gitattributes`
file is in your [default branch](repository/branches/default.md).
NOTE:
diff --git a/doc/user/project/img/code_owners_mr_widget_v12_4.png b/doc/user/project/img/code_owners_mr_widget_v12_4.png
deleted file mode 100644
index 7f7b15ee017..00000000000
--- a/doc/user/project/img/code_owners_mr_widget_v12_4.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/img/epics_swimlanes_v13.6.png b/doc/user/project/img/epics_swimlanes_v13.6.png
deleted file mode 100644
index 6f787ba8b10..00000000000
--- a/doc/user/project/img/epics_swimlanes_v13.6.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/img/epics_swimlanes_v14_1.png b/doc/user/project/img/epics_swimlanes_v14_1.png
new file mode 100644
index 00000000000..6c1e23ad685
--- /dev/null
+++ b/doc/user/project/img/epics_swimlanes_v14_1.png
Binary files differ
diff --git a/doc/user/project/img/issue_board_add_list_v13_6.png b/doc/user/project/img/issue_board_add_list_v13_6.png
deleted file mode 100644
index 4239ab6e7e4..00000000000
--- a/doc/user/project/img/issue_board_add_list_v13_6.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/img/issue_board_add_list_v14_1.png b/doc/user/project/img/issue_board_add_list_v14_1.png
new file mode 100644
index 00000000000..28c1d9bf2d6
--- /dev/null
+++ b/doc/user/project/img/issue_board_add_list_v14_1.png
Binary files differ
diff --git a/doc/user/project/img/issue_board_assignee_lists_v13_6.png b/doc/user/project/img/issue_board_assignee_lists_v13_6.png
deleted file mode 100644
index d0fbb0a2ef0..00000000000
--- a/doc/user/project/img/issue_board_assignee_lists_v13_6.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/img/issue_board_assignee_lists_v14_1.png b/doc/user/project/img/issue_board_assignee_lists_v14_1.png
new file mode 100644
index 00000000000..db2afe9c31e
--- /dev/null
+++ b/doc/user/project/img/issue_board_assignee_lists_v14_1.png
Binary files differ
diff --git a/doc/user/project/img/issue_board_milestone_lists_v13_6.png b/doc/user/project/img/issue_board_milestone_lists_v13_6.png
deleted file mode 100644
index a7718ffd66c..00000000000
--- a/doc/user/project/img/issue_board_milestone_lists_v13_6.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/img/issue_board_milestone_lists_v14_1.png b/doc/user/project/img/issue_board_milestone_lists_v14_1.png
new file mode 100644
index 00000000000..7d833d39c45
--- /dev/null
+++ b/doc/user/project/img/issue_board_milestone_lists_v14_1.png
Binary files differ
diff --git a/doc/user/project/img/issue_boards_core_v13_6.png b/doc/user/project/img/issue_boards_core_v13_6.png
deleted file mode 100644
index 8695b523c12..00000000000
--- a/doc/user/project/img/issue_boards_core_v13_6.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/img/issue_boards_core_v14_1.png b/doc/user/project/img/issue_boards_core_v14_1.png
new file mode 100644
index 00000000000..728e7743e54
--- /dev/null
+++ b/doc/user/project/img/issue_boards_core_v14_1.png
Binary files differ
diff --git a/doc/user/project/img/issue_boards_premium_v13_6.png b/doc/user/project/img/issue_boards_premium_v13_6.png
deleted file mode 100644
index 8d1c1299d5c..00000000000
--- a/doc/user/project/img/issue_boards_premium_v13_6.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/img/issue_boards_premium_v14_1.png b/doc/user/project/img/issue_boards_premium_v14_1.png
new file mode 100644
index 00000000000..ee7d1dbe05d
--- /dev/null
+++ b/doc/user/project/img/issue_boards_premium_v14_1.png
Binary files differ
diff --git a/doc/user/project/img/protected_branches_devs_can_push_v12_3.png b/doc/user/project/img/protected_branches_devs_can_push_v12_3.png
deleted file mode 100644
index adc03a41abb..00000000000
--- a/doc/user/project/img/protected_branches_devs_can_push_v12_3.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/img/remaining_time_v14_2.png b/doc/user/project/img/remaining_time_v14_2.png
new file mode 100644
index 00000000000..76dd0792943
--- /dev/null
+++ b/doc/user/project/img/remaining_time_v14_2.png
Binary files differ
diff --git a/doc/user/project/import/clearcase.md b/doc/user/project/import/clearcase.md
index 27a84476590..120c64e00f2 100644
--- a/doc/user/project/import/clearcase.md
+++ b/doc/user/project/import/clearcase.md
@@ -31,7 +31,7 @@ _Taken from the slides [ClearCase and the journey to Git](https://docplayer.net/
## Why migrate
-ClearCase can be difficult to manage both from a user and an admin perspective.
+ClearCase can be difficult to manage both from a user and an administrator perspective.
Migrating to Git/GitLab there is:
- **No licensing costs**, Git is GPL while ClearCase is proprietary.
diff --git a/doc/user/project/import/gemnasium.md b/doc/user/project/import/gemnasium.md
deleted file mode 100644
index 37460da1289..00000000000
--- a/doc/user/project/import/gemnasium.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: 'index.md'
-remove_date: '2021-08-15'
----
-
-This document was deleted.
-
-<!-- This redirect file can be deleted after <2021-08-15>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page --> \ No newline at end of file
diff --git a/doc/user/project/import/github.md b/doc/user/project/import/github.md
index e67b6a45280..1ab343d75fb 100644
--- a/doc/user/project/import/github.md
+++ b/doc/user/project/import/github.md
@@ -179,8 +179,8 @@ Sidekiq workers that process the following queues:
For an optimal experience, it's recommended having at least 4 Sidekiq processes (each running a number of threads equal
to the number of CPU cores) that *only* process these queues. It's also recommended that these processes run on separate
-servers. For 4 servers with 8 cores this means you can import up to 32 objects (e.g., issues) in parallel.
+servers. For 4 servers with 8 cores this means you can import up to 32 objects (for example, issues) in parallel.
Reducing the time spent in cloning a repository can be done by increasing network throughput, CPU capacity, and disk
-performance (e.g., by using high performance SSDs) of the disks that store the Git repositories (for your GitLab instance).
+performance (by using high performance SSDs, for example) of the disks that store the Git repositories (for your GitLab instance).
Increasing the number of Sidekiq workers will *not* reduce the time spent cloning repositories.
diff --git a/doc/user/project/import/gitlab_com.md b/doc/user/project/import/gitlab_com.md
index f7eb5e43a79..f25b29317a7 100644
--- a/doc/user/project/import/gitlab_com.md
+++ b/doc/user/project/import/gitlab_com.md
@@ -15,7 +15,7 @@ To get to the importer page you need to go to "New project" page.
NOTE:
If you are interested in importing Wiki and Merge Request data to your new instance,
-you'll need to follow the instructions for [exporting a project](../settings/import_export.md#exporting-a-project-and-its-data)
+you'll need to follow the instructions for [exporting a project](../settings/import_export.md#export-a-project-and-its-data)
![New project page](img/gitlab_new_project_page_v12_2.png)
diff --git a/doc/user/project/import/jira.md b/doc/user/project/import/jira.md
index 07419080d7d..3e0faec0a49 100644
--- a/doc/user/project/import/jira.md
+++ b/doc/user/project/import/jira.md
@@ -46,7 +46,7 @@ GitLab project that you wish to import into.
### Jira integration
-This feature uses the existing GitLab [Jira integration](../integrations/jira.md).
+This feature uses the existing GitLab [Jira integration](../../../integration/jira/index.md).
Make sure you have the integration set up before trying to import Jira issues.
@@ -68,7 +68,7 @@ To import Jira issues to a GitLab project:
The **Import from Jira** option is only visible if you have the [correct permissions](#permissions).
The following form appears.
- If you've previously set up the [Jira integration](../integrations/jira.md), you can now see
+ If you've previously set up the [Jira integration](../../../integration/jira/index.md), you can now see
the Jira projects that you have access to in the dropdown.
![Import issues from Jira form](img/jira/import_issues_from_jira_form_v13_2.png)
diff --git a/doc/user/project/import/phabricator.md b/doc/user/project/import/phabricator.md
index 6a1370f3301..80f2d6d7e62 100644
--- a/doc/user/project/import/phabricator.md
+++ b/doc/user/project/import/phabricator.md
@@ -36,4 +36,4 @@ of the project being imported into, then the user will be linked.
## Enable this feature
-Enable Phabricator as an [import source](../../admin_area/settings/visibility_and_access_controls.md#import-sources) in the Admin Area.
+Enable Phabricator as an [import source](../../admin_area/settings/visibility_and_access_controls.md#configure-allowed-import-sources) in the Admin Area.
diff --git a/doc/user/project/index.md b/doc/user/project/index.md
index fca9c3e7023..668a0dffd32 100644
--- a/doc/user/project/index.md
+++ b/doc/user/project/index.md
@@ -36,7 +36,7 @@ Projects include the following [features](https://about.gitlab.com/features/):
- [Deploy tokens](deploy_tokens/index.md): Manage access to the repository and Container Registry.
- [Web IDE](web_ide/index.md)
- [CVE ID Requests](../application_security/cve_id_request.md): Request a CVE identifier to track a
- vulnerability in your project.
+ vulnerability in your project. **(FREE SAAS)**
**Issues and merge requests:**
@@ -121,7 +121,7 @@ Kubernetes, Slack, and a lot more.
- [Bitbucket to GitLab](import/bitbucket.md)
- [Gitea to GitLab](import/gitea.md)
- [FogBugz to GitLab](import/fogbugz.md)
-- [Export a project from GitLab](settings/import_export.md#exporting-a-project-and-its-data)
+- [Export a project from GitLab](settings/import_export.md#export-a-project-and-its-data)
- [Importing and exporting projects between GitLab instances](settings/import_export.md)
## GitLab Workflow - VS Code extension
diff --git a/doc/user/project/integrations/asana.md b/doc/user/project/integrations/asana.md
index b9552fff110..e1e926da19b 100644
--- a/doc/user/project/integrations/asana.md
+++ b/doc/user/project/integrations/asana.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/user/project/integrations/bamboo.md b/doc/user/project/integrations/bamboo.md
index 1eb8a8c60e0..58cfd8c3a2f 100644
--- a/doc/user/project/integrations/bamboo.md
+++ b/doc/user/project/integrations/bamboo.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
@@ -55,7 +55,7 @@ service in GitLab.
1. If necessary, enter username and password for a Bamboo user that has
access to trigger the build plan. Leave these fields blank if you do not require
authentication.
-1. Save or optionally click **Test Settings**. Please note that **Test Settings**
+1. Save or optionally click **Test Settings**. **Test Settings**
actually triggers a build in Bamboo.
## Troubleshooting
diff --git a/doc/user/project/integrations/bugzilla.md b/doc/user/project/integrations/bugzilla.md
index e8427e36015..a54a3adc408 100644
--- a/doc/user/project/integrations/bugzilla.md
+++ b/doc/user/project/integrations/bugzilla.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/user/project/integrations/custom_issue_tracker.md b/doc/user/project/integrations/custom_issue_tracker.md
index 19beafd6663..eaab1933b79 100644
--- a/doc/user/project/integrations/custom_issue_tracker.md
+++ b/doc/user/project/integrations/custom_issue_tracker.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/user/project/integrations/discord_notifications.md b/doc/user/project/integrations/discord_notifications.md
index 2ec657eec22..c9333b879f3 100644
--- a/doc/user/project/integrations/discord_notifications.md
+++ b/doc/user/project/integrations/discord_notifications.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/user/project/integrations/emails_on_push.md b/doc/user/project/integrations/emails_on_push.md
index 3ef4a4e5004..33c197b962e 100644
--- a/doc/user/project/integrations/emails_on_push.md
+++ b/doc/user/project/integrations/emails_on_push.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/user/project/integrations/ewm.md b/doc/user/project/integrations/ewm.md
index 5b0059673ad..bc9b2d59db3 100644
--- a/doc/user/project/integrations/ewm.md
+++ b/doc/user/project/integrations/ewm.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/user/project/integrations/github.md b/doc/user/project/integrations/github.md
index 019ca9da9f1..6b342392bdf 100644
--- a/doc/user/project/integrations/github.md
+++ b/doc/user/project/integrations/github.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/user/project/integrations/gitlab_slack_application.md b/doc/user/project/integrations/gitlab_slack_application.md
index ac70c7e4b4e..0d8ea636eba 100644
--- a/doc/user/project/integrations/gitlab_slack_application.md
+++ b/doc/user/project/integrations/gitlab_slack_application.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/user/project/integrations/hangouts_chat.md b/doc/user/project/integrations/hangouts_chat.md
index d5dc02d5455..bcaedbc4b10 100644
--- a/doc/user/project/integrations/hangouts_chat.md
+++ b/doc/user/project/integrations/hangouts_chat.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/user/project/integrations/img/prometheus_deploy.png b/doc/user/project/integrations/img/prometheus_deploy.png
deleted file mode 100644
index 3f19f23b0cc..00000000000
--- a/doc/user/project/integrations/img/prometheus_deploy.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/integrations/img/services_templates_redmine_example.png b/doc/user/project/integrations/img/services_templates_redmine_example.png
deleted file mode 100644
index 34594dfdd55..00000000000
--- a/doc/user/project/integrations/img/services_templates_redmine_example.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/integrations/index.md b/doc/user/project/integrations/index.md
index f9e15ced858..6f86098b33d 100644
--- a/doc/user/project/integrations/index.md
+++ b/doc/user/project/integrations/index.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/user/project/integrations/irker.md b/doc/user/project/integrations/irker.md
index 295300fb55d..b96605ff5c9 100644
--- a/doc/user/project/integrations/irker.md
+++ b/doc/user/project/integrations/irker.md
@@ -1,60 +1,72 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
-# Irker IRC Gateway **(FREE)**
+# irker IRC Gateway **(FREE)**
-GitLab provides a way to push update messages to an Irker server. When
+GitLab provides a way to push update messages to an irker server. When
configured, pushes to a project trigger the service to send data directly
-to the Irker server.
+to the irker server.
-See the [project homepage](https://gitlab.com/esr/irker) for further information.
+See also the [irker integration API documentation](../../../api/services.md).
-## Needed setup
+For more information, see the [irker project homepage](https://gitlab.com/esr/irker).
-You first need an Irker daemon. You can download the Irker code
-[from its repository](https://gitlab.com/esr/irker):
+## Set up an irker daemon
-```shell
-git clone https://gitlab.com/esr/irker.git
-```
+You need to set up an irker daemon. To do so:
-Once you have downloaded the code, you can run the Python script named `irkerd`.
-This script is the gateway script, it acts both as an IRC client, for sending
-messages to an IRC server, and as a TCP server, for receiving messages
-from the GitLab service.
+1. Download the irker code [from its repository](https://gitlab.com/esr/irker):
-If the Irker server runs on the same machine, you are done. If not, you
+ ```shell
+ git clone https://gitlab.com/esr/irker.git
+ ```
+
+1. Run the Python script named `irkerd`. This is the gateway script.
+ It acts both as an IRC client, for sending messages to an IRC server,
+ and as a TCP server, for receiving messages from the GitLab service.
+
+If the irker server runs on the same machine, you are done. If not, you
need to follow the first steps of the next section.
+WARNING:
+irker does **not** have built-in authentication, which makes it vulnerable to spamming IRC channels if
+it is hosted outside of a firewall. To prevent abuse, make sure you run the daemon on a secured
+network. For more details, read
+[Security analysis of irker](http://www.catb.org/~esr/irker/security.html).
+
## Complete these steps in GitLab
-1. Navigate to the project you want to configure for notifications.
-1. Navigate to the [Integrations page](overview.md#accessing-integrations)
-1. Click "Irker".
+1. On the top bar, select **Menu > Projects** and find the project you want to
+ configure for notifications.
+1. Navigate to the [Integrations page](overview.md#accessing-integrations).
+1. Select **irker (IRC gateway)**.
1. Ensure that the **Active** toggle is enabled.
-1. Enter the server host address where `irkerd` runs (defaults to `localhost`)
- in the `Server host` field on the Web page
-1. Enter the server port of `irkerd` (e.g. defaults to 6659) in the
- `Server port` field on the Web page.
-1. Optional: if `Default IRC URI` is set, it has to be in the format
- `irc[s]://domain.name` and is prepended to each and every channel provided
- by the user which is not a full URI.
-1. Specify the recipients (e.g. #channel1, user1, etc.)
-1. Save or optionally click "Test Settings".
-
-## Note on Irker recipients
-
-Irker accepts channel names of the form `chan` and `#chan`, both for the
-`#chan` channel. If you want to send messages in query, you need to add
-`,isnick` after the channel name, in this form: `Aorimn,isnick`. In this latter
-case, `Aorimn` is treated as a nick and no more as a channel name.
-
-Irker can also join password-protected channels. Users need to append
-`?key=thesecretpassword` to the channel name. When using this feature remember to
-**not** put the `#` sign in front of the channel name; failing to do so
-results in Irker joining a channel literally named `#chan?key=password` henceforth
-leaking the channel key through the `/whois` IRC command (depending on IRC server
-configuration). This is due to a long standing Irker bug.
+1. Optional. Under **Server host**, enter the server host address where `irkerd` runs. If empty,
+ it defaults to `localhost`.
+1. Optional. Under **Server port**, enter the server port of `irkerd`. If empty, it defaults to `6659`.
+1. Optional. Under **Default IRC URI**, enter the default IRC URI, in the format `irc[s]://domain.name`.
+ It's prepended to every channel or user provided under **Recipients**, which is not a full URI.
+1. Under **Recipients**, enter the users or channels to receive updates, separated by spaces
+ (for example, `#channel1 user1`). For more details, see [Enter irker recipients](#enter-irker-recipients).
+1. Optional. Under **Colorize messages**, select the checkbox. irker will highlight your messages.
+1. Select **Save changes** or optionally select **Test Settings**.
+
+## Enter irker recipients
+
+If you left the **Default IRC URI** field empty, enter recipients as a full URI:
+`irc[s]://irc.network.net[:port]/#channel`. If you entered a default IRC URI there, you can use just
+channel or user names.
+
+To send messages:
+
+- To a channel (for example, `#chan`), irker accepts channel names of the form `chan` and
+ `#chan`.
+- To a password-protected channel, append `?key=thesecretpassword` to the channel name,
+ with the channel password instead of `thesecretpassword`. For example, `chan?key=hunter2`.
+ Do **not** put the `#` sign in front of the channel name. If you do, irker tries to join a
+ channel named `#chan?key=password` and so it can leak the channel password through the
+ `/whois` IRC command. This is due to a long-standing irker bug.
+- In a user query, add `,isnick` after the user name. For example, `UserSmith,isnick`.
diff --git a/doc/user/project/integrations/jira.md b/doc/user/project/integrations/jira.md
deleted file mode 100644
index 521f15f330e..00000000000
--- a/doc/user/project/integrations/jira.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: '../../../integration/jira/index.md'
-remove_date: '2021-07-07'
----
-
-This document was moved to [another location](../../../integration/jira/index.md).
-
-<!-- This redirect file can be deleted after 2021-07-07. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/user/project/integrations/jira_integrations.md b/doc/user/project/integrations/jira_integrations.md
deleted file mode 100644
index 3aacf051c22..00000000000
--- a/doc/user/project/integrations/jira_integrations.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: '../../../integration/jira/index.md'
-remove_date: '2021-07-13'
----
-
-This document was moved to [another location](../../../integration/jira/index.md).
-
-<!-- This redirect file can be deleted after <2021-07-13>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/user/project/integrations/mattermost.md b/doc/user/project/integrations/mattermost.md
index 18ff6e324e3..92e5feefb73 100644
--- a/doc/user/project/integrations/mattermost.md
+++ b/doc/user/project/integrations/mattermost.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/user/project/integrations/mattermost_slash_commands.md b/doc/user/project/integrations/mattermost_slash_commands.md
index 619ae52481b..5b5feb73b69 100644
--- a/doc/user/project/integrations/mattermost_slash_commands.md
+++ b/doc/user/project/integrations/mattermost_slash_commands.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
@@ -110,7 +110,7 @@ provide to GitLab:
1. In the GitLab browser tab from
[getting configuration values from GitLab](#get-configuration-values-from-gitlab),
- select the **Active** check box to enable this configuration.
+ select the **Active** checkbox to enable this configuration.
1. In the **Token** field, paste the token you obtained from Mattermost.
ensure that the **Active** toggle is enabled.
diff --git a/doc/user/project/integrations/microsoft_teams.md b/doc/user/project/integrations/microsoft_teams.md
index 795ead573f2..fac26f8e70c 100644
--- a/doc/user/project/integrations/microsoft_teams.md
+++ b/doc/user/project/integrations/microsoft_teams.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
@@ -38,7 +38,7 @@ GitLab to send the notifications:
to your project's page.
1. Go to **Settings > Integrations** and select **Microsoft Teams Notification**.
1. Select **Active** to enable the integration.
-1. Select the check box next to each **Trigger** to enable:
+1. Select the checkbox next to each **Trigger** to enable:
- Push
- Issue
- Confidential issue
@@ -51,7 +51,7 @@ GitLab to send the notifications:
1. In **Webhook**, paste the URL you copied when you
[configured Microsoft Teams](#configure-microsoft-teams).
1. (Optional) If you enabled the pipeline trigger, you can select the
- **Notify only broken pipelines** check box to push notifications only when pipelines break.
+ **Notify only broken pipelines** checkbox to push notifications only when pipelines break.
1. Select the branches you want to send notifications for.
1. Click **Save changes**.
diff --git a/doc/user/project/integrations/mock_ci.md b/doc/user/project/integrations/mock_ci.md
index 934510fd155..631c53dcc44 100644
--- a/doc/user/project/integrations/mock_ci.md
+++ b/doc/user/project/integrations/mock_ci.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/user/project/integrations/overview.md b/doc/user/project/integrations/overview.md
index 53aa9da30ab..13def74450c 100644
--- a/doc/user/project/integrations/overview.md
+++ b/doc/user/project/integrations/overview.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
@@ -41,14 +41,14 @@ Click on the service links to see further configuration instructions and details
| [Flowdock](../../../api/services.md#flowdock) | Send notifications from GitLab to Flowdock flows. | **{dotted-circle}** No |
| [GitHub](github.md) | Obtain statuses for commits and pull requests. | **{dotted-circle}** No |
| [Google Chat](hangouts_chat.md) | Send notifications from your GitLab project to a room in Google Chat.| **{dotted-circle}** No |
-| [Irker (IRC gateway)](irker.md) | Send IRC messages. | **{dotted-circle}** No |
+| [irker (IRC gateway)](irker.md) | Send IRC messages. | **{dotted-circle}** No |
| [Jenkins](../../../integration/jenkins.md) | Run CI/CD pipelines with Jenkins. | **{check-circle}** Yes |
| JetBrains TeamCity CI | Run CI/CD pipelines with TeamCity. | **{check-circle}** Yes |
-| [Jira](jira.md) | Use Jira as the issue tracker. | **{dotted-circle}** No |
+| [Jira](../../../integration/jira/index.md) | Use Jira as the issue tracker. | **{dotted-circle}** No |
| [Mattermost notifications](mattermost.md) | Send notifications about project events to Mattermost channels. | **{dotted-circle}** No |
| [Mattermost slash commands](mattermost_slash_commands.md) | Perform common tasks with slash commands. | **{dotted-circle}** No |
| [Microsoft Teams notifications](microsoft_teams.md) | Receive event notifications. | **{dotted-circle}** No |
-| Packagist | Update your projects. | **{check-circle}** Yes |
+| Packagist | Keep your PHP dependencies updated on Packagist. | **{check-circle}** Yes |
| Pipelines emails | Send the pipeline status to a list of recipients by email. | **{dotted-circle}** No |
| [Pivotal Tracker](pivotal_tracker.md) | Add commit messages as comments to Pivotal Tracker stories. | **{dotted-circle}** No |
| [Prometheus](prometheus.md) | Monitor application metrics. | **{dotted-circle}** No |
diff --git a/doc/user/project/integrations/pivotal_tracker.md b/doc/user/project/integrations/pivotal_tracker.md
index c2c827c240b..d464007dd5e 100644
--- a/doc/user/project/integrations/pivotal_tracker.md
+++ b/doc/user/project/integrations/pivotal_tracker.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/user/project/integrations/prometheus.md b/doc/user/project/integrations/prometheus.md
index adc98151ce4..acae0793e19 100644
--- a/doc/user/project/integrations/prometheus.md
+++ b/doc/user/project/integrations/prometheus.md
@@ -109,7 +109,7 @@ can use only one:
[Cluster precedence](../../instance/clusters/index.md#cluster-precedence).
- If you have managed Prometheus applications installed on multiple Kubernetes
clusters at the **same** level, the Prometheus application of a cluster with a
- matching [environment scope](../../../ci/environments/index.md#scoping-environments-with-specs) is used.
+ matching [environment scope](../../../ci/environments/index.md#scope-environments-with-specs) is used.
## Determining the performance impact of a merge
diff --git a/doc/user/project/integrations/redmine.md b/doc/user/project/integrations/redmine.md
index 77e6eb75b9f..05d7c31a288 100644
--- a/doc/user/project/integrations/redmine.md
+++ b/doc/user/project/integrations/redmine.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/user/project/integrations/servicenow.md b/doc/user/project/integrations/servicenow.md
index bdc05552c31..fdcbb498621 100644
--- a/doc/user/project/integrations/servicenow.md
+++ b/doc/user/project/integrations/servicenow.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/user/project/integrations/slack.md b/doc/user/project/integrations/slack.md
index 17d1c3adcb5..5db4e839b54 100644
--- a/doc/user/project/integrations/slack.md
+++ b/doc/user/project/integrations/slack.md
@@ -1,52 +1,57 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
-# Slack Notifications Service **(FREE)**
+# Slack notifications service **(FREE)**
-The Slack Notifications Service allows your GitLab project to send events
+The Slack notifications service enables your GitLab project to send events
(such as issue creation) to your existing Slack team as notifications. Setting up
Slack notifications requires configuration changes for both Slack and GitLab.
-NOTE:
You can also use Slack slash commands to control GitLab inside Slack. This is the
separately configured [Slack slash commands](slack_slash_commands.md).
## Slack configuration
1. Sign in to your Slack team and [start a new Incoming WebHooks configuration](https://my.slack.com/services/new/incoming-webhook).
-1. Select the Slack channel where notifications should be sent to by default.
- Click the **Add Incoming WebHooks integration** button to add the configuration.
-1. Copy the **Webhook URL**, which we use later in the GitLab configuration.
+1. Identify the Slack channel where notifications should be sent to by default.
+ Select **Add Incoming WebHooks integration** to add the configuration.
+1. Copy the **Webhook URL**, which is used later in the GitLab configuration.
## GitLab configuration
-1. Open your project's page, and navigate to your project's
- [Integrations page](overview.md#accessing-integrations) at
- **Settings > Integrations**.
+1. On the top bar, select **Menu > Projects** and find your project.
+1. On the left sidebar, select **Settings > Integrations**.
1. Select the **Slack notifications** integration to configure it.
-1. Click **Enable integration**.
-1. In **Trigger**, select the checkboxes for each type of GitLab event to send to Slack as a
- notification. See [Triggers available for Slack notifications](#triggers-available-for-slack-notifications)
- for a full list. By default, messages are sent to the channel you configured during
+1. In the **Enable integration** section, select the **Active** checkbox.
+1. In the **Trigger** section, select the checkboxes for each type of GitLab
+ event to send to Slack as a notification. For a full list, see
+ [Triggers available for Slack notifications](#triggers-available-for-slack-notifications).
+ By default, messages are sent to the channel you configured during
[Slack integration](#slack-configuration).
-1. (Optional) To send messages to a different channel, multiple channels, or as a direct message:
- - To send messages to channels, enter the Slack channel names, separated by commas.
- - To send direct messages, use the Member ID found in the user's Slack profile.
+1. (Optional) To send messages to a different channel, multiple channels, or as
+ a direct message:
+ - *To send messages to channels,* enter the Slack channel names, separated by
+ commas.
+ - *To send direct messages,* use the Member ID found in the user's Slack profile.
NOTE:
Usernames and private channels are not supported.
-1. In **Webhook**, provide the webhook URL that you copied from the
+1. In **Webhook**, enter the webhook URL you copied from the previous
[Slack integration](#slack-configuration) step.
-1. (Optional) In **Username**, provide the username of the Slack bot that sends the notifications.
-1. Select the **Notify only broken pipelines** check box to only notify on failures.
-1. In the **Branches to be notified** select box, choose which types of branches
+1. (Optional) In **Username**, enter the username of the Slack bot that sends
+ the notifications.
+1. Select the **Notify only broken pipelines** checkbox to notify only on failures.
+1. In the **Branches to be notified** dropdown, select which types of branches
to send notifications for.
-1. Leave the **Labels to be notified** field blank to get all notifications or add labels that the issue or merge request must have in order to trigger a notification.
-1. Click **Test settings and save changes**.
+1. Leave the **Labels to be notified** field blank to get all notifications or
+ add labels that the issue or merge request must have in order to trigger a
+ notification.
+1. Select **Test settings** to verify your information, and then select
+ **Save changes**.
Your Slack team now starts receiving GitLab event notifications as configured.
@@ -54,19 +59,19 @@ Your Slack team now starts receiving GitLab event notifications as configured.
The following triggers are available for Slack notifications:
-- **Push**: Triggered by a push to the repository.
-- **Issue**: Triggered when an issue is created, updated, or closed.
-- **Confidential issue**: Triggered when a confidential issue is created,
- updated, or closed.
-- **Merge request**: Triggered when a merge request is created, updated, or
- merged.
-- **Note**: Triggered when someone adds a comment.
-- **Confidential note**: Triggered when someone adds a confidential note.
-- **Tag push**: Triggered when a new tag is pushed to the repository.
-- **Pipeline**: Triggered when a pipeline status changes.
-- **Wiki page**: Triggered when a wiki page is created or updated.
-- **Deployment**: Triggered when a deployment starts or finishes.
-- **Alert**: Triggered when a new, unique alert is recorded.
+| Trigger | Description |
+|------------------------|-------------|
+| **Push** | Triggered by a push to the repository. |
+| **Issue** | Triggered when an issue is created, updated, or closed. |
+| **Confidential issue** | Triggered when a confidential issue is created, updated, or closed. |
+| **Merge request** | Triggered when a merge request is created, updated, or merged. |
+| **Note** | Triggered when someone adds a comment. |
+| **Confidential note** | Triggered when someone adds a confidential note. |
+| **Tag push** | Triggered when a new tag is pushed to the repository. |
+| **Pipeline** | Triggered when a pipeline status changes. |
+| **Wiki page** | Triggered when a wiki page is created or updated. |
+| **Deployment** | Triggered when a deployment starts or finishes. |
+| **Alert** | Triggered when a new, unique alert is recorded. |
## Troubleshooting
@@ -89,7 +94,7 @@ You may see an entry similar to the following in your Sidekiq log:
```
This is probably a problem either with GitLab communicating with Slack, or GitLab
-communicating with itself. The former is less likely since Slack's security certificates
+communicating with itself. The former is less likely, as Slack's security certificates
should _hopefully_ always be trusted. We can establish which we're dealing with by using
the below rails console script.
@@ -114,6 +119,7 @@ If GitLab is not trusting HTTPS connections to itself, then you may
need to [add your certificate to the GitLab trusted certificates](https://docs.gitlab.com/omnibus/settings/ssl.html#install-custom-public-certificates).
If GitLab is not trusting connections to Slack, then the GitLab
-OpenSSL trust store is incorrect. Some typical causes: overriding
-the trust store with `gitlab_rails['env'] = {"SSL_CERT_FILE" => "/path/to/file.pem"}`,
-or by accidentally modifying the default CA bundle `/opt/gitlab/embedded/ssl/certs/cacert.pem`.
+OpenSSL trust store is incorrect. Some typical causes:
+
+- Overriding the trust store with `gitlab_rails['env'] = {"SSL_CERT_FILE" => "/path/to/file.pem"}`.
+- Accidentally modifying the default CA bundle `/opt/gitlab/embedded/ssl/certs/cacert.pem`.
diff --git a/doc/user/project/integrations/slack_slash_commands.md b/doc/user/project/integrations/slack_slash_commands.md
index 4f206cd3e45..dfebf9a1123 100644
--- a/doc/user/project/integrations/slack_slash_commands.md
+++ b/doc/user/project/integrations/slack_slash_commands.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/user/project/integrations/unify_circuit.md b/doc/user/project/integrations/unify_circuit.md
index 3e5e368722e..2e166e87ff5 100644
--- a/doc/user/project/integrations/unify_circuit.md
+++ b/doc/user/project/integrations/unify_circuit.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/user/project/integrations/webex_teams.md b/doc/user/project/integrations/webex_teams.md
index 2851fe0b299..3632fdf0e0c 100644
--- a/doc/user/project/integrations/webex_teams.md
+++ b/doc/user/project/integrations/webex_teams.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/user/project/integrations/webhooks.md b/doc/user/project/integrations/webhooks.md
index 01f3424d993..44225ac2921 100644
--- a/doc/user/project/integrations/webhooks.md
+++ b/doc/user/project/integrations/webhooks.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
@@ -94,7 +94,7 @@ Triggered when you push to the repository except when pushing tags.
NOTE:
When more than 20 commits are pushed at once, the `commits` webhook
-attribute only contains the first 20 for performance reasons. Loading
+attribute only contains the newest 20 for performance reasons. Loading
detailed commit data is expensive. Note that despite only 20 commits being
present in the `commits` attribute, the `total_commits_count` attribute contains the actual total.
@@ -1157,7 +1157,8 @@ X-Gitlab-Event: Pipeline Hook
},
"environment": {
"name": "production",
- "action": "start"
+ "action": "start",
+ "deployment_tier": "production"
}
},
{
@@ -1291,7 +1292,8 @@ X-Gitlab-Event: Pipeline Hook
},
"environment": {
"name": "staging",
- "action": "start"
+ "action": "start",
+ "deployment_tier": "staging"
}
}
]
@@ -1394,6 +1396,7 @@ X-Gitlab-Event: Deployment Hook
"object_kind": "deployment",
"status": "success",
"status_changed_at":"2021-04-28 21:50:00 +0200",
+ "deployment_id": 15,
"deployable_id": 796,
"deployable_url": "http://10.126.0.2:3000/root/test-deployment-webhooks/-/jobs/796",
"environment": "staging",
diff --git a/doc/user/project/integrations/youtrack.md b/doc/user/project/integrations/youtrack.md
index f39c34ccc0a..eda0874ac08 100644
--- a/doc/user/project/integrations/youtrack.md
+++ b/doc/user/project/integrations/youtrack.md
@@ -1,6 +1,6 @@
---
-stage: Create
-group: Ecosystem
+stage: Ecosystem
+group: Integrations
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
diff --git a/doc/user/project/issue_board.md b/doc/user/project/issue_board.md
index a32a8ed8ec7..0c624d7df01 100644
--- a/doc/user/project/issue_board.md
+++ b/doc/user/project/issue_board.md
@@ -29,7 +29,7 @@ To let your team members organize their own workflows, use
[multiple issue boards](#use-cases-for-multiple-issue-boards). This allows creating multiple issue
boards in the same project.
-![GitLab issue board - Core](img/issue_boards_core_v13_6.png)
+![GitLab issue board - Core](img/issue_boards_core_v14_1.png)
Different issue board features are available in different [GitLab tiers](https://about.gitlab.com/pricing/),
as shown in the following table:
@@ -42,7 +42,7 @@ as shown in the following table:
To learn more, visit [GitLab Enterprise features for issue boards](#gitlab-enterprise-features-for-issue-boards) below.
-![GitLab issue board - Premium](img/issue_boards_premium_v13_6.png)
+![GitLab issue board - Premium](img/issue_boards_premium_v14_1.png)
<i class="fa fa-youtube-play youtube" aria-hidden="true"></i>
Watch a [video presentation](https://youtu.be/vjccjHI7aGI) of
@@ -227,21 +227,21 @@ and vice versa.
<!-- This anchor is linked from #blocked-issues as well. -->
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/285074) in GitLab 13.9.
-> - [Deployed behind a feature flag](../feature_flags.md), disabled by default.
-> - Disabled on GitLab.com.
-> - Not recommended for production use.
-> - To use it in GitLab self-managed instances, ask a GitLab administrator to [enable it](#enable-or-disable-graphql-based-issue-boards). **(FREE SELF)**
+> - [Deployed behind a feature flag](../feature_flags.md), enabled by default.
+> - [Enabled by default](https://gitlab.com/gitlab-org/gitlab/-/issues/248908) in GitLab 14.1
+> - Recommended for production use.
+> - For GitLab self-managed instances, GitLab administrators can opt to [disable it](#enable-or-disable-graphql-based-issue-boards). **(FREE SELF)**
-This in-development feature might not be available for your use. There can be
-[risks when enabling features still in development](../feature_flags.md#risks-when-enabling-features-still-in-development).
+There can be
+[risks when disabling released features](../../administration/feature_flags.md#risks-when-disabling-released-features).
Refer to this feature's version history for more details.
-The work-in-progress GraphQL-based boards come with these features:
+Using GraphQL-based boards gives you these
+additional features:
- [Edit more issue attributes](#edit-an-issue)
- [View blocked issues](#blocked-issues)
-The GraphQL-based Issue Board is a work in progress.
Learn more about the known issues in [epic 5596](https://gitlab.com/groups/gitlab-org/-/epics/5596).
## GitLab Enterprise features for issue boards
@@ -307,15 +307,16 @@ an assignee list that shows all issues assigned to a user.
You can have a board with both label lists and assignee lists. To add an
assignee list:
-1. Select the **Add list** dropdown button.
-1. Select the **Assignee list** tab.
-1. Search and select the user you want to add as an assignee.
+1. Select **Create list**.
+1. Select **Assignee**.
+1. In the dropdown, select a user.
+1. Select **Add to board**.
Now that the assignee list is added, you can assign or unassign issues to that user
by [moving issues](#move-issues-and-lists) to and from an assignee list.
To remove an assignee list, just as with a label list, click the trash icon.
-![Assignee lists](img/issue_board_assignee_lists_v13_6.png)
+![Assignee lists](img/issue_board_assignee_lists_v14_1.png)
### Milestone lists **(PREMIUM)**
@@ -324,15 +325,16 @@ To remove an assignee list, just as with a label list, click the trash icon.
You're also able to create lists of a milestone. These are lists that filter issues by the assigned
milestone, giving you more freedom and visibility on the issue board. To add a milestone list:
-1. Select the **Add list** dropdown button.
-1. Select the **Milestone** tab.
-1. Search and click the milestone.
+1. Select **Create list**.
+1. Select **Milestone**.
+1. In the dropdown, select a milestone.
+1. Select **Add to board**.
Like the assignee lists, you're able to [drag issues](#move-issues-and-lists)
to and from a milestone list to manipulate the milestone of the dragged issues.
As in other list types, click the trash icon to remove a list.
-![Milestone lists](img/issue_board_milestone_lists_v13_6.png)
+![Milestone lists](img/issue_board_milestone_lists_v14_1.png)
### Iteration lists **(PREMIUM)**
@@ -343,7 +345,7 @@ As in other list types, click the trash icon to remove a list.
> - For GitLab self-managed instances, GitLab administrators can opt to disable the feature flags: [`board_new_list`](#enable-or-disable-new-add-list-form) and [`iteration_board_lists`](#enable-or-disable-iteration-lists-in-boards). **(PREMIUM SELF)**
There can be
-[risks when disabling released features](../feature_flags.md#risks-when-disabling-released-features).
+[risks when disabling released features](../../administration/feature_flags.md#risks-when-disabling-released-features).
Refer to this feature's version history for more details.
You're also able to create lists of an iteration.
@@ -351,7 +353,7 @@ These are lists that filter issues by the assigned
iteration. To add an iteration list:
1. Select **Create list**.
-1. Select the **Iteration**.
+1. Select **Iteration**.
1. In the dropdown, select an iteration.
1. Select **Add to board**.
@@ -378,7 +380,7 @@ To group issues by epic in an issue board:
1. Select the **Group by** dropdown button.
1. Select **Epic**.
-![Epics Swimlanes](img/epics_swimlanes_v13.6.png)
+![Epics Swimlanes](img/epics_swimlanes_v14_1.png)
To edit an issue without leaving this view, select the issue card (not its title), and a sidebar
appears on the right. There you can see and edit the issue's:
@@ -481,17 +483,12 @@ When you use [GraphQL-based boards](#graphql-based-issue-boards), you can also e
### Create a new list
-Create a new list by clicking the **Add list** dropdown button in the upper right corner of the issue board.
+Create a new list by clicking the **Create** button in the upper right corner of the issue board.
-![creating a new list in an issue board](img/issue_board_add_list_v13_6.png)
+![creating a new list in an issue board](img/issue_board_add_list_v14_1.png)
-Then, choose the label or user to base the new list on. The new list is inserted
-at the end of the lists, before **Done**. To move and reorder lists, drag them around.
-
-To create a list for a label that doesn't yet exist, create the label by
-choosing **Create project label** or **Create group label**.
-This creates the label immediately and adds it to the dropdown.
-You can now choose it to create a list.
+Then, choose the label, user or milestone to base the new list on. The new list is inserted
+at the end of the lists, before **Closed**. To move and reorder lists, drag them around.
### Remove a list
@@ -632,7 +629,7 @@ and the target list.
> - To use in GitLab self-managed instances, ask a GitLab administrator to [enable it](#enable-or-disable-multi-selecting-issue-cards). **(FREE SELF)**
This in-development feature might not be available for your use. There can be
-[risks when enabling features still in development](../feature_flags.md#risks-when-enabling-features-still-in-development).
+[risks when enabling features still in development](../../administration/feature_flags.md#risks-when-enabling-features-still-in-development).
Refer to this feature's version history for more details.
You can select multiple issue cards, then drag the group to another position within the list, or to
@@ -682,10 +679,9 @@ NOTE:
When enabling GraphQL-based issue boards, you must also enable the
[new add list form](#enable-or-disable-new-add-list-form).
-GraphQL-based issue boards is not ready for production use.
-It is deployed behind a feature flag that is **disabled by default** as of GitLab 13.12.
+It is deployed behind a feature flag that is **enabled by default** as of GitLab 14.1.
[GitLab administrators with access to the GitLab Rails console](../../administration/feature_flags.md)
-can enable it.
+can disable it.
To enable it:
diff --git a/doc/user/project/issues/confidential_issues.md b/doc/user/project/issues/confidential_issues.md
index 92c26fb654e..136e8ee2ebb 100644
--- a/doc/user/project/issues/confidential_issues.md
+++ b/doc/user/project/issues/confidential_issues.md
@@ -45,8 +45,8 @@ system note in the issue's comments.
## Indications of a confidential issue
There are a few things that visually separate a confidential issue from a
-regular one. In the issues index page view, you can see the eye-slash icon
-next to the issues that are marked as confidential.
+regular one. In the issues index page view, you can see the eye-slash (**(eye-slash)**) icon
+next to the issues that are marked as confidential:
![Confidential issues index page](img/confidential_issues_index_page.png)
@@ -67,6 +67,12 @@ There is also an indicator on the sidebar denoting confidentiality.
| :-----------: | :----------: |
| ![Sidebar confidential issue](img/sidebar_confidential_issue.png) | ![Sidebar not confidential issue](img/sidebar_not_confidential_issue.png) |
+## Merge requests for confidential issues
+
+Although you can make issues be confidential in public projects, you cannot make
+confidential merge requests. Learn how to create [merge requests for confidential issues](../merge_requests/confidential.md)
+that prevent leaks of private data.
+
## Permissions and access to confidential issues
There are two kinds of level access for confidential issues. The general rule
@@ -82,48 +88,9 @@ sees in the project's search results respectively.
|:---------------------------------------------------------------------------------------|:---------------------------------------------------------------------------------|
| ![Confidential issues search by maintainer](img/confidential_issues_search_master.png) | ![Confidential issues search by guest](img/confidential_issues_search_guest.png) |
-## Merge Requests for Confidential Issues
-
-> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/58583) in GitLab 12.1.
-
-To help prevent confidential information being leaked from a public project
-in the process of resolving a confidential issue, confidential issues can be
-resolved by creating a merge request from a private fork.
-
-The created merge request targets the default branch of the private fork,
-not the default branch of the public upstream project. This prevents the merge
-request, branch, and commits entering the public repository, and revealing
-confidential information prematurely. To make a confidential commit public,
-open a merge request from the private fork to the public upstream project.
-
-Permissions are inherited from parent groups. Developers have the same permissions
-for private forks created in the same group or in a subgroup of the original
-Permissions are inherited from parent groups. When private forks are created
-in the same group or subgroup as the original upstream repository, users
-receive the same permissions in both projects. This inheritance ensures
-Developer users have the needed permissions to both view confidential issues and
-resolve them.
-
-### How it works
-
-On a confidential issue, a **Create confidential merge request** button is
-available. Clicking on it opens a dropdown where you can choose to
-**Create confidential merge request and branch** or **Create branch**:
-
-| Create confidential merge request | Create branch |
-| :-------------------------------: | :-----------: |
-| ![Create Confidential Merge Request Dropdown](img/confidential_mr_dropdown_v12_1.png) | ![Create Confidential Branch Dropdown](img/confidential_mr_branch_dropdown_v12_1.png) |
-
-The **Project** dropdown includes the list of private forks the user is a member
-of as at least a Developer and merge requests are enabled.
-
-Whenever the **Branch name** and **Source (branch or tag)** fields change, the
-availability of the target and source branch are checked. Both branches should
-be available in the selected private fork.
-
-By clicking the **Create confidential merge request** button, GitLab creates
-the branch and merge request in the private fork. When you choose
-**Create branch**, GitLab creates only the branch.
+## Related links
-After the branch is created in the private fork, developers can push code to
-that branch to fix the confidential issue.
+- [Merge requests for confidential issues](../merge_requests/confidential.md)
+- [Make an epic confidential](../../group/epics/manage_epics.md#make-an-epic-confidential)
+- [Mark a comment as confidential](../../discussions/index.md#mark-a-comment-as-confidential)
+- [Security practices for confidential merge requests](https://gitlab.com/gitlab-org/release/docs/blob/master/general/security/developer.md#security-releases-critical-non-critical-as-a-developer) at GitLab
diff --git a/doc/user/project/issues/csv_export.md b/doc/user/project/issues/csv_export.md
index 29adf396d4d..a9fca4f2b75 100644
--- a/doc/user/project/issues/csv_export.md
+++ b/doc/user/project/issues/csv_export.md
@@ -18,9 +18,12 @@ file, which stores tabular data in plain text.
> _CSVs are a handy way of getting data from one program to another where one
program cannot read the other ones normal output._ [Ref](https://www.quora.com/What-is-a-CSV-file-and-its-uses)
+<!-- vale gitlab.Spelling = NO -->
+
CSV files can be used with any plotter or spreadsheet-based program, such as
-Microsoft Excel, Open Office <!-- vale gitlab.Spelling = NO --> Calc, <!-- vale gitlab.Spelling = NO -->,
-or Google Sheets.
+Microsoft Excel, Open Office Calc, or Google Sheets.
+
+<!-- vale gitlab.Spelling = YES -->
Here are some of the uses of exporting issues as CSV files:
diff --git a/doc/user/project/issues/design_management.md b/doc/user/project/issues/design_management.md
index e0eb35d1e49..7f2713b81e6 100644
--- a/doc/user/project/issues/design_management.md
+++ b/doc/user/project/issues/design_management.md
@@ -48,7 +48,7 @@ If the requirements are not met, the **Designs** tab displays a message to the u
Files uploaded must have a file extension of either `png`, `jpg`, `jpeg`,
`gif`, `bmp`, `tiff`, `ico`, `webp`, or `svg`.
-Support for [PDF](https://gitlab.com/gitlab-org/gitlab/-/issues/32811) is planned for a future release.
+Support for PDF is tracked [in this issue](https://gitlab.com/gitlab-org/gitlab/-/issues/32811).
## Limitations
diff --git a/doc/user/project/issues/img/confidential_mr_branch_dropdown_v12_1.png b/doc/user/project/issues/img/confidential_mr_branch_dropdown_v12_1.png
deleted file mode 100644
index 1f4ad5c42bb..00000000000
--- a/doc/user/project/issues/img/confidential_mr_branch_dropdown_v12_1.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/issues/img/confidential_mr_dropdown_v12_1.png b/doc/user/project/issues/img/confidential_mr_dropdown_v12_1.png
deleted file mode 100644
index 7b7bd599a71..00000000000
--- a/doc/user/project/issues/img/confidential_mr_dropdown_v12_1.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/issues/index.md b/doc/user/project/issues/index.md
index ec0cdc116d6..56c219eb8c3 100644
--- a/doc/user/project/issues/index.md
+++ b/doc/user/project/issues/index.md
@@ -41,7 +41,7 @@ To learn how the GitLab Strategic Marketing department uses GitLab issues with [
- [Upload designs to issues](design_management.md)
- [Linked issues](related_issues.md)
- [Cross-link issues](crosslinking_issues.md)
-- [Bulk edit issues](../bulk_editing.md)
+- [Bulk edit issues](../issues/managing_issues.md)
- [Sort issue lists](sorting_issue_lists.md)
- [Search for issues](../../search/index.md#filtering-issue-and-merge-request-lists)
- [Epics](../../group/epics/index.md)
diff --git a/doc/user/project/issues/issue_data_and_actions.md b/doc/user/project/issues/issue_data_and_actions.md
index 2ef12cd1240..78dc6805f2b 100644
--- a/doc/user/project/issues/issue_data_and_actions.md
+++ b/doc/user/project/issues/issue_data_and_actions.md
@@ -199,7 +199,7 @@ You can mention a user or a group present in your GitLab instance with `@usernam
unless they have disabled all [notifications](#notifications) in their user settings.
This is controlled in the [notification settings](../../profile/notifications.md).
-Mentions for yourself (the current logged in user) are highlighted
+Mentions for yourself (the user currently signed in) are highlighted
in a different color, which allows you to quickly see which comments involve you.
Avoid mentioning `@all` in issues and merge requests, as it sends an email notification
diff --git a/doc/user/project/issues/managing_issues.md b/doc/user/project/issues/managing_issues.md
index c570bc9612a..a2185c83f4d 100644
--- a/doc/user/project/issues/managing_issues.md
+++ b/doc/user/project/issues/managing_issues.md
@@ -59,7 +59,7 @@ When you're creating a new issue, these are the fields you can fill in:
- Title
- Description
-- Checkbox to make the issue confidential
+- Checkbox to make the issue [confidential](confidential_issues.md)
- Assignee
- Weight
- [Epic](../../group/epics/index.md)
diff --git a/doc/user/project/members/index.md b/doc/user/project/members/index.md
index 8987c663860..8a70b74fcc1 100644
--- a/doc/user/project/members/index.md
+++ b/doc/user/project/members/index.md
@@ -99,7 +99,7 @@ In this example:
- **Administrator** is the [Owner](../../permissions.md) and member of all groups.
They have inherited their role from the **demo** group.
-If a user is a direct member of a project, the expiration date can be updated. If membership is inherited from a parent group, the expiration date can be updated only from the parent group itself.
+If a user is a direct member of a project, the expiration date can be updated. If membership is inherited from a parent group, the expiration date can be updated only from the parent group itself.
## Remove a member from a project
@@ -107,7 +107,7 @@ If a user is a direct member of a project, you can remove them.
If membership is inherited from a parent group, then the member can be removed only from the parent
group itself.
-Prerequisite:
+Prerequisites:
- You must have the [Owner role](../../permissions.md).
- Optional. Unassign the member from all issues and merge requests that
@@ -117,7 +117,13 @@ To remove a member from a project:
1. Go to your project and select **Project information > Members**.
1. Next to the project member you want to remove, select **Remove member** **{remove}**.
-1. Optional. In the confirmation box, select the **Also unassign this user from related issues and merge requests** checkbox.
+1. Optional. In the confirmation box, select the
+ **Also unassign this user from related issues and merge requests** checkbox.
+1. To prevent leaks of sensitive information from private projects, verify the
+ user has not forked the private repository. Existing forks continue to receive
+ changes from the upstream project. You may also want to configure your project
+ to prevent projects in a group
+ [from being forked outside their group](../../group/index.md#prevent-project-forking-outside-group).
1. Select **Remove member**.
## Filter and sort members
diff --git a/doc/user/project/merge_requests/approvals/index.md b/doc/user/project/merge_requests/approvals/index.md
index 40345f33cb2..47744edd5ce 100644
--- a/doc/user/project/merge_requests/approvals/index.md
+++ b/doc/user/project/merge_requests/approvals/index.md
@@ -42,17 +42,12 @@ rules to define what types of users can approve work. Some examples of rules you
- Users with specific permissions can be allowed or denied the ability
to [override approval rules on a specific merge request](rules.md#edit-or-override-merge-request-approval-rules).
-You can also configure additional [settings for merge request approvals](settings.md)
-for more control of the level of oversight and security your project needs, including:
+You can also configure:
-- [Prevent users from overriding a merge request approval rule.](settings.md#prevent-overrides-of-default-approvals)
-- [Reset approvals when new code is pushed.](settings.md#reset-approvals-on-push)
-- Allow (or disallow) [authors and committers](settings.md) to approve their own merge requests.
-- [Require password authentication when approving.](settings.md#require-authentication-for-approvals)
-- [Require security team approval.](settings.md#security-approvals-in-merge-requests)
-
-You can configure your merge request approval rules and settings through the GitLab
-user interface or with the [Merge request approvals API](../../../../api/merge_request_approvals.md).
+- Additional [settings for merge request approvals](settings.md) for more control of the
+ level of oversight and security your project needs.
+- Merge request approval rules and settings through the GitLab UI or with the
+ [Merge request approvals API](../../../../api/merge_request_approvals.md).
## Approve a merge request
@@ -74,10 +69,10 @@ such as merge conflicts, [pending discussions](../../../discussions/index.md#pre
or a [failed CI/CD pipeline](../merge_when_pipeline_succeeds.md).
To prevent merge request authors from approving their own merge requests,
-enable [**Prevent author approval**](settings.md#prevent-authors-from-approving-their-own-work)
+enable [**Prevent author approval**](settings.md#prevent-approval-by-author)
in your project's settings.
-If you enable [approval rule overrides](settings.md#prevent-overrides-of-default-approvals),
+If you enable [approval rule overrides](settings.md#prevent-editing-approval-rules-in-merge-requests),
merge requests created before a change to default approval rules are not affected.
The only exceptions are changes to the [target branch](rules.md#approvals-for-protected-branches)
of the rule.
@@ -121,6 +116,6 @@ important to describe those, too. Think of things that may go wrong and include
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`.
+Each scenario can be a third-level heading, for example, `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->
diff --git a/doc/user/project/merge_requests/approvals/rules.md b/doc/user/project/merge_requests/approvals/rules.md
index 82685f9101e..7e168fb239a 100644
--- a/doc/user/project/merge_requests/approvals/rules.md
+++ b/doc/user/project/merge_requests/approvals/rules.md
@@ -49,7 +49,7 @@ Users of GitLab Premium and higher tiers can create [additional approval rules](
Your configuration for approval rule overrides determines if the new rule is applied
to existing merge requests:
-- If [approval rule overrides](settings.md#prevent-overrides-of-default-approvals) are allowed,
+- If [approval rule overrides](settings.md#prevent-editing-approval-rules-in-merge-requests) are allowed,
changes to these default rules are not applied to existing merge requests, except for
changes to the [target branch](#approvals-for-protected-branches) of the rule.
- If approval rule overrides are not allowed, all changes to default rules
@@ -138,10 +138,10 @@ approve in these ways:
counts as one approver, and not two.
- Merge request authors do not count as eligible approvers on their own merge requests by default.
To change this behavior, disable the
- [**Prevent author approval**](settings.md#prevent-authors-from-approving-their-own-work)
+ [**Prevent author approval**](settings.md#prevent-approval-by-author)
project setting.
- Committers to merge requests can approve a merge request. To change this behavior, enable the
- [**Prevent committers approval**](settings.md#prevent-committers-from-approving-their-own-work)
+ [**Prevent committers approval**](settings.md#prevent-approvals-by-users-who-add-commits)
project setting.
### Code owners as eligible approvers **(PREMIUM)**
@@ -201,7 +201,7 @@ on a merge request, you can either add or remove approvers:
1. Add or remove your desired approval rules.
1. Select **Save changes**.
-Administrators can change the [merge request approvals settings](settings.md#prevent-overrides-of-default-approvals)
+Administrators can change the [merge request approvals settings](settings.md#prevent-editing-approval-rules-in-merge-requests)
to prevent users from overriding approval rules for merge requests.
## Configure optional approval rules **(PREMIUM)**
diff --git a/doc/user/project/merge_requests/approvals/settings.md b/doc/user/project/merge_requests/approvals/settings.md
index 8a81ff8c94b..ebd07f30f52 100644
--- a/doc/user/project/merge_requests/approvals/settings.md
+++ b/doc/user/project/merge_requests/approvals/settings.md
@@ -20,37 +20,17 @@ To view or edit merge request approval settings:
1. Go to your project and select **Settings > General**.
1. Expand **Merge request (MR) approvals**.
-In this section of general settings, you can configure the settings described
-on this page.
+In this section of general settings, you can configure the following settings:
-## Prevent overrides of default approvals
+| Setting | Description |
+| ------ | ------ |
+| [Prevent approval by author](#prevent-approval-by-author) | When enabled, the author of a merge request cannot approve it. |
+| [Prevent approvals by users who add commits](#prevent-approvals-by-users-who-add-commits) | When enabled, users who have committed to a merge request cannot approve it. |
+| [Prevent editing approval rules in merge requests](#prevent-editing-approval-rules-in-merge-requests) | When enabled, users can't override the project's approval rules on merge requests. |
+| [Require user password to approve](#require-user-password-to-approve) | Force potential approvers to first authenticate with a password. |
+| [Remove all approvals when commits are added to the source branch](#remove-all-approvals-when-commits-are-added-to-the-source-branch) | When enabled, remove all existing approvals on a merge request when more changes are added to it. |
-By default, users can override the approval rules you [create for a project](rules.md)
-on a per-merge request basis. If you don't want users to change approval rules
-on merge requests, you can disable this setting:
-
-1. Go to your project and select **Settings > General**.
-1. Expand **Merge request (MR) approvals**.
-1. Select the **Prevent users from modifying MR approval rules in merge requests** checkbox.
-1. Select **Save changes**.
-
-This change affects all open merge requests.
-
-## Reset approvals on push
-
-By default, an approval on a merge request remains in place, even if you add more changes
-after the approval. If you want to remove all existing approvals on a merge request
-when more changes are added to it:
-
-1. Go to your project and select **Settings > General**.
-1. Expand **Merge request (MR) approvals**.
-1. Select the **Require new approvals when new commits are added to an MR** checkbox.
-1. Select **Save changes**.
-
-Approvals aren't reset when a merge request is [rebased from the UI](../fast_forward_merge.md)
-However, approvals are reset if the target branch is changed.
-
-## Prevent authors from approving their own work **(PREMIUM)**
+## Prevent approval by author **(PREMIUM)**
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/3349) in GitLab 11.3.
> - Moved to GitLab Premium in 13.9.
@@ -65,14 +45,14 @@ By default, the author of a merge request cannot approve it. To change this sett
Authors can edit the approval rule in an individual merge request and override
this setting, unless you configure one of these options:
-- [Prevent overrides of default approvals](#prevent-overrides-of-default-approvals) at
+- [Prevent overrides of default approvals](#prevent-editing-approval-rules-in-merge-requests) at
the project level.
- *(Self-managed instances only)* Prevent overrides of default approvals
[at the instance level](../../../admin_area/merge_requests_approvals.md). When configured
at the instance level, you can't edit this setting at the project or individual
merge request levels.
-## Prevent committers from approving their own work **(PREMIUM)**
+## Prevent approvals by users who add commits **(PREMIUM)**
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/10441) in GitLab 11.10.
> - Moved to GitLab Premium in 13.9.
@@ -96,7 +76,20 @@ to a merge request can approve merge requests that affect files they own.
To learn more about the [differences between authors and committers](https://git-scm.com/book/en/v2/Git-Basics-Viewing-the-Commit-History),
read the official Git documentation for an explanation.
-## Require authentication for approvals
+## Prevent editing approval rules in merge requests
+
+By default, users can override the approval rules you [create for a project](rules.md)
+on a per-merge request basis. If you don't want users to change approval rules
+on merge requests, you can disable this setting:
+
+1. Go to your project and select **Settings > General**.
+1. Expand **Merge request (MR) approvals**.
+1. Select the **Prevent users from modifying MR approval rules in merge requests** checkbox.
+1. Select **Save changes**.
+
+This change affects all open merge requests.
+
+## Require user password to approve
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/5981) in GitLab 12.0.
> - Moved to GitLab Premium in 13.9.
@@ -112,6 +105,20 @@ permission enables an electronic signature for approvals, such as the one define
1. Select the **Require user password for approvals** checkbox.
1. Select **Save changes**.
+## Remove all approvals when commits are added to the source branch
+
+By default, an approval on a merge request remains in place, even if you add more changes
+after the approval. If you want to remove all existing approvals on a merge request
+when more changes are added to it:
+
+1. Go to your project and select **Settings > General**.
+1. Expand **Merge request (MR) approvals**.
+1. Select the **Require new approvals when new commits are added to an MR** checkbox.
+1. Select **Save changes**.
+
+Approvals aren't reset when a merge request is [rebased from the UI](../fast_forward_merge.md)
+However, approvals are reset if the target branch is changed.
+
## Security approvals in merge requests **(ULTIMATE)**
You can require that a member of your security team approves a merge request if a
@@ -129,5 +136,5 @@ To learn more, see [Coverage check approval rule](../../../../ci/pipelines/setti
## Related links
- [Instance-level merge request approval settings](../../../admin_area/merge_requests_approvals.md)
-- [Compliance Dashboard](../../../compliance/compliance_dashboard/index.md)
+- [Compliance report](../../../compliance/compliance_report/index.md)
- [Merge request approvals API](../../../../api/merge_request_approvals.md)
diff --git a/doc/user/project/merge_requests/changes.md b/doc/user/project/merge_requests/changes.md
index e594f8048e3..c59d5973e21 100644
--- a/doc/user/project/merge_requests/changes.md
+++ b/doc/user/project/merge_requests/changes.md
@@ -85,11 +85,15 @@ entire content by selecting **Show file contents**.
## Ignore whitespace changes in Merge Request diff view
-If you select the **Hide whitespace changes** button, you can see the diff
-without whitespace changes (if there are any). This is also working when on a
-specific commit page.
+Whitespace changes can make it more difficult to see the substantive changes in
+a merge request. You can choose to hide or show whitespace changes:
-![MR diff](img/merge_request_diff.png)
+1. Go to your merge request, and select the **Changes** tab.
+1. Above the list of changed files, select **(settings)** **Preferences** to
+ display the preferences menu.
+1. Select or deselect **Show whitespace changes**:
+
+ ![MR diff](img/merge_request_diff_v14_2.png)
## Mark files as viewed
@@ -140,7 +144,7 @@ Feature.disable(:local_file_reviews)
> - To use in GitLab self-managed instances, ask a GitLab administrator to [enable it](#enable-or-disable-merge-request-conflicts-in-diff). **(FREE SELF)**
This in-development feature might not be available for your use. There can be
-[risks when enabling features still in development](../../feature_flags.md#risks-when-enabling-features-still-in-development).
+[risks when enabling features still in development](../../../administration/feature_flags.md#risks-when-enabling-features-still-in-development).
Refer to this feature's version history for more details.
To avoid displaying the changes that are already on target branch in the diff,
diff --git a/doc/user/project/merge_requests/cherry_pick_changes.md b/doc/user/project/merge_requests/cherry_pick_changes.md
index 710638128f3..a0c3efe7143 100644
--- a/doc/user/project/merge_requests/cherry_pick_changes.md
+++ b/doc/user/project/merge_requests/cherry_pick_changes.md
@@ -37,7 +37,8 @@ request thread. It crosslinks the new commit and the existing merge request.
Each deployment's [list of associated merge requests](../../../api/deployments.md#list-of-merge-requests-associated-with-a-deployment) includes cherry-picked merge commits.
NOTE:
-We only track cherry-pick executed from GitLab (both UI and API). Support for [tracking cherry-picked commits through the command line](https://gitlab.com/gitlab-org/gitlab/-/issues/202215) is planned for a future release.
+We only track cherry-pick executed from GitLab (both UI and API). Support for tracking cherry-picked commits through the command line
+is tracked [in this issue](https://gitlab.com/gitlab-org/gitlab/-/issues/202215).
## Cherry-picking a commit
@@ -62,8 +63,8 @@ git cherry-pick -m 2 7a39eb0
### Cherry-pick into a project
-> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/21268) in GitLab 13.11.
-> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/324154) in GitLab 14.0
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/21268) in GitLab 13.11 behind a [feature flag](../../feature_flags.md), disabled by default.
+> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/324154) in GitLab 14.0.
WARNING:
This feature might not be available to you. Check the **version history** note above for details.
diff --git a/doc/user/project/merge_requests/code_quality.md b/doc/user/project/merge_requests/code_quality.md
index 19302572dc9..6337fb1e87b 100644
--- a/doc/user/project/merge_requests/code_quality.md
+++ b/doc/user/project/merge_requests/code_quality.md
@@ -65,7 +65,7 @@ See also the Code Climate list of [Supported Languages for Maintainability](http
Changes to files in merge requests can cause Code Quality to fall if merged. In these cases,
the merge request's diff view displays an indicator next to lines with new Code Quality violations. For example:
-![Code Quality MR diff report](img/code_quality_mr_diff_report_v14.png)
+![Code Quality MR diff report](img/code_quality_mr_diff_report_v14_2.png)
## Example configuration
@@ -296,6 +296,40 @@ code_quality:
- if: '$CI_COMMIT_TAG' # Run code quality job in pipelines for tags
```
+### Configure Code Quality to use a private container image registry
+
+> [Introduced](https://gitlab.com/gitlab-org/ci-cd/codequality/-/merge_requests/30) in 13.7.
+
+To reduce network time and external dependency, you can use your own
+container image registry to host the Code Quality Docker images. Because of
+the nested architecture of container execution, the registry prefix must
+be specifically configured to be passed down into CodeClimate's subsequent
+`docker pull` commands for individual engines.
+
+The following two variables can address all of the required image pulls:
+
+- `CODE_QUALITY_IMAGE`: A fully prefixed image name that can be located anywhere
+ accessible from your job environment. GitLab Container Registry can be used here
+ to host your own copy.
+- `CODECLIMATE_PREFIX`: The domain of your intended container image registry. This
+ is a configuration option supported by [CodeClimate CLI](https://github.com/codeclimate/codeclimate/pull/948). You must:
+ - Include a trailing slash (`/`).
+ - Not include a protocol prefix, such as `https://`.
+
+```yaml
+include:
+ - template: Jobs/Code-Quality.gitlab-ci.yml
+
+code_quality:
+ variables:
+ CODE_QUALITY_IMAGE: "my-private-registry.local:12345/codequality:0.85.24"
+ CODECLIMATE_PREFIX: "my-private-registry.local:12345/"
+```
+
+This example is specific to GitLab Code Quality. For more general
+instructions on how to configure DinD with a registry mirror, see the
+relevant [documentation](../../../ci/docker/using_docker_build.md#enable-registry-mirror-for-dockerdind-service).
+
## Configuring jobs using variables
The Code Quality job supports environment variables that users can set to
@@ -511,7 +545,7 @@ This can be due to multiple reasons:
- You just added the Code Quality job in your `.gitlab-ci.yml`. The report does not
have anything to compare to yet, so no information can be displayed. It only displays
after future merge requests have something to compare to.
-- Your pipeline is not set to run the code quality job on your target branch. If there is no report generated from the target branch, your MR branch reports have nothing to compare to.
+- Your pipeline is not set to run the code quality job on your target branch. If there is no report generated from the target branch, your MR branch reports have nothing to compare to. In this situation you will see an error stating `Base pipeline codequality artifact not found`.
- If no [degradation or error is detected](https://docs.codeclimate.com/docs/maintainability#section-checks),
nothing is displayed.
- The [`artifacts:expire_in`](../../../ci/yaml/index.md#artifactsexpire_in) CI/CD
diff --git a/doc/user/project/merge_requests/commits.md b/doc/user/project/merge_requests/commits.md
index fb1b7f8b9b6..3d3032bb193 100644
--- a/doc/user/project/merge_requests/commits.md
+++ b/doc/user/project/merge_requests/commits.md
@@ -42,7 +42,7 @@ Previously merged commits can be added, but they can't be removed due to
[this bug](https://gitlab.com/gitlab-org/gitlab/-/issues/325538).
This in-development feature might not be available for your use. There can be
-[risks when enabling features still in development](../../feature_flags.md#risks-when-enabling-features-still-in-development).
+[risks when enabling features still in development](../../../administration/feature_flags.md#risks-when-enabling-features-still-in-development).
Refer to this feature's version history for more details.
When reviewing a merge request, it helps to have more context about the changes
diff --git a/doc/user/project/merge_requests/confidential.md b/doc/user/project/merge_requests/confidential.md
new file mode 100644
index 00000000000..6df84dd1dd1
--- /dev/null
+++ b/doc/user/project/merge_requests/confidential.md
@@ -0,0 +1,75 @@
+---
+stage: Create
+group: Code Review
+info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
+---
+
+# Merge requests for confidential issues
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/58583) in GitLab 12.1.
+
+Merge requests in a public repository are also public, even when the merge
+request is created for a [confidential issue](../issues/confidential_issues.md).
+To avoid leaking confidential information when working on a confidential issue,
+create your merge request from a private fork.
+
+Roles are inherited from parent groups. If you create your private fork in the
+same group or subgroup as the original (public) repository, developers receive
+the same permissions in your fork. This inheritance ensures:
+
+- Developer users have the needed permissions to view confidential issues and resolve them.
+- You do not need grant individual users access to your fork.
+
+The [security practices for confidential merge requests](https://gitlab.com/gitlab-org/release/docs/blob/master/general/security/developer.md#security-releases-critical-non-critical-as-a-developer) at GitLab are available to read.
+
+## Create a confidential merge request
+
+WARNING:
+To create a confidential merge request, you must create a private fork. This fork
+may expose confidential information, if you create your fork in another namespace
+that may have other members.
+
+Branches are public by default. To protect the confidentiality of your work, you
+must create your changes in a private fork.
+
+Prerequisites:
+
+- You have the Owner or Maintainer role in the public repository, as you need one
+ of these roles to [create a subgroup](../../group/subgroups/index.md).
+- You have [forked](../repository/forking_workflow.md) the public repository.
+- Your fork has a **Visibility level** of _Private_.
+
+To create a confidential merge request:
+
+1. Go to the confidential issue's page. Scroll below the issue description and
+ select **Create confidential merge request**.
+1. Select the item that meets your needs:
+ - *To create both a branch and a merge request,* select
+ **Create confidential merge request and branch**. Your merge request will
+ target the default branch of your fork, *not* the default branch of the
+ public upstream project.
+ - *To create only a branch,* select **Create branch**.
+1. Select a **Project** to use. These projects have merge requests enabled, and
+ you have the Developer role (or greater) in them.
+1. Provide a **Branch name**, and select a **Source (branch or tag)**. GitLab
+ checks whether these branches are available in your private fork, because both
+ branches must be available in your selected fork.
+1. Select **Create**.
+
+If you created a branch in your private fork, users with the Developer role in the
+public repository can push code to that branch in your private fork to fix the
+confidential issue.
+
+As your merge request targets your private fork, not the public upstream project,
+your branch, merge request, and commits do not enter the public repository. This
+prevents prematurely revealing confidential information.
+
+To make a confidential commit public, open a merge request from the private fork
+to the public upstream project.
+
+## Related links
+
+- [Confidential issues](../issues/confidential_issues.md)
+- [Make an epic confidential](../../group/epics/manage_epics.md#make-an-epic-confidential)
+- [Mark a comment as confidential](../../discussions/index.md#mark-a-comment-as-confidential)
+- [Security practices for confidential merge requests](https://gitlab.com/gitlab-org/release/docs/blob/master/general/security/developer.md#security-releases-critical-non-critical-as-a-developer) at GitLab
diff --git a/doc/user/project/merge_requests/creating_merge_requests.md b/doc/user/project/merge_requests/creating_merge_requests.md
index 0d56fbc89b8..918f9830edc 100644
--- a/doc/user/project/merge_requests/creating_merge_requests.md
+++ b/doc/user/project/merge_requests/creating_merge_requests.md
@@ -105,7 +105,7 @@ fork from its upstream project. Go to **Settings > Advanced Settings** and
For more information, [see the forking workflow documentation](../repository/forking_workflow.md).
-## By sending an email **(FREE SELF)**
+## By sending an email
> The format of the generated email address changed in GitLab 11.7.
The earlier format is still supported so existing aliases
diff --git a/doc/user/project/merge_requests/csv_export.md b/doc/user/project/merge_requests/csv_export.md
index 5556e54f875..6dbbab316a0 100644
--- a/doc/user/project/merge_requests/csv_export.md
+++ b/doc/user/project/merge_requests/csv_export.md
@@ -36,8 +36,8 @@ The following table shows what attributes will be present in the CSV.
| Merged User | Full name of the merged user |
| Merged Username | Username of the merge user, with the @ symbol omitted |
| Milestone ID | ID of the merge request milestone |
-| Created At (UTC) | Formatted as YYYY-MM-DD HH:MM:SS |
-| Updated At (UTC) | Formatted as YYYY-MM-DD HH:MM:SS |
+| Created At (UTC) | Formatted as `YYYY-MM-DD HH:MM:SS` |
+| Updated At (UTC) | Formatted as `YYYY-MM-DD HH:MM:SS` |
## Limitations
diff --git a/doc/user/project/merge_requests/fail_fast_testing.md b/doc/user/project/merge_requests/fail_fast_testing.md
index 15ab2d9c8e2..6d8a128c39f 100644
--- a/doc/user/project/merge_requests/fail_fast_testing.md
+++ b/doc/user/project/merge_requests/fail_fast_testing.md
@@ -19,7 +19,7 @@ that it believes to be relevant to the input files.
`tff` is designed for Ruby on Rails projects, so the `Verify/FailFast` template is
configured to run when changes to Ruby files are detected. By default, it runs in
-the [`.pre` stage](../../../ci/yaml/index.md#pre-and-post) of a GitLab CI/CD pipeline,
+the [`.pre` stage](../../../ci/yaml/index.md#stage-pre) of a GitLab CI/CD pipeline,
before all other stages.
## Example use case
diff --git a/doc/user/project/merge_requests/getting_started.md b/doc/user/project/merge_requests/getting_started.md
index ce39f39f0a1..46fc3ec141d 100644
--- a/doc/user/project/merge_requests/getting_started.md
+++ b/doc/user/project/merge_requests/getting_started.md
@@ -129,7 +129,7 @@ To request a review of a merge request, expand the **Reviewers** select box in
the right-hand sidebar. Search for the users you want to request a review from.
When selected, GitLab creates a [to-do list item](../../todos.md) for each reviewer.
-To learn more, read [Review and manage merge requests](reviews/index.md).
+To learn more, read [Review a merge request](reviews/index.md).
### Merge requests to close issues
@@ -140,7 +140,7 @@ when merged.
If the issue is [confidential](../issues/confidential_issues.md),
you may want to use a different workflow for
-[merge requests for confidential issues](../issues/confidential_issues.md#merge-requests-for-confidential-issues)
+[merge requests for confidential issues](confidential.md)
to prevent confidential information from being exposed.
### Deleting the source branch
diff --git a/doc/user/project/merge_requests/img/checkout_button.png b/doc/user/project/merge_requests/img/checkout_button.png
deleted file mode 100644
index 9850795c9b4..00000000000
--- a/doc/user/project/merge_requests/img/checkout_button.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/merge_requests/img/code_quality_mr_diff_report_v13_11.png b/doc/user/project/merge_requests/img/code_quality_mr_diff_report_v13_11.png
deleted file mode 100644
index 0fcdc252735..00000000000
--- a/doc/user/project/merge_requests/img/code_quality_mr_diff_report_v13_11.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/merge_requests/img/code_quality_mr_diff_report_v14.png b/doc/user/project/merge_requests/img/code_quality_mr_diff_report_v14.png
deleted file mode 100644
index da7d4115bd9..00000000000
--- a/doc/user/project/merge_requests/img/code_quality_mr_diff_report_v14.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/merge_requests/img/code_quality_mr_diff_report_v14_2.png b/doc/user/project/merge_requests/img/code_quality_mr_diff_report_v14_2.png
new file mode 100644
index 00000000000..c1e9aad24ac
--- /dev/null
+++ b/doc/user/project/merge_requests/img/code_quality_mr_diff_report_v14_2.png
Binary files differ
diff --git a/doc/user/project/merge_requests/img/merge_request_diff.png b/doc/user/project/merge_requests/img/merge_request_diff.png
deleted file mode 100644
index 9c5488cb207..00000000000
--- a/doc/user/project/merge_requests/img/merge_request_diff.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/merge_requests/img/merge_request_diff_v14_2.png b/doc/user/project/merge_requests/img/merge_request_diff_v14_2.png
new file mode 100644
index 00000000000..de534f17bf1
--- /dev/null
+++ b/doc/user/project/merge_requests/img/merge_request_diff_v14_2.png
Binary files differ
diff --git a/doc/user/project/merge_requests/index.md b/doc/user/project/merge_requests/index.md
index fa90cf524ec..6c2f07d7012 100644
--- a/doc/user/project/merge_requests/index.md
+++ b/doc/user/project/merge_requests/index.md
@@ -119,7 +119,7 @@ For a software developer working in a team:
1. Pushes a commit with their final review.
1. [Approves the merge request](approvals/index.md).
1. Sets it to [merge when pipeline succeeds](merge_when_pipeline_succeeds.md).
-1. Your changes get deployed to production with [manual actions](../../../ci/yaml/index.md#whenmanual) for GitLab CI/CD.
+1. Your changes get deployed to production with [manual jobs](../../../ci/jobs/job_control.md#create-a-job-that-must-be-run-manually) for GitLab CI/CD.
1. Your implementations were successfully shipped to your customer.
For a web developer writing a webpage for your company's website:
@@ -135,6 +135,6 @@ For a web developer writing a webpage for your company's website:
## Related topics
- [Create a merge request](creating_merge_requests.md)
-- [Review and manage merge requests](reviews/index.md)
+- [Review a merge request](reviews/index.md)
- [Authorization for merge requests](authorization_for_merge_requests.md)
- [Testing and reports](testing_and_reports_in_merge_requests.md)
diff --git a/doc/user/project/merge_requests/merge_request_approvals.md b/doc/user/project/merge_requests/merge_request_approvals.md
deleted file mode 100644
index 42de04085a9..00000000000
--- a/doc/user/project/merge_requests/merge_request_approvals.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: 'approvals/index.md'
-remove_date: '2021-07-27'
----
-
-This document was moved to [another location](approvals/index.md).
-
-<!-- This redirect file can be deleted after <2021-07-27>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/user/project/merge_requests/reviewing_and_managing_merge_requests.md b/doc/user/project/merge_requests/reviewing_and_managing_merge_requests.md
deleted file mode 100644
index b32dce0b230..00000000000
--- a/doc/user/project/merge_requests/reviewing_and_managing_merge_requests.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-redirect_to: 'reviews/index.md'
-remove_date: '2021-08-03'
----
-
-This document was moved to [another location](reviews/index.md).
-
-<!-- This redirect file can be deleted after <2021-08-03>. -->
-<!-- Before deletion, see: https://docs.gitlab.com/ee/development/documentation/#move-or-rename-a-page -->
diff --git a/doc/user/project/merge_requests/reviews/img/pending_review_comment.png b/doc/user/project/merge_requests/reviews/img/pending_review_comment.png
deleted file mode 100644
index 70a66b3f4f0..00000000000
--- a/doc/user/project/merge_requests/reviews/img/pending_review_comment.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/merge_requests/reviews/index.md b/doc/user/project/merge_requests/reviews/index.md
index 16267e13fd5..61cd0d25aaf 100644
--- a/doc/user/project/merge_requests/reviews/index.md
+++ b/doc/user/project/merge_requests/reviews/index.md
@@ -5,7 +5,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
type: index, reference
---
-# Review and manage merge requests **(FREE)**
+# Review a merge request **(FREE)**
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/216054) in GitLab 13.5.
> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/245190) in GitLab 13.9.
@@ -16,47 +16,6 @@ to propose changes. Your team leaves [comments](../../../discussions/index.md),
makes [code suggestions](suggestions.md) you can accept from the user interface.
When your work is reviewed, your team members can choose to accept or reject it.
-## Bulk edit merge requests at the project level
-
-Users with permission level of [Developer or higher](../../../permissions.md) can manage merge requests.
-
-When bulk editing merge requests in a project, you can edit the following attributes:
-
-- Status (open/closed)
-- Assignee
-- Milestone
-- Labels
-- Subscriptions
-
-To update multiple project merge requests at the same time:
-
-1. In a project, go to **Merge requests**.
-1. Click **Edit merge requests**. A sidebar on the right-hand side of your screen appears with
- editable fields.
-1. Select the checkboxes next to each merge request you want to edit.
-1. Select the appropriate fields and their values from the sidebar.
-1. Click **Update all**.
-
-## Bulk edit merge requests at the group level
-
-> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/12719) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.2.
-
-Users with permission level of [Developer or higher](../../../permissions.md) can manage merge requests.
-
-When bulk editing merge requests in a group, you can edit the following attributes:
-
-- Milestone
-- Labels
-
-To update multiple group merge requests at the same time:
-
-1. In a group, go to **Merge requests**.
-1. Click **Edit merge requests**. A sidebar on the right-hand side of your screen appears with
- editable fields.
-1. Select the checkboxes next to each merge request you want to edit.
-1. Select the appropriate fields and their values from the sidebar.
-1. Click **Update all**.
-
## Review a merge request
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/4213) in GitLab Premium 11.4.
@@ -204,12 +163,51 @@ Multiline comments display the comment's line numbers above the body of the comm
![Multiline comment selection displayed above comment](img/multiline-comment-saved.png)
+## Bulk edit merge requests at the project level
+
+Users with permission level of [Developer or higher](../../../permissions.md) can manage merge requests.
+
+When bulk editing merge requests in a project, you can edit the following attributes:
+
+- Status (open/closed)
+- Assignee
+- Milestone
+- Labels
+- Subscriptions
+
+To update multiple project merge requests at the same time:
+
+1. In a project, go to **Merge requests**.
+1. Click **Edit merge requests**. A sidebar on the right-hand side of your screen appears with
+ editable fields.
+1. Select the checkboxes next to each merge request you want to edit.
+1. Select the appropriate fields and their values from the sidebar.
+1. Click **Update all**.
+
+## Bulk edit merge requests at the group level
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/12719) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.2.
+
+Users with permission level of [Developer or higher](../../../permissions.md) can manage merge requests.
+
+When bulk editing merge requests in a group, you can edit the following attributes:
+
+- Milestone
+- Labels
+
+To update multiple group merge requests at the same time:
+
+1. In a group, go to **Merge requests**.
+1. Click **Edit merge requests**. A sidebar on the right-hand side of your screen appears with
+ editable fields.
+1. Select the checkboxes next to each merge request you want to edit.
+1. Select the appropriate fields and their values from the sidebar.
+1. Click **Update all**.
+
## Associated features
These features are associated with merge requests:
-- [Bulk editing merge requests](../../../project/bulk_editing.md):
- Update the attributes of multiple merge requests simultaneously.
- [Cherry-pick changes](../cherry_pick_changes.md):
Cherry-pick any commit in the UI by selecting the **Cherry-pick** button in a merged merge requests or a commit.
- [Fast-forward merge requests](../fast_forward_merge.md):
diff --git a/doc/user/project/merge_requests/squash_and_merge.md b/doc/user/project/merge_requests/squash_and_merge.md
index 47c7e208f2d..2842c084bc5 100644
--- a/doc/user/project/merge_requests/squash_and_merge.md
+++ b/doc/user/project/merge_requests/squash_and_merge.md
@@ -61,7 +61,7 @@ meaningful commit messages and:
## Enabling squash for a merge request
Anyone who can create or edit a merge request can choose for it to be squashed
-on the merge request form. Users can select or clear the check box when they
+on the merge request form. Users can select or clear the checkbox when they
create the merge request:
![Squash commits checkbox on edit form](img/squash_edit_form.png)
diff --git a/doc/user/project/merge_requests/status_checks.md b/doc/user/project/merge_requests/status_checks.md
index 70e2d718406..1576b639a76 100644
--- a/doc/user/project/merge_requests/status_checks.md
+++ b/doc/user/project/merge_requests/status_checks.md
@@ -11,9 +11,6 @@ disqus_identifier: 'https://docs.gitlab.com/ee/user/project/merge_requests/statu
> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/3869) in GitLab 14.0, disabled behind the `:ff_external_status_checks` feature flag.
> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/320783) in GitLab 14.1.
-WARNING:
-This feature might not be available to you. Check the **version history** note above for details.
-
You can create a status check that sends merge request data to third-party tools.
When users create, change, or close merge requests, GitLab sends a notification. The users or automated workflows
can then update the status of merge requests from outside of GitLab.
diff --git a/doc/user/project/pages/custom_domains_ssl_tls_certification/index.md b/doc/user/project/pages/custom_domains_ssl_tls_certification/index.md
index 8c77714a2de..51f1ec96c22 100644
--- a/doc/user/project/pages/custom_domains_ssl_tls_certification/index.md
+++ b/doc/user/project/pages/custom_domains_ssl_tls_certification/index.md
@@ -139,7 +139,7 @@ If you're using Cloudflare, check
> - **Do not** use a CNAME record if you want to point your
`domain.com` to your GitLab Pages site. Use an `A` record instead.
> - **Do not** add any special chars after the default Pages
- domain. E.g., don't point `subdomain.domain.com` to
+ domain. For example, don't point `subdomain.domain.com` to
or `namespace.gitlab.io/`. Some domain hosting providers may request a trailing dot (`namespace.gitlab.io.`), though.
> - GitLab Pages IP on GitLab.com [was changed](https://about.gitlab.com/releases/2017/03/06/we-are-changing-the-ip-of-gitlab-pages-on-gitlab-com/) in 2017.
> - GitLab Pages IP on GitLab.com [has changed](https://about.gitlab.com/blog/2018/07/19/gcp-move-update/#gitlab-pages-and-custom-domains)
@@ -315,6 +315,6 @@ important to describe those, too. Think of things that may go wrong and include
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`.
+Each scenario can be a third-level heading, for example, `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->
diff --git a/doc/user/project/pages/custom_domains_ssl_tls_certification/lets_encrypt_integration.md b/doc/user/project/pages/custom_domains_ssl_tls_certification/lets_encrypt_integration.md
index f0a922ff390..ee1004a3416 100644
--- a/doc/user/project/pages/custom_domains_ssl_tls_certification/lets_encrypt_integration.md
+++ b/doc/user/project/pages/custom_domains_ssl_tls_certification/lets_encrypt_integration.md
@@ -99,6 +99,6 @@ important to describe those, too. Think of things that may go wrong and include
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`.
+Each scenario can be a third-level heading, for example, `### Getting error message X`.
If you have none to add when creating a doc, leave this section in place
but commented out to help encourage others to add to it in the future. -->
diff --git a/doc/user/project/pages/custom_domains_ssl_tls_certification/ssl_tls_concepts.md b/doc/user/project/pages/custom_domains_ssl_tls_certification/ssl_tls_concepts.md
index 48412f48c12..5b7f6454ef7 100644
--- a/doc/user/project/pages/custom_domains_ssl_tls_certification/ssl_tls_concepts.md
+++ b/doc/user/project/pages/custom_domains_ssl_tls_certification/ssl_tls_concepts.md
@@ -32,8 +32,11 @@ nor credit card transactions, then why do we need secure connections?
Back in the 1990s, where HTTPS came out, [SSL](https://en.wikipedia.org/wiki/Transport_Layer_Security#SSL_1.0.2C_2.0_and_3.0) was considered a "special"
security measure, necessary just for big companies like banks and shopping sites
with financial transactions.
+
<!-- vale gitlab.Spelling = NO -->
+
Now we have a different picture. [According to Josh Aas](https://letsencrypt.org/2015/10/29/phishing-and-malware.html), Executive Director at [ISRG](https://en.wikipedia.org/wiki/Internet_Security_Research_Group):
+
<!-- vale gitlab.rulename = YES -->
> _We've since come to realize that HTTPS is important for almost all websites. It's important for any website that allows people to log in with a password, any website that [tracks its users](https://www.washingtonpost.com/news/the-switch/wp/2013/12/10/nsa-uses-google-cookies-to-pinpoint-targets-for-hacking/) in any way, any website that [doesn't want its content altered](https://arstechnica.com/tech-policy/2014/09/why-comcasts-javascript-ad-injections-threaten-security-net-neutrality/), and for any site that offers content people might not want others to know they are consuming. We've also learned that any site not secured by HTTPS [can be used to attack other sites](https://krebsonsecurity.com/2015/04/dont-be-fodder-for-chinas-great-cannon/)._
diff --git a/doc/user/project/protected_branches.md b/doc/user/project/protected_branches.md
index 4ff651891b2..a4e94c03e86 100644
--- a/doc/user/project/protected_branches.md
+++ b/doc/user/project/protected_branches.md
@@ -30,7 +30,7 @@ When a branch is protected, the default behavior enforces these restrictions on
### Set the default branch protection level
Administrators can set a default branch protection level in the
-[Admin Area](../admin_area/settings/visibility_and_access_controls.md#default-branch-protection).
+[Admin Area](../admin_area/settings/visibility_and_access_controls.md#protect-default-branches).
## Configure a protected branch
@@ -179,8 +179,7 @@ When enabled, members who are can push to this branch can also force push.
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/13251) in GitLab Premium 12.4.
> - [In](https://gitlab.com/gitlab-org/gitlab/-/issues/35097) in [GitLab Premium](https://about.gitlab.com/pricing/) 13.5 and later, users and groups who can push to protected branches do not have to use a merge request to merge their feature branches. This means they can skip merge request approval rules.
-You can require at least one approval by a [Code Owner](code_owners.md) to a file changed by the
-merge request.
+For a protected branch, you can require at least one approval by a [Code Owner](code_owners.md).
To protect a new branch and enable Code Owner's approval:
@@ -201,6 +200,16 @@ When enabled, all merge requests for these branches require approval
by a Code Owner per matched rule before they can be merged.
Additionally, direct pushes to the protected branch are denied if a rule is matched.
+Any user who is not specified in the `CODEOWNERS` file cannot push
+changes for the specified files or paths, unless they are specifically allowed to.
+You don't have to restrict developers from pushing directly to the
+protected branch. Instead, you can restrict pushing to certain files where a review by
+Code Owners is required.
+
+In [GitLab Premium 13.5 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/35097), users and groups
+who are allowed to push to protected branches do not need a merge request to merge their feature branches.
+Thus, they can skip merge request approval rules, Code Owners included.
+
## Run pipelines on protected branches
The permission to merge or push to protected branches defines
diff --git a/doc/user/project/quick_actions.md b/doc/user/project/quick_actions.md
index d8d464ce6d8..683496b4a9b 100644
--- a/doc/user/project/quick_actions.md
+++ b/doc/user/project/quick_actions.md
@@ -94,6 +94,7 @@ threads. Some quick actions might not be available to all subscription tiers.
| `/remove_time_spent` | **{check-circle}** Yes | **{check-circle}** Yes | **{dotted-circle}** No | Remove time spent. |
| `/remove_zoom` | **{check-circle}** Yes | **{dotted-circle}** No | **{dotted-circle}** No | Remove Zoom meeting from this issue ([introduced in GitLab 12.4](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/16609)). |
| `/reopen` | **{check-circle}** Yes | **{check-circle}** Yes | **{check-circle}** Yes | Reopen. |
+| `/severity <severity>` | **{check-circle}** Yes | **{check-circle}** No | **{check-circle}** No | Set the severity. Options for `<severity>` are `S1` ... `S4`, `critical`, `high`, `medium`, `low`, `unknown`. [Introduced in GitLab 14.2](https://gitlab.com/gitlab-org/gitlab/-/issues/334045). |
| `/shrug <comment>` | **{check-circle}** Yes | **{check-circle}** Yes | **{check-circle}** Yes | Append the comment with `¯\_(ツ)_/¯`. |
| `/spend <time> [<date>]` | **{check-circle}** Yes | **{check-circle}** Yes | **{dotted-circle}** No | Add or subtract spent time. Optionally, specify the date that time was spent on. For example, `/spend 1mo 2w 3d 4h 5m 2018-08-26` or `/spend -1h 30m`. Learn more about [time tracking](time_tracking.md). |
| `/submit_review` | **{dotted-circle}** No | **{check-circle}** Yes | **{dotted-circle}** No | Submit a pending review ([introduced in GitLab 12.7](https://gitlab.com/gitlab-org/gitlab/-/issues/8041)). |
diff --git a/doc/user/project/releases/index.md b/doc/user/project/releases/index.md
index 3a25b148fdf..76b300bdd57 100644
--- a/doc/user/project/releases/index.md
+++ b/doc/user/project/releases/index.md
@@ -102,7 +102,7 @@ release tag. When the `released_at` date and time has passed, the badge is autom
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/26016) in GitLab 12.6. Asset link editing was [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/9427) in GitLab 12.10.
-Only users with at least the Developer can edit releases.
+Only users with at least the Developer role can edit releases.
Read more about [Release permissions](#release-permissions).
To edit the details of a release:
@@ -181,7 +181,7 @@ To subscribe to notifications for releases:
1. On the left sidebar, select **Project information**.
1. Click **Notification setting** (the bell icon).
1. In the list, click **Custom**.
-1. Select the **New release** check box.
+1. Select the **New release** checkbox.
1. Close the dialog box to save.
## Prevent unintentional releases by setting a deploy freeze
@@ -589,25 +589,6 @@ As an example of release permission control, you can allow only
to create, update, and delete releases by protecting the tag with a wildcard (`*`),
and set **Maintainer** in the **Allowed to create** column.
-#### Enable or disable protected tag evaluation on releases **(FREE SELF)**
-
-Protected tag evaluation on release permissions is under development but ready for production use.
-It is deployed behind a feature flag that is **enabled by default**.
-[GitLab administrators with access to the GitLab Rails console](../../../administration/feature_flags.md)
-can opt to disable it.
-
-To enable it:
-
-```ruby
-Feature.enable(:evalute_protected_tag_for_release_permissions)
-```
-
-To disable it:
-
-```ruby
-Feature.disable(:evalute_protected_tag_for_release_permissions)
-```
-
## Release Command Line
> [Introduced](https://gitlab.com/gitlab-org/release-cli/-/merge_requests/6) in GitLab 12.10.
@@ -631,6 +612,18 @@ These metrics include:
- Total number of releases in the group
- Percentage of projects in the group that have at least one release
+## Working example project
+
+The Guided Exploration project [Utterly Automated Software and Artifact Versioning with GitVersion](https://gitlab.com/guided-explorations/devops-patterns/utterly-automated-versioning) demonstrates:
+
+- Using GitLab releases.
+- Using the GitLab `release-cli`.
+- Creating a generic package.
+- Linking the package to the release.
+- Using a tool called [GitVersion](https://gitversion.net/) to automatically determine and increment versions for complex repositories.
+
+You can copy the example project to your own group or instance for testing. More details on what other GitLab CI patterns are demonstrated are available at the project page.
+
## Troubleshooting
### Getting `403 Forbidden` or `Something went wrong while creating a new release` errors when creating, updating or deleting releases and their assets
diff --git a/doc/user/project/repository/branches/default.md b/doc/user/project/repository/branches/default.md
index 2f1171a7d4f..12fd7389f21 100644
--- a/doc/user/project/repository/branches/default.md
+++ b/doc/user/project/repository/branches/default.md
@@ -37,10 +37,10 @@ the [Git commands you need](#update-the-default-branch-name-in-your-repository)
To update the default branch name for an individual [project](../../index.md):
-1. Sign in to GitLab as a user with [Administrator](../../../permissions.md) permissions.
+1. Sign in to GitLab as a user with the [Administrator](../../../permissions.md) role.
1. In the left navigation menu, go to **Settings > Repository**.
1. Expand **Default branch**, and select a new default branch.
-1. (Optional) Select the **Auto-close referenced issues on default branch** check box to close
+1. (Optional) Select the **Auto-close referenced issues on default branch** checkbox to close
issues when a merge request
[uses a closing pattern](../../issues/managing_issues.md#closing-issues-automatically).
1. Select **Save changes**.
@@ -168,6 +168,7 @@ current default branch, instead of displaying the "not found" page.
## Resources
+- [Configure a default branch for your wiki](../../wiki/index.md)
- [Discussion of default branch renaming](https://lore.kernel.org/git/pull.656.v4.git.1593009996.gitgitgadget@gmail.com/)
on the Git mailing list
- [March 2021 blog post: The new Git default branch name](https://about.gitlab.com/blog/2021/03/10/new-git-default-branch-name/)
diff --git a/doc/user/project/repository/img/csv_file_rendered_as_table_v14_1.png b/doc/user/project/repository/img/csv_file_rendered_as_table_v14_1.png
index 0f9b623e7b4..f1dd8dc920b 100644
--- a/doc/user/project/repository/img/csv_file_rendered_as_table_v14_1.png
+++ b/doc/user/project/repository/img/csv_file_rendered_as_table_v14_1.png
Binary files differ
diff --git a/doc/user/project/repository/img/web_editor_new_branch_dropdown.png b/doc/user/project/repository/img/web_editor_new_branch_dropdown.png
deleted file mode 100644
index a6edea1fcce..00000000000
--- a/doc/user/project/repository/img/web_editor_new_branch_dropdown.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/repository/img/web_editor_new_branch_dropdown_v14_1.png b/doc/user/project/repository/img/web_editor_new_branch_dropdown_v14_1.png
new file mode 100644
index 00000000000..20d76797977
--- /dev/null
+++ b/doc/user/project/repository/img/web_editor_new_branch_dropdown_v14_1.png
Binary files differ
diff --git a/doc/user/project/repository/img/web_editor_new_branch_from_issue_create_button_v12_6.png b/doc/user/project/repository/img/web_editor_new_branch_from_issue_create_button_v12_6.png
deleted file mode 100644
index 1ef210240d4..00000000000
--- a/doc/user/project/repository/img/web_editor_new_branch_from_issue_create_button_v12_6.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/repository/img/web_editor_new_branch_from_issue_create_button_v14_1.png b/doc/user/project/repository/img/web_editor_new_branch_from_issue_create_button_v14_1.png
new file mode 100644
index 00000000000..fae0fc1425b
--- /dev/null
+++ b/doc/user/project/repository/img/web_editor_new_branch_from_issue_create_button_v14_1.png
Binary files differ
diff --git a/doc/user/project/repository/img/web_editor_new_branch_from_issue_v14_1.png b/doc/user/project/repository/img/web_editor_new_branch_from_issue_v14_1.png
new file mode 100644
index 00000000000..150ec3ebf90
--- /dev/null
+++ b/doc/user/project/repository/img/web_editor_new_branch_from_issue_v14_1.png
Binary files differ
diff --git a/doc/user/project/repository/img/web_editor_new_branch_from_issue_v_12_6.png b/doc/user/project/repository/img/web_editor_new_branch_from_issue_v_12_6.png
deleted file mode 100644
index 02cadd5de4c..00000000000
--- a/doc/user/project/repository/img/web_editor_new_branch_from_issue_v_12_6.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/repository/img/web_editor_new_branch_page.png b/doc/user/project/repository/img/web_editor_new_branch_page.png
deleted file mode 100644
index 7bb8b9e29e3..00000000000
--- a/doc/user/project/repository/img/web_editor_new_branch_page.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/repository/img/web_editor_new_branch_page_v14_1.png b/doc/user/project/repository/img/web_editor_new_branch_page_v14_1.png
new file mode 100644
index 00000000000..cba15631fa8
--- /dev/null
+++ b/doc/user/project/repository/img/web_editor_new_branch_page_v14_1.png
Binary files differ
diff --git a/doc/user/project/repository/img/web_editor_new_directory_dialog.png b/doc/user/project/repository/img/web_editor_new_directory_dialog.png
deleted file mode 100644
index 590989c360e..00000000000
--- a/doc/user/project/repository/img/web_editor_new_directory_dialog.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/repository/img/web_editor_new_directory_dialog_v14_1.png b/doc/user/project/repository/img/web_editor_new_directory_dialog_v14_1.png
new file mode 100644
index 00000000000..1f7a6263d9a
--- /dev/null
+++ b/doc/user/project/repository/img/web_editor_new_directory_dialog_v14_1.png
Binary files differ
diff --git a/doc/user/project/repository/img/web_editor_new_directory_dropdown.png b/doc/user/project/repository/img/web_editor_new_directory_dropdown.png
deleted file mode 100644
index efa3087fc0c..00000000000
--- a/doc/user/project/repository/img/web_editor_new_directory_dropdown.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/repository/img/web_editor_new_directory_dropdown_v14_1.png b/doc/user/project/repository/img/web_editor_new_directory_dropdown_v14_1.png
new file mode 100644
index 00000000000..326605baaab
--- /dev/null
+++ b/doc/user/project/repository/img/web_editor_new_directory_dropdown_v14_1.png
Binary files differ
diff --git a/doc/user/project/repository/img/web_editor_new_file_dropdown.png b/doc/user/project/repository/img/web_editor_new_file_dropdown.png
deleted file mode 100644
index b40fb1ce58d..00000000000
--- a/doc/user/project/repository/img/web_editor_new_file_dropdown.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/repository/img/web_editor_new_file_dropdown_v14_1.png b/doc/user/project/repository/img/web_editor_new_file_dropdown_v14_1.png
new file mode 100644
index 00000000000..4a4c1f8cd11
--- /dev/null
+++ b/doc/user/project/repository/img/web_editor_new_file_dropdown_v14_1.png
Binary files differ
diff --git a/doc/user/project/repository/img/web_editor_new_file_editor.png b/doc/user/project/repository/img/web_editor_new_file_editor.png
deleted file mode 100644
index d0bcc69bf63..00000000000
--- a/doc/user/project/repository/img/web_editor_new_file_editor.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/repository/img/web_editor_new_file_editor_v14_1.png b/doc/user/project/repository/img/web_editor_new_file_editor_v14_1.png
new file mode 100644
index 00000000000..3c568e304b2
--- /dev/null
+++ b/doc/user/project/repository/img/web_editor_new_file_editor_v14_1.png
Binary files differ
diff --git a/doc/user/project/repository/img/web_editor_template_dropdown_first_file.png b/doc/user/project/repository/img/web_editor_template_dropdown_first_file.png
deleted file mode 100644
index a4440ec3cc9..00000000000
--- a/doc/user/project/repository/img/web_editor_template_dropdown_first_file.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/repository/img/web_editor_template_dropdown_first_file_v14_1.png b/doc/user/project/repository/img/web_editor_template_dropdown_first_file_v14_1.png
new file mode 100644
index 00000000000..ecc4d8e8716
--- /dev/null
+++ b/doc/user/project/repository/img/web_editor_template_dropdown_first_file_v14_1.png
Binary files differ
diff --git a/doc/user/project/repository/img/web_editor_template_dropdown_mit_license.png b/doc/user/project/repository/img/web_editor_template_dropdown_mit_license.png
deleted file mode 100644
index afd44d78959..00000000000
--- a/doc/user/project/repository/img/web_editor_template_dropdown_mit_license.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/repository/img/web_editor_template_dropdown_mit_license_v14_1.png b/doc/user/project/repository/img/web_editor_template_dropdown_mit_license_v14_1.png
new file mode 100644
index 00000000000..d0bdefaa437
--- /dev/null
+++ b/doc/user/project/repository/img/web_editor_template_dropdown_mit_license_v14_1.png
Binary files differ
diff --git a/doc/user/project/repository/img/web_editor_upload_file_dialog.png b/doc/user/project/repository/img/web_editor_upload_file_dialog.png
deleted file mode 100644
index c0e9a99aa61..00000000000
--- a/doc/user/project/repository/img/web_editor_upload_file_dialog.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/repository/img/web_editor_upload_file_dialog_v14_1.png b/doc/user/project/repository/img/web_editor_upload_file_dialog_v14_1.png
new file mode 100644
index 00000000000..632f591e25a
--- /dev/null
+++ b/doc/user/project/repository/img/web_editor_upload_file_dialog_v14_1.png
Binary files differ
diff --git a/doc/user/project/repository/img/web_editor_upload_file_dropdown.png b/doc/user/project/repository/img/web_editor_upload_file_dropdown.png
deleted file mode 100644
index c80a9ae4b3d..00000000000
--- a/doc/user/project/repository/img/web_editor_upload_file_dropdown.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/repository/img/web_editor_upload_file_dropdown_v14_1.png b/doc/user/project/repository/img/web_editor_upload_file_dropdown_v14_1.png
new file mode 100644
index 00000000000..1b2fa59726a
--- /dev/null
+++ b/doc/user/project/repository/img/web_editor_upload_file_dropdown_v14_1.png
Binary files differ
diff --git a/doc/user/project/repository/reducing_the_repo_size_using_git.md b/doc/user/project/repository/reducing_the_repo_size_using_git.md
index 323a2efce76..81429ea5384 100644
--- a/doc/user/project/repository/reducing_the_repo_size_using_git.md
+++ b/doc/user/project/repository/reducing_the_repo_size_using_git.md
@@ -13,6 +13,8 @@ Git repositories become larger over time. When large files are added to a Git re
- They take up a large amount of storage space on the server.
- Git repository storage limits [can be reached](#storage-limits).
+Such problems can be detected with [git-sizer](https://github.com/github/git-sizer#getting-started).
+
Rewriting a repository can remove unwanted history to make the repository smaller.
We **recommend [`git filter-repo`](https://github.com/newren/git-filter-repo/blob/main/README.md)**
over [`git filter-branch`](https://git-scm.com/docs/git-filter-branch) and
@@ -21,7 +23,7 @@ over [`git filter-branch`](https://git-scm.com/docs/git-filter-branch) and
WARNING:
Rewriting repository history is a destructive operation. Make sure to back up your repository before
you begin. The best way back up a repository is to
-[export the project](../settings/import_export.md#exporting-a-project-and-its-data).
+[export the project](../settings/import_export.md#export-a-project-and-its-data).
## Purge files from repository history
@@ -42,7 +44,7 @@ To purge files from a GitLab repository:
using a supported package manager or from source.
1. Generate a fresh [export from the
- project](../settings/import_export.html#exporting-a-project-and-its-data) and download it.
+ project](../settings/import_export.html#export-a-project-and-its-data) and download it.
This project export contains a backup copy of your repository *and* refs
we can use to purge files from your repository.
diff --git a/doc/user/project/repository/repository_mirroring.md b/doc/user/project/repository/repository_mirroring.md
index 71bece03a33..76eae58b431 100644
--- a/doc/user/project/repository/repository_mirroring.md
+++ b/doc/user/project/repository/repository_mirroring.md
@@ -62,8 +62,8 @@ For an existing project, you can set up push mirroring as follows:
1. In the **Mirror direction** dropdown, select **Push**.
1. Select an authentication method from the **Authentication method** dropdown.
You can authenticate with either a password or an [SSH key](#ssh-authentication).
-1. Select the **Only mirror protected branches** check box, if necessary.
-1. Select the **Keep divergent refs** check box, if desired.
+1. Select the **Only mirror protected branches** checkbox, if necessary.
+1. Select the **Keep divergent refs** checkbox, if desired.
1. Select **Mirror repository** to save the configuration.
When push mirroring is enabled, only push commits directly to the mirrored repository to prevent the
@@ -92,19 +92,18 @@ You can also create and modify project push mirrors through the
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/208828) in GitLab 13.0.
-By default, if any ref on the remote mirror has diverged from the local
-repository, the *entire push* fails, and no updates occur.
+By default, if any ref (branch or tag) on the remote mirror has diverged from the local repository, the local differences are forced to the remote.
-For example, if a repository has `main`, `develop`, and `stable` branches that
+For example, if a repository has `main` and `develop` branches that
have been mirrored to a remote, and then a new commit is added to `develop` on
-the mirror, the next push attempt fails, leaving `main` and `stable`
-out-of-date despite not having diverged. No change on any branch can be mirrored
-until the divergence is resolved.
+the remote mirror. The next push updates all of the references on the remote mirror to match
+the local repository, and the new commit added to the remote `develop` branch is lost.
With the **Keep divergent refs** option enabled, the `develop` branch is
-skipped, allowing `main` and `stable` to be updated. The mirror status
-reflects that `develop` has diverged and was skipped, and be marked as a failed
-update.
+skipped, causing only `main` to be updated. The mirror status
+reflects that `develop` has diverged and was skipped, and be marked as a
+failed update. Refs that exist in the mirror repository but not in the local
+repository are left untouched.
NOTE:
After the mirror is created, this option can only be modified via the [API](../../../api/remote_mirrors.md).
diff --git a/doc/user/project/repository/web_editor.md b/doc/user/project/repository/web_editor.md
index cca8d770115..8074f311e5f 100644
--- a/doc/user/project/repository/web_editor.md
+++ b/doc/user/project/repository/web_editor.md
@@ -17,7 +17,7 @@ dropdown menu.
From a project's files page, click the '+' button to the right of the branch selector.
Choose **New file** from the dropdown.
-![New file dropdown menu](img/web_editor_new_file_dropdown.png)
+![New file dropdown menu](img/web_editor_new_file_dropdown_v14_1.png)
Enter a filename in the **Filename** box. Then, add file content in the editor
area. Add a descriptive commit message and choose a branch. The branch field
@@ -27,7 +27,7 @@ request after you commit the changes.
When you are satisfied with your new file, click **Commit Changes** at the bottom.
-![Create file editor](img/web_editor_new_file_editor.png)
+![Create file editor](img/web_editor_new_file_editor_v14_1.png)
### Shortcuts
@@ -39,12 +39,12 @@ as the Web IDE. For details, read the documentation for [Command Palette](../web
When starting a new project, there are some common files that the new project
might need. GitLab displays a message to help you:
-![First file for your project](img/web_editor_template_dropdown_first_file.png)
+![First file for your project](img/web_editor_template_dropdown_first_file_v14_1.png)
When clicking on either `LICENSE` or `.gitignore` and so on, a dropdown displays
to provide you a template that may be suitable for your project:
-![MIT license selected](img/web_editor_template_dropdown_mit_license.png)
+![MIT license selected](img/web_editor_template_dropdown_mit_license_v14_1.png)
The license, changelog, contribution guide, or `.gitlab-ci.yml` file can also
be added through a button on the project page. In this example, the license
@@ -86,7 +86,7 @@ this case, you need to upload a file.
From a project's files page, click the '+' button to the right of the branch
selector. Choose **Upload file** from the dropdown:
-![Upload file dropdown menu](img/web_editor_upload_file_dropdown.png)
+![Upload file dropdown menu](img/web_editor_upload_file_dropdown_v14_1.png)
After the upload dialog pops up, there are two ways to upload your file. Either
drag and drop a file on the popup or use the **click to upload** link. After you
@@ -95,7 +95,7 @@ select a file to upload, a file preview displays.
Enter a commit message, choose a branch, and click **Upload file** when you are
ready.
-![Upload file dialog](img/web_editor_upload_file_dialog.png)
+![Upload file dialog](img/web_editor_upload_file_dialog_v14_1.png)
## Create a directory
@@ -105,12 +105,12 @@ directory.
From a project's files page, click the plus button (`+`) to the right of the branch selector.
Choose **New directory** from the dropdown.
-![New directory dropdown](img/web_editor_new_directory_dropdown.png)
+![New directory dropdown](img/web_editor_new_directory_dropdown_v14_1.png)
In the new directory dialog, enter a directory name, a commit message, and choose
the target branch. Click **Create directory** to finish.
-![New directory dialog](img/web_editor_new_directory_dialog.png)
+![New directory dialog](img/web_editor_new_directory_dialog_v14_1.png)
## Create a new branch
@@ -137,11 +137,11 @@ To make this button appear, one possible workaround is to
After removal, the fork relationship cannot be restored. This project can no longer
be able to receive or send merge requests to the source project, or other forks.
-![Create Button](img/web_editor_new_branch_from_issue_create_button_v12_6.png)
+![Create Button](img/web_editor_new_branch_from_issue_create_button_v14_1.png)
This dropdown contains the options **Create merge request and branch** and **Create branch**.
-![New Branch Button](img/web_editor_new_branch_from_issue_v_12_6.png)
+![New Branch Button](img/web_editor_new_branch_from_issue_v14_1.png)
After selecting one of these options, a new branch or branch and merge request
is created based on your project's [default branch](branches/default.md).
@@ -172,7 +172,7 @@ request, you can create a new branch upfront.
1. From a project's files page, choose **New branch** from the dropdown.
- ![New branch dropdown](img/web_editor_new_branch_dropdown.png)
+ ![New branch dropdown](img/web_editor_new_branch_dropdown_v14_1.png)
1. Enter a new **Branch name**.
1. (Optional) Change the **Create from** field to choose which branch, tag, or
@@ -180,7 +180,7 @@ request, you can create a new branch upfront.
start typing an existing branch or tag.
1. Click **Create branch** to return to the file browser on this new branch.
- ![New branch page](img/web_editor_new_branch_page.png)
+ ![New branch page](img/web_editor_new_branch_page_v14_1.png)
You can now make changes to any files, as needed. When you're ready to merge
the changes back to your [default branch](branches/default.md), you can use the widget at the top of the screen.
@@ -214,7 +214,7 @@ When creating or uploading a new file or creating a new directory, you can
trigger a new merge request rather than committing directly to your default branch:
1. Enter a new branch name in the **Target branch** field.
-1. GitLab displays the **Start a new merge request with these changes** check box.
+1. GitLab displays the **Start a new merge request with these changes** checkbox.
1. Commit your changes, and GitLab redirects you to a new merge request form.
![Start a new merge request with these changes](img/web_editor_start_new_merge_request.png)
diff --git a/doc/user/project/repository/x509_signed_commits/index.md b/doc/user/project/repository/x509_signed_commits/index.md
index c89f3a267ba..7c115734345 100644
--- a/doc/user/project/repository/x509_signed_commits/index.md
+++ b/doc/user/project/repository/x509_signed_commits/index.md
@@ -7,6 +7,8 @@ type: concepts, howto
# Signing commits and tags with X.509 **(FREE)**
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/17773) in GitLab 12.8.
+
[X.509](https://en.wikipedia.org/wiki/X.509) is a standard format for public key
certificates issued by a public or private Public Key Infrastructure (PKI).
Personal X.509 certificates are used for authentication or signing purposes
@@ -37,6 +39,20 @@ Self signed certificates without `authorityKeyIdentifier`,
recommend using certificates from a PKI that are in line with
[RFC 5280](https://tools.ietf.org/html/rfc5280).
+## Limitations
+
+- If you have more than one email in the Subject Alternative Name list in
+ your signing certificate,
+ [only the first one is used to verify commits](https://gitlab.com/gitlab-org/gitlab/-/issues/336677).
+- The `X509v3 Subject Key Identifier` (SKI) in the issuer certificate and the
+ signing certificate
+ [must be 40 characters long](https://gitlab.com/gitlab-org/gitlab/-/issues/332503).
+ If your SKI is shorter, commits will not show as verified in GitLab, and
+ short subject key identifiers may also
+ [cause errors when accessing the project](https://gitlab.com/gitlab-org/gitlab/-/issues/332464),
+ such as 'An error occurred while loading commit signatures' and
+ `HTTP 422 Unprocessable Entity` errors.
+
## Obtaining an X.509 key pair
If your organization has Public Key Infrastructure (PKI), that PKI provides
diff --git a/doc/user/project/requirements/index.md b/doc/user/project/requirements/index.md
index 4ac1113152c..3be3b1682bb 100644
--- a/doc/user/project/requirements/index.md
+++ b/doc/user/project/requirements/index.md
@@ -68,7 +68,7 @@ To edit a requirement:
1. From the requirements list, select the **Edit** icon (**{pencil}**).
1. Update the title and description in text input field. You can also mark a
- requirement as satisfied in the edit form by using the check box **Satisfied**.
+ requirement as satisfied in the edit form by using the checkbox **Satisfied**.
1. Select **Save changes**.
## Archive a requirement
@@ -295,8 +295,10 @@ To export requirements:
### Exported CSV file format
<!-- vale gitlab.Spelling = NO -->
+
You can preview the exported CSV file in a spreadsheet editor, such as Microsoft Excel,
OpenOffice Calc, or Google Sheets.
+
<!-- vale gitlab.Spelling = YES -->
The exported CSV file contains the following headers:
diff --git a/doc/user/project/settings/import_export.md b/doc/user/project/settings/import_export.md
index d5fdb86c9b0..a0718e875d7 100644
--- a/doc/user/project/settings/import_export.md
+++ b/doc/user/project/settings/import_export.md
@@ -32,8 +32,8 @@ To set up a project import/export:
Note the following:
-- Before you can import a project, you need to export the data first.
- See [Exporting a project and its data](#exporting-a-project-and-its-data)
+- Before you can import a project, you must export the data first.
+ See [Export a project and its data](#export-a-project-and-its-data)
for how you can export a project through the UI.
- Imports from a newer version of GitLab are not supported.
The Importing GitLab version must be greater than or equal to the Exporting GitLab version.
@@ -42,7 +42,7 @@ Note the following:
- Exports are generated in your configured `shared_path`, a temporary shared directory,
and are moved to your configured `uploads_directory`. Every 24 hours, a specific worker deletes these export files.
- Group members are exported as project members, as long as the user has
- maintainer or administrator access to the group where the exported project lives.
+ a maintainer or administrator role in the group where the exported project lives.
- Project members with the [Owner role](../../permissions.md) are imported as Maintainers.
- Imported users can be mapped by their primary email on self-managed instances, if an administrative user (not an owner) does the import.
Otherwise, a supplementary comment is left to mention that the original author and
@@ -51,10 +51,10 @@ Note the following:
possible through a [professional services engagement](https://about.gitlab.com/services/migration/).
- If an imported project contains merge requests originating from forks,
then new branches associated with such merge requests are created
- within a project during the import/export. Thus, the number of branches
+ in a project during the import/export. Thus, the number of branches
in the exported project could be bigger than in the original project.
- Deploy keys allowed to push to protected branches are not exported. Therefore,
- you need to recreate this association by first enabling these deploy keys in your
+ you must recreate this association by first enabling these deploy keys in your
imported project and then updating your protected branches accordingly.
## Version history
@@ -141,7 +141,7 @@ NOTE:
For more details on the specific data persisted in a project export, see the
[`import_export.yml`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/import_export/project/import_export.yml) file.
-## Exporting a project and its data
+## Export a project and its data
Full project export functionality is limited to project maintainers and owners.
You can configure such functionality through [project settings](index.md):
@@ -156,18 +156,22 @@ To export a project and its data, follow these steps:
![Export button](img/import_export_export_button.png)
-1. Once the export is generated, you should receive an email with a link to
+1. After the export is generated, you should receive an email with a link to
download the file:
![Email download link](img/import_export_mail_link.png)
1. Alternatively, you can come back to the project settings and download the
- file from there, or generate a new export. Once the file is available, the page
+ file from there, or generate a new export. After the file is available, the page
should show the **Download export** button:
![Download export](img/import_export_download_export.png)
-## Importing the project
+## Import the project
+
+WARNING:
+Only import projects from sources you trust. If you import a project from an untrusted source, it
+may be possible for an attacker to steal your sensitive data.
1. The GitLab project import feature is the first import option when creating a
new project. Click on **GitLab export**:
@@ -209,4 +213,60 @@ To help avoid abuse, by default, users are rate limited to:
| Download export | 1 download per group per minute |
| Import | 6 projects per minute |
-Please note that GitLab.com may have [different settings](../../gitlab_com/index.md#importexport) from the defaults.
+GitLab.com may have [different settings](../../gitlab_com/index.md#importexport) from the defaults.
+
+## Troubleshooting
+
+### Import workaround for large repositories
+
+[Maximum import size limitations](#import-the-project)
+can prevent an import from being successful.
+If changing the import limits is not possible,
+the following local workflow can be used to temporarily
+reduce the repository size for another import attempt.
+
+1. Create a temporary working directory from the export:
+
+ ```shell
+ EXPORT=<filename-without-extension>
+
+ mkdir "$EXPORT"
+ tar -xf "$EXPORT".tar.gz --directory="$EXPORT"/
+ cd "$EXPORT"/
+ git clone project.bundle
+
+ # Prevent interference with recreating an importable file later
+ mv project.bundle ../"$EXPORT"-original.bundle
+ mv ../"$EXPORT".tar.gz ../"$EXPORT"-original.tar.gz
+ ```
+
+1. To reduce the repository size,
+ [identify and remove large files](../repository/reducing_the_repo_size_using_git.md)
+ or [interactively rebase and fixup](../../../topics/git/git_rebase.md#interactive-rebase)
+ to reduce the number of commits.
+
+ ```shell
+ # Reduce the .git/objects/pack/ file size
+ cd project
+ git reflog expire --expire=now --all
+ git gc --prune=now --aggressive
+
+ # Prepare recreating an importable file
+ git bundle create ../project.bundle <default-branch-name>
+ cd ..
+ mv project/ ../"$EXPORT"-project
+ cd ..
+
+ # Recreate an importable file
+ tar -czf "$EXPORT"-smaller.tar.gz --directory="$EXPORT"/ .
+ ```
+
+1. Import this new, smaller file into GitLab.
+1. In a full clone of the original repository,
+ use `git remote set-url origin <new-url> && git push --force --all`
+ to complete the import.
+1. Update the imported repository's
+ [branch protection rules](../protected_branches.md) and
+ its [default branch](../repository/branches/default.md), and
+ delete the temporary, `smaller-…` branch, and
+ the local, temporary data.
diff --git a/doc/user/project/settings/index.md b/doc/user/project/settings/index.md
index d79d9f5b9dc..66fdace81ba 100644
--- a/doc/user/project/settings/index.md
+++ b/doc/user/project/settings/index.md
@@ -30,32 +30,39 @@ Adjust your project's name, description, avatar, [default branch](../repository/
![general project settings](img/general_settings_v13_11.png)
-The project description also partially supports [standard Markdown](../../markdown.md#features-extended-from-standard-markdown). You can use [emphasis](../../markdown.md#emphasis), [links](../../markdown.md#links), and [line-breaks](../../markdown.md#line-breaks) to add more context to the project description.
+The project description also partially supports [standard Markdown](../../markdown.md#features-extended-from-standard-markdown).
+You can use [emphasis](../../markdown.md#emphasis), [links](../../markdown.md#links), and
+[line-breaks](../../markdown.md#line-breaks) to add more context to the project description.
#### Compliance frameworks **(PREMIUM)**
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/276221) in GitLab 13.9.
> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/287779) in GitLab 13.12.
-You can create a framework label to identify that your project has certain compliance requirements or needs additional oversight.
+You can create a framework label to identify that your project has certain compliance requirements
+or needs additional oversight.
-Group owners can create, edit and delete compliance frameworks by going to **Settings** > **General** and expanding the **Compliance frameworks** section.
-Compliance frameworks created can then be assigned to any number of projects via the project settings page inside the group or subgroups.
+Group owners can create, edit, and delete compliance frameworks:
+
+1. Go to the group's **Settings** > **General**.
+1. Expand the **Compliance frameworks** section.
+
+Compliance frameworks created can then be assigned to any number of projects using:
+
+- The project settings page inside the group or subgroups.
+- In [GitLab 14.2](https://gitlab.com/gitlab-org/gitlab/-/issues/333249) and later, using the
+ [GraphQL API](../../../api/graphql/reference/index.md#mutationprojectsetcomplianceframework).
NOTE:
-Attempting to create compliance frameworks on subgroups via GraphQL will cause the framework to be created on the root ancestor if the user has the correct permissions.
-The web UI presents a read-only view to discourage this behavior.
+Creating compliance frameworks on subgroups with GraphQL causes the framework to be
+created on the root ancestor if the user has the correct permissions. The GitLab UI presents a
+read-only view to discourage this behavior.
#### Compliance pipeline configuration **(ULTIMATE)**
-> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/3156) in GitLab 13.9.
-> - [Deployed behind a feature flag](../../feature_flags.md).
+> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/3156) in GitLab 13.9, disabled behind `ff_evaluate_group_level_compliance_pipeline` [feature flag](../../../administration/feature_flags.md).
> - [Enabled by default](https://gitlab.com/gitlab-org/gitlab/-/issues/300324) in GitLab 13.11.
-> - Enabled on GitLab.com.
-> - Recommended for production use.
-
-WARNING:
-This feature might not be available to you. Check the **version history** note above for details.
+> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/331231) in GitLab 14.2.
Group owners can use the compliance pipeline configuration to define compliance requirements
such as scans or tests, and enforce them in individual projects.
@@ -135,6 +142,7 @@ audit trail:
include: # Execute individual project's configuration
project: '$CI_PROJECT_PATH'
file: '$CI_CONFIG_PATH'
+ ref: '$CI_COMMIT_REF_NAME' # Must be defined or MR pipelines always use the use default branch.
```
##### Ensure compliance jobs are always run
@@ -227,7 +235,7 @@ Some features depend on others:
- Metrics dashboard access requires reading both project environments and deployments.
Users with access to the metrics dashboard can also access environments and deployments.
-#### Disabling the CVE ID request button
+#### Disabling the CVE ID request button **(FREE SAAS)**
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/41203) in GitLab 13.4, only for public projects on GitLab.com.
@@ -263,7 +271,7 @@ Enable [Service Desk](../service_desk.md) for your project to offer customer sup
### Export project
-Learn how to [export a project](import_export.md#importing-the-project) in GitLab.
+Learn how to [export a project](import_export.md#import-the-project) in GitLab.
### Advanced settings
@@ -296,7 +304,7 @@ available in project listings. Only project owners and administrators have the
To find an archived project:
-1. Sign in to GitLab as a user with project owner or administrator permissions.
+1. Sign in to GitLab as the project owner or a user with the Administrator role.
1. If you:
- Have the project's URL, open the project's page in your browser.
- Don't have the project's URL:
@@ -362,6 +370,14 @@ NOTE:
GitLab administrators can use the administration interface to move any project to any
namespace if needed.
+##### Transferring a GitLab.com project to a different subscription tier
+
+When you transfer a project from a namespace that's licensed for GitLab SaaS Premium or Ultimate to Free, some data related to the paid features is deleted.
+
+For example, [project access tokens](../../../user/project/settings/project_access_tokens.md) are revoked, and
+[pipeline subscriptions](../../../ci/pipelines/multi_project_pipelines.md#trigger-a-pipeline-when-an-upstream-project-is-rebuilt)
+and [test cases](../../../ci/test_cases/index.md) are deleted.
+
#### Delete a project
You can mark a project to be deleted.
@@ -409,8 +425,10 @@ To immediately delete a project marked for deletion:
1. In the "Permanently delete project" section, select **Delete project**.
1. Confirm the action when asked to.
-Your project, its repository, and all related resources, including issues and merge requests,
-are deleted.
+The following are deleted:
+
+- Your project and its repository.
+- All related resources including issues and merge requests.
#### Restore a project **(PREMIUM)**
diff --git a/doc/user/project/settings/project_access_tokens.md b/doc/user/project/settings/project_access_tokens.md
index 5e045ee2455..643042cb96a 100644
--- a/doc/user/project/settings/project_access_tokens.md
+++ b/doc/user/project/settings/project_access_tokens.md
@@ -94,3 +94,62 @@ the following table.
You may enable or disable project access token creation for all projects in a group in **Group > Settings > General > Permissions, LFS, 2FA > Allow project access token creation**.
Even when creation is disabled, you can still use and revoke existing project access tokens.
This setting is available only on top-level groups.
+
+## Group access token workaround **(FREE SELF)**
+
+NOTE:
+This section describes a workaround and is subject to change.
+
+Group access tokens let you use a single token to:
+
+- Perform actions at the group level.
+- Manage the projects within the group.
+- In [GitLab 14.2](https://gitlab.com/gitlab-org/gitlab/-/issues/330718) and later, authenticate
+ with Git over HTTPS.
+
+We don't support group access tokens in the GitLab UI, though GitLab self-managed
+administrators can create them using the [Rails console](../../../administration/operations/rails_console.md).
+
+<div class="video-fallback">
+ For a demo of the group access token workaround, see <a href="https://www.youtube.com/watch?v=W2fg1P1xmU0">Demo: Group Level Access Tokens</a>.
+</div>
+<figure class="video-container">
+ <iframe src="https://www.youtube.com/embed/W2fg1P1xmU0" frameborder="0" allowfullscreen="true"> </iframe>
+</figure>
+
+### Create a group access token
+
+To create a group access token, run the following in a Rails console:
+
+```ruby
+admin = User.find(1) # group admin
+group = Group.find(109) # the group you want to create a token for
+bot = Users::CreateService.new(admin, { name: 'group_token', username: "group_#{group.id}_bot", email: "group_#{group.id}_bot@example.com", user_type: :project_bot }).execute # create the group bot user
+# for further group access tokens, the username should be group_#{group.id}_bot#{bot_count}, e.g. group_109_bot2, and their email should be group_109_bot2@example.com
+bot.confirm # confirm the bot
+group.add_user(bot, :maintainer) # add the bot to the group at the desired access level
+token = bot.personal_access_tokens.create(scopes:[:api, :write_repository], name: 'group_token') # give it a PAT
+gtoken = token.token # get the token value
+```
+
+Test if the generated group access token works:
+
+1. Pass the group access token in the `PRIVATE-TOKEN` header to GitLab REST APIs. For example:
+
+ - [Create an epic](../../../api/epics.md#new-epic) on the group.
+ - [Create a project pipeline](../../../api/pipelines.md#create-a-new-pipeline)
+ in one of the group's projects.
+ - [Create an issue](../../../api/issues.md#new-issue) in one of the group's projects.
+
+1. Use the group token to [clone a group's project](../../../gitlab-basics/start-using-git.md#clone-with-https)
+ using HTTPS.
+
+### Revoke a group access token
+
+To revoke a group access token, run the following in a Rails console:
+
+```ruby
+bot = User.find_by(username: 'group_109_bot') # the owner of the token you want to revoke
+token = bot.personal_access_tokens.last # the token you want to revoke
+token.revoke!
+```
diff --git a/doc/user/project/time_tracking.md b/doc/user/project/time_tracking.md
index 29aedb33003..2b901ddc17b 100644
--- a/doc/user/project/time_tracking.md
+++ b/doc/user/project/time_tracking.md
@@ -14,8 +14,8 @@ requests in GitLab.
Use time tracking for these tasks:
- Record the time spent working on an issue or a merge request.
-- Add an estimate of the amount of time needed to complete an issue or a merge
- request.
+- Add or update an estimate of the total time to complete an issue or a merge
+request.
- View a breakdown of time spent working on an issue or a merge request.
You don't have to indicate an estimate to enter the time spent, and vice versa.
@@ -45,9 +45,14 @@ For example, if you need to enter an estimate of 1 month, 2 weeks, 3 days, 4 hou
type `/estimate 1mo 2w 3d 4h 5m`.
Check the [time units you can use](#configuration).
-Every time you enter a new time estimate, any previous time estimates are
-overridden by this new value. There should only be one valid estimate in an
-issue or a merge request.
+The estimate is designed to show the total estimated time. The estimated
+time remaining is automatically calculated and displayed when hovering over
+the time tracking information in the right sidebar.
+
+![Estimated time remaining](img/remaining_time_v14_2.png)
+
+An issue or a merge request can have only one estimate. Every time you enter a
+new time estimate, it overwrites the previous value.
To remove an estimation entirely, use `/remove_estimate`.
@@ -125,4 +130,7 @@ With this option enabled, `75h` is displayed instead of `1w 4d 3h`.
- [Connection](../../api/graphql/reference/index.md#timelogconnection)
- [Edge](../../api/graphql/reference/index.md#timelogedge)
- [Fields](../../api/graphql/reference/index.md#timelog)
+ - [Timelogs](../../api/graphql/reference/index.md#querytimelogs)
- [Group timelogs](../../api/graphql/reference/index.md#grouptimelogs)
+ - [Project Timelogs](../../api/graphql/reference/index.md#projecttimelogs)
+ - [User Timelogs](../../api/graphql/reference/index.md#usertimelogs)
diff --git a/doc/user/project/web_ide/index.md b/doc/user/project/web_ide/index.md
index 722505304c0..160c2314ded 100644
--- a/doc/user/project/web_ide/index.md
+++ b/doc/user/project/web_ide/index.md
@@ -234,16 +234,29 @@ different branch.
> - Markdown preview [introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/18059) in [GitLab Free](https://about.gitlab.com/pricing/) 10.7.
> - Support for pasting images [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/22822) in [GitLab Free](https://about.gitlab.com/pricing/) 13.1.
+> - Side-by-side Markdown preview [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/68274) in [GitLab Free](https://about.gitlab.com/pricing/) 14.3
-When you edit Markdown files in the Web IDE, you can preview your changes by
-clicking the **Preview Markdown** tab above the file editor. The Markdown preview
-supports [GitLab Flavored Markdown](../../markdown.md#gitlab-flavored-markdown).
+To edit Markdown files in the Web IDE:
-You can also upload any local images by pasting them directly in the Markdown file.
+1. Go to your repository, and navigate to the Markdown page you want to edit.
+1. Select **Edit in Web IDE**, and GitLab loads the page in a tab in the editor.
+1. Make your changes to the file. GitLab supports [GitLab Flavored Markdown](../../markdown.md#gitlab-flavored-markdown).
+1. When your changes are complete, select **Commit** in the left sidebar.
+1. Add a commit message, select the branch you want to commit to, and select **Commit**.
+
+When editing, you can upload local images by pasting them directly in the Markdown file.
The image is uploaded to the same directory and is named `image.png` by default.
If another file already exists with the same name, a numeric suffix is automatically
added to the filename.
+There are two ways to preview Markdown content in the Web IDE:
+
+1. At the top of the file's tab, select **Preview Markdown** to preview the formatting
+ in your file. You can't edit the file in this view.
+ 1. To add more changes to the file, select **Edit**.
+1. Right-click or use the keyboard shortcut `Command/Control + Shift + P` and
+ select **Preview Markdown** to toggle a live Markdown preview panel.
+
## Live Preview
> - [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/19764) in [GitLab Free](https://about.gitlab.com/pricing/) 11.2.
@@ -362,6 +375,8 @@ terminal:
After the terminal has started, the console is displayed and we could access
the project repository files.
+When you use the image keyword, a container with the specified image is created. If you specify an image, it has no effect. This is the case when you use the [shell executor](https://docs.gitlab.com/runner/executors/shell.html).
+
**Important**. The terminal job is branch dependent. This means that the
configuration file used to trigger and configure the terminal is the one in
the selected branch of the Web IDE.
@@ -452,7 +467,7 @@ when:
The Web IDE has a few limitations:
-- Interactive Terminals is in a beta phase and continues to be improved in upcoming releases. In the meantime, please note that the user is limited to having only one
+- Interactive Terminals is in a beta phase and continues to be improved in upcoming releases. In the meantime, the user is limited to having only one
active terminal at a time.
- LFS files can be rendered and displayed but they cannot be updated and committed using the Web IDE. If an LFS file is modified and pushed to the repository, the LFS pointer in the repository is overwritten with the modified LFS file content.
diff --git a/doc/user/project/wiki/index.md b/doc/user/project/wiki/index.md
index 527db38c980..0507b6b78ca 100644
--- a/doc/user/project/wiki/index.md
+++ b/doc/user/project/wiki/index.md
@@ -29,6 +29,21 @@ with sibling pages listed in alphabetical order. To view a list of all pages, se
![Wiki sidebar](img/wiki_sidebar_v13_5.png)
+## Configure a default branch for your wiki
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/221159) in GitLab 14.1.
+
+The default branch for your wiki repository depends on your version of GitLab:
+
+- *GitLab versions 14.1 and later:* Wikis inherit the
+ [default branch name](../repository/branches/default.md) configured for
+ your instance or group. If no custom value is configured, GitLab uses `main`.
+- *GitLab versions 14.0 and earlier:* GitLab uses `master`.
+
+For any version of GitLab, you can
+[rename this default branch](../repository/branches/default.md#update-the-default-branch-name-in-your-repository)
+for previously created wikis.
+
## Create the wiki home page
When a wiki is created, it is empty. On your first visit, create the landing page
@@ -210,7 +225,7 @@ A `_sidebar` example, formatted with Markdown:
- [Sidebar](_sidebar)
```
-Support for displaying a generated table of contents with a custom side navigation is planned.
+Support for displaying a generated table of contents with a custom side navigation is being considered.
## Enable or disable a project wiki
@@ -238,6 +253,14 @@ Group wikis can be edited by members with the [Developer role](../../permissions
and above. Group wiki repositories can be moved using the
[Group repository storage moves API](../../../api/group_repository_storage_moves.md).
+### Export a group wiki **(PREMIUM)**
+
+Users with the [Owner role](../../permissions.md) in a group can
+[import and export group wikis](../../group/settings/import_export.md) when importing
+or exporting a group.
+
+Content created in a group wiki is not deleted when an account is downgraded or a GitLab trial ends.
+
## Link an external wiki
To add a link to an external wiki from a project's left sidebar:
diff --git a/doc/user/project/working_with_projects.md b/doc/user/project/working_with_projects.md
index 08b63bfed5f..77dd44e5c7f 100644
--- a/doc/user/project/working_with_projects.md
+++ b/doc/user/project/working_with_projects.md
@@ -22,7 +22,7 @@ projects with the largest number of comments in the past month, click **Trending
NOTE:
By default, `/explore` is visible to unauthenticated users. However, if the
-[**Public** visibility level](../admin_area/settings/visibility_and_access_controls.md#restricted-visibility-levels)
+[**Public** visibility level](../admin_area/settings/visibility_and_access_controls.md#restrict-visibility-levels)
is restricted, `/explore` is visible only to signed-in users.
## Create a project
@@ -148,39 +148,44 @@ To use a custom project template on the **New project** page:
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/26388) in GitLab 10.5.
-When you create a new repository locally, instead of manually creating a new project in GitLab
-and then [cloning the repository](../../gitlab-basics/start-using-git.md#clone-a-repository)
-locally, you can directly push it to GitLab to create the new project, all without leaving
-your terminal. If you have access rights to the associated namespace, GitLab
-automatically creates a new project under that GitLab namespace with its visibility
-set to Private by default (you can later change it in the [project's settings](../../public_access/public_access.md#change-project-visibility)).
-
-This can be done by using either SSH or HTTPS:
-
-```shell
-## Git push using SSH
-git push --set-upstream git@gitlab.example.com:namespace/nonexistent-project.git master
-
-## Git push using HTTPS
-git push --set-upstream https://gitlab.example.com/namespace/nonexistent-project.git master
-```
-
-You can pass the flag `--tags` to the `git push` command to export existing repository tags.
-
-Once the push finishes successfully, a remote message indicates
-the command to set the remote and the URL to the new project:
-
-```plaintext
-remote:
-remote: The private project namespace/nonexistent-project was created.
-remote:
-remote: To configure the remote, run:
-remote: git remote add origin https://gitlab.example.com/namespace/nonexistent-project.git
-remote:
-remote: To view the project, visit:
-remote: https://gitlab.example.com/namespace/nonexistent-project
-remote:
-```
+When you create a new repository locally, you don't have to sign in to the GitLab
+interface to create a project and
+[clone its repository](../../gitlab-basics/start-using-git.md#clone-a-repository).
+You can directly push your new repository to GitLab, which creates your new project
+without leaving your terminal.
+
+To push a new project:
+
+1. Identify the [namespace](../group/index.md#namespaces) you want to add the new
+ project to, as you need this information in a future step. To determine if you have
+ permission to create new projects in a namespace, view the group's page in a
+ web browser and confirm the page displays a **New project** button.
+
+ NOTE:
+ As project creation permissions can have many factors, contact your
+ GitLab administrator if you're unsure.
+
+1. If you want to push using SSH, ensure you have [created a SSH key](../../ssh/README.md) and
+ [added it to your GitLab account](../../ssh/index.md#add-an-ssh-key-to-your-gitlab-account).
+1. Push with one of the following methods. Replace `gitlab.example.com` with the
+ domain name of the machine that hosts your Git repository, `namespace` with the name of
+ your namespace, and `myproject` with the name of your new project:
+ - To push with SSH: `git push --set-upstream git@gitlab.example.com:namespace/myproject.git master`
+ - To push with HTTPS: `git push --set-upstream https://gitlab.example.com/namespace/myproject.git master`
+ Optional: to export existing repository tags, append the `--tags` flag to your `git push` command.
+1. When the push completes, GitLab displays a message:
+
+ ```plaintext
+ remote: The private project namespace/myproject was created.
+ ```
+
+1. (Optional) To configure the remote, alter the command
+ `git remote add origin https://gitlab.example.com/namespace/myproject.git`
+ to match your namespace and project names.
+
+You can view your new project at `https://gitlab.example.com/namespace/myproject`.
+Your project's visibility is set to **Private** by default, but you can change it
+in your [project's settings](../../public_access/public_access.md#change-project-visibility)).
## Fork a project
diff --git a/doc/user/report_abuse.md b/doc/user/report_abuse.md
index 2b585315326..a8107d77113 100644
--- a/doc/user/report_abuse.md
+++ b/doc/user/report_abuse.md
@@ -64,5 +64,5 @@ in the abuse report's **Message** field.
## Managing abuse reports
-Admins are able to view and resolve abuse reports.
+Administrators are able to view and resolve abuse reports.
For more information, see [abuse reports administration documentation](admin_area/review_abuse_reports.md).
diff --git a/doc/user/search/advanced_search.md b/doc/user/search/advanced_search.md
index bb74a035121..f29ac531d2e 100644
--- a/doc/user/search/advanced_search.md
+++ b/doc/user/search/advanced_search.md
@@ -35,9 +35,9 @@ The Advanced Search can be useful in various scenarios:
Advanced Search is based on Elasticsearch, which is a purpose-built full
text search engine that can be horizontally scaled so that it can provide
search results in 1-2 seconds in most cases.
-- **Code Maintenance:**
- Finding all the code that needs to be updated at once across an entire
- instance can save time spent maintaining code.
+- **Code Maintenance:**
+ Finding all the code that needs to be updated at once across an entire
+ instance can save time spent maintaining code.
This is especially helpful for organizations with more than 10 active projects.
This can also help build confidence is code refactoring to identify unknown impacts.
- **Promote innersourcing:**
diff --git a/doc/user/search/index.md b/doc/user/search/index.md
index d90841fae88..92d01e6a43e 100644
--- a/doc/user/search/index.md
+++ b/doc/user/search/index.md
@@ -186,10 +186,9 @@ Some filters can be added multiple times. These include but are not limited to a
## To-Do List
-Your [To-Do List](../todos.md#gitlab-to-do-list) can be searched by "to do" and "done".
-You can [filter](../todos.md#filtering-your-to-do-list) them per project,
-author, type, and action. Also, you can sort them by
-[**Label priority**](../../user/project/labels.md#label-priority),
+You can search your [To-Do List](../todos.md) by "to do" and "done".
+You can filter to-do items per project, author, type, and action.
+Also, you can sort them by [**Label priority**](../../user/project/labels.md#label-priority),
**Last created**, and **Oldest created**.
## Projects
@@ -307,10 +306,10 @@ GitLab instance.
## Search settings
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/292941) in GitLab 13.8 behind a feature flag, disabled by default.
-> - [Added to Group, Admin, and User settings](https://gitlab.com/groups/gitlab-org/-/epics/4842) in GitLab 13.9.
+> - [Added to Group, Administrator, and User settings](https://gitlab.com/groups/gitlab-org/-/epics/4842) in GitLab 13.9.
> - [Enabled by default](https://gitlab.com/gitlab-org/gitlab/-/issues/294025) in GitLab 13.11.
-You can search inside a Project, Group, Admin, or User's settings by entering
+You can search inside a Project, Group, Administrator, or User's settings by entering
a search term in the search box located at the top of the page. The search results
appear highlighted in the sections that match the search term.
diff --git a/doc/user/snippets.md b/doc/user/snippets.md
index 9fb6152168e..64da024f5ba 100644
--- a/doc/user/snippets.md
+++ b/doc/user/snippets.md
@@ -215,8 +215,7 @@ which can encourage user collaboration.
- Git tags are not supported in snippet repositories.
- Snippets' repositories are limited to 10 files. Attempting to push more
than 10 files results in an error.
-- Revisions are not visible to the user on the GitLab UI, but this feature is planned
- in future iterations. See the [revisions tab issue](https://gitlab.com/gitlab-org/gitlab/-/issues/39271)
+- Revisions are not visible to the user on the GitLab UI, but [an issue exists](https://gitlab.com/gitlab-org/gitlab/-/issues/39271)
for updates.
- The [maximum size for a snippet](../administration/snippets/index.md#snippets-content-size-limit)
is 50 MB, by default.
@@ -229,3 +228,16 @@ it's recommended to keep snippets' repositories as compact as possible.
For more information about tools to compact repositories,
see the documentation on [reducing repository size](../user/project/repository/reducing_the_repo_size_using_git.md).
+
+### Cannot enter text into the snippet text box
+
+If the text area after the filename field is disabled and prevents you from
+creating a new snippet, use this workaround:
+
+1. Enter a title for your snippet.
+1. Scroll to the bottom of the **Files** field, then select
+ **Add another file**. GitLab displays a second set of fields to add a second file.
+1. In the filename field for the second file, enter a filename to avoid a [known copy-pasting bug](https://gitlab.com/gitlab-org/gitlab/-/issues/22870).
+1. Enter any string into the text area for the second file.
+1. Scroll back to the first filename, and select **Delete file**.
+1. Create the rest of your file, and select **Create snippet** when done.
diff --git a/doc/user/todos.md b/doc/user/todos.md
index 719ab6f6e7c..f0601db0300 100644
--- a/doc/user/todos.md
+++ b/doc/user/todos.md
@@ -5,47 +5,37 @@ group: Project Management
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
-# GitLab To-Do List **(FREE)**
+# To-Do List **(FREE)**
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/2817) in GitLab 8.5.
-When you sign in to GitLab, you normally want to determine where you should
-spend your time. This can include taking an action, or keeping track of things
-(without having to read lots of email notifications). Because GitLab is where you
-do your work, being able to get started quickly is important.
+Your *To-Do List* is a chronological list of items waiting for your input.
+The items are known as *to-do items*.
-Your *To-Do List* offers a chronological list of items waiting for your input
-(known as *to-do items*) in a single dashboard.
-
-The To-Do List supports tracking [actions](#what-triggers-a-to-do-item) related to
-the following:
+You can use the To-Do List to track [actions](#actions-that-create-to-do-items) related to:
- [Issues](project/issues/index.md)
- [Merge requests](project/merge_requests/index.md)
- [Epics](group/epics/index.md)
- [Designs](project/issues/design_management.md)
-![to-do list with items to check on](img/todos_index_v13_11.png)
+## Access the To-Do List
-You can access your To-Do List by clicking the To-Do List icon (**{task-done}**)
-next to the search bar in the top navigation. If the to-do item count is:
+To access your To-Do List:
-- *Less than 100*, the number in blue is the number of to-do items.
-- *100 or more*, the number displays as 99+. The exact number displays in the
- To-Do List.
+On the top bar, in the top right, select To-Do List (**{task-done}**).
-## What triggers a to-do item
+## Actions that create to-do items
-A to-do item appears on your To-Do List when:
+Many to-do items are created automatically.
+A to-do item is added to your To-Do List when:
- An issue or merge request is assigned to you.
-- You're `@mentioned` in the description or comment of an issue or merge request
- (or epic).
-- You are `@mentioned` in a comment on a:
- - Commit
- - Design
-- The CI/CD pipeline for your merge request failed.
-- An open merge request becomes unmergeable due to conflict, and one of the
+- You're [mentioned](project/issues/issue_data_and_actions.md#mentions) in the description or
+ comment of an issue, merge request, or epic.
+- You are mentioned in a comment on a commit or design.
+- The CI/CD pipeline for your merge request fails.
+- An open merge request cannot be merged due to conflict, and one of the
following is true:
- You're the author.
- You're the user that set the merge request to automatically merge after a
@@ -55,24 +45,32 @@ A to-do item appears on your To-Do List when:
[merge train](../ci/pipelines/merge_trains.md),
and you're the user that added it.
-When several trigger actions occur for the same user on the same object (for
-example, an issue), GitLab displays only the first action as a single to-do
-item.
+When several actions occur for the same user on the same object,
+GitLab displays the first action as a single to-do item.
+
+To-do items aren't affected by [GitLab notification email settings](profile/notifications.md).
+
+## Create a to-do item
+
+You can manually add an item to your To-Do List.
-To-do item triggers aren't affected by [GitLab notification email settings](profile/notifications.md).
+1. Go to your:
-NOTE:
-When a user no longer has access to a resource related to a to-do item (such as
-an issue, merge request, epic, project, or group), for security reasons GitLab
-deletes any related to-do items within the next hour. Deletion is delayed to
-prevent data loss, in the case where a user's access is accidentally revoked.
+ - [Issue](project/issues/index.md)
+ - [Merge request](project/merge_requests/index.md)
+ - [Epic](group/epics/index.md)
+ - [Design](project/issues/design_management.md)
-### Directly addressing a to-do item
+1. On the right sidebar, at the top, select **Add a to do**.
+
+ ![Adding a to-do item from the issuable sidebar](img/todos_add_todo_sidebar_v14_1.png)
+
+## Create a to-do item by directly addressing someone
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/7926) in GitLab 9.0.
-If you're mentioned at the start of a line, the to-do item you receive is
-listed as *directly addressed*. For example, in the following comment:
+You can create a to-do item by directly addressing someone at the start of a line.
+For example, in the following comment:
```markdown
@alice What do you think? cc: @bob
@@ -86,22 +84,15 @@ listed as *directly addressed*. For example, in the following comment:
@erin @frank thank you!
```
-The people receiving directly addressed to-do items are `@alice`, `@erin`, and
-`@frank`. Directly addressed to-do items only differ from mentions in their type
-for filtering purposes; otherwise, they appear as normal.
+The people who receive to-do items are `@alice`, `@erin`, and
+`@frank`.
-### Manually creating a to-do item
+To view to-do items where a user was directly addressed, go to the To-Do List and
+from the **Action** filter, select **Directly addressed**.
-You can also add the following to your To-Do List by clicking the **Add a to do** button on:
+Mentioning a user many times only creates one to-do item.
-- [Issues](project/issues/index.md)
-- [Merge requests](project/merge_requests/index.md)
-- [Epics](group/epics/index.md)
-- [Designs](project/issues/design_management.md)
-
-![Adding a to-do item from the issuable sidebar](img/todos_add_todo_sidebar_v14_1.png)
-
-## Marking a to-do item as done
+## Actions that mark a to-do item as done
Any action to an issue, merge request, or epic marks its
corresponding to-do item as done.
@@ -110,53 +101,36 @@ Actions that dismiss to-do items include:
- Changing the assignee
- Changing the milestone
-- Adding/removing a label
+- Closing the issue or merge request
+- Adding or removing a label
- Commenting on the issue
- Resolving a [design discussion thread](project/issues/design_management.md#resolve-design-threads)
-Your To-Do List is personal, and items are only marked as done if you take
-action. If you close the issue or merge request, your to-do item is marked as
-done.
-
-To prevent other users from closing issues without you being notified, if
-someone else closes, merges, or takes action on an issue, merge request, or
+If someone else closes, merges, or takes action on an issue, merge request, or
epic, your to-do item remains pending.
-There's just one to-do item for each of these, so mentioning a user many times
-in an issue only triggers one to-do item.
+## Mark a to-do item as done
-If no action is needed, you can manually mark the to-do item as done by
-clicking its corresponding **Done** button to have GitLab remove the item from
-your To-Do List.
+You can manually mark a to-do item as done.
-![A to-do in the To-Do List](img/todos_todo_list_item.png)
+There are two ways to do this:
-You can also mark a to-do item as done by clicking the **Mark as done** button
-in the sidebar of an issue, merge request, or epic.
+- In the To-Do List, to the right of the to-do item, select **Done**.
+- In the sidebar of an issue, merge request, or epic, select **Mark as done**.
-![Mark as done from the issuable sidebar](img/todos_mark_done_sidebar_v14_1.png)
+ ![Mark as done from the sidebar](img/todos_mark_done_sidebar_v14_1.png)
-You can mark all your to-do items as done at once by clicking the
-**Mark all as done** button.
+## Mark all to-do items as done
-## Filtering your To-Do List
+You can mark all your to-do items as done at the same time.
-You can use the following types of filters with your To-Do List:
+In the To-Do List, in the top right, select **Mark all as done**.
-| Filter | Description |
-| ------- | ---------------------------------------------------------------- |
-| Project | Filter by project. |
-| Group | Filter by group. |
-| Author | Filter by the author that triggered the to-do item. |
-| Type | Filter by issue, merge request, design, or epic. |
-| Action | Filter by the action that triggered the to-do item. |
+## How a user's To-Do List is affected when their access changes
-You can also filter by more than one of these at the same time. The previously
-described [triggering actions](#what-triggers-a-to-do-item) include:
+For security reasons, GitLab deletes to-do items when a user no longer has access to a related resource.
+For example, if the user no longer has access to an issue, merge request, epic, project, or group,
+GitLab deletes the related to-do items.
-- Any action
-- Assigned
-- Mentioned
-- Added
-- Pipelines
-- Directly addressed
+This process occurs in the hour after their access changes. Deletion is delayed to
+prevent data loss, in case the user's access was accidentally revoked.
diff --git a/doc/user/upgrade_email_bypass.md b/doc/user/upgrade_email_bypass.md
index 7d2f2395815..3272ff30e72 100644
--- a/doc/user/upgrade_email_bypass.md
+++ b/doc/user/upgrade_email_bypass.md
@@ -73,7 +73,7 @@ Your account has been blocked. Fatal: Could not read from remote repository
Your primary email address is not confirmed.
```
-You can assure your users that they have not been [Blocked](admin_area/moderate_users.md#blocking-and-unblocking-users) by an administrator.
+You can assure your users that they have not been [Blocked](admin_area/moderate_users.md#block-and-unblock-users) by an administrator.
When affected users see this message, they must confirm their email address before they can commit code.
## What do I need to know as an administrator of a GitLab self-managed Instance?
diff --git a/doc/user/workspace/img/1.1-Instance_overview.png b/doc/user/workspace/img/1.1-Instance_overview.png
index 7612cc7c092..a3c642cda3f 100644
--- a/doc/user/workspace/img/1.1-Instance_overview.png
+++ b/doc/user/workspace/img/1.1-Instance_overview.png
Binary files differ
diff --git a/doc/user/workspace/img/1.2-Groups_overview.png b/doc/user/workspace/img/1.2-Groups_overview.png
index b4f034bba16..7771e5f4c3c 100644
--- a/doc/user/workspace/img/1.2-Groups_overview.png
+++ b/doc/user/workspace/img/1.2-Groups_overview.png
Binary files differ
diff --git a/doc/user/workspace/img/1.3-Admin.png b/doc/user/workspace/img/1.3-Admin.png
index 018ed8a1bfc..5f531e4ef5e 100644
--- a/doc/user/workspace/img/1.3-Admin.png
+++ b/doc/user/workspace/img/1.3-Admin.png
Binary files differ
diff --git a/doc/user/workspace/img/Admin_Settings.png b/doc/user/workspace/img/Admin_Settings.png
index 5c4656ff342..b0d13f43ccb 100644
--- a/doc/user/workspace/img/Admin_Settings.png
+++ b/doc/user/workspace/img/Admin_Settings.png
Binary files differ
diff --git a/doc/user/workspace/img/hardware_settings.png b/doc/user/workspace/img/hardware_settings.png
new file mode 100644
index 00000000000..ff460918f25
--- /dev/null
+++ b/doc/user/workspace/img/hardware_settings.png
Binary files differ
diff --git a/doc/user/workspace/index.md b/doc/user/workspace/index.md
index f098cef6053..d9c9d19721b 100644
--- a/doc/user/workspace/index.md
+++ b/doc/user/workspace/index.md
@@ -6,17 +6,20 @@ info: To determine the technical writer assigned to the Stage/Group associated w
# Workspace
-Workspace will be the top-level [namespace](../group/index.md#namespaces) for you to manage
+Workspace will be the top [namespace](../group/index.md#namespaces) for you to manage
everything GitLab, including:
- Defining and applying settings to all of your groups, subgroups, and projects.
- Aggregating data from all your groups, subgroups, and projects.
Workspace will take many of the features from the
-[Admin Area](../admin_area/index.md), and there will be one workspace per:
+[Admin Area](../admin_area/index.md) and will:
-- Instance, for self-managed instances.
-- Namespace, for GitLab.com.
+- Enable a top namespace for GitLab.com.
+- Eventually replace the instance level for self-managed installations.
+
+Our goal is to reach feature parity between SaaS and self-managed installations, with one
+exception: **Hardware Controls** will appear **only** on self-managed installations.
NOTE:
Workspace is currently in development.
@@ -32,3 +35,5 @@ The following provide a preview to the Workspace concept.
![Admin Overview](img/1.3-Admin.png)
![Admin Overview](img/Admin_Settings.png)
+
+![Admin Overview](img/hardware_settings.png)