From 78aaabb87f180e93fa53aba407a0eef1e12a7a56 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Fri, 3 Dec 2021 15:10:36 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .gitlab/CODEOWNERS | 16 +-- .gitlab/ci/rules.gitlab-ci.yml | 2 +- Dangerfile | 22 +++- Gemfile | 2 +- Gemfile.lock | 6 +- .../javascripts/ide/lib/themes/monokai.js | 2 +- .../ide/lib/themes/solarized_dark.js | 2 +- .../ide/lib/themes/solarized_light.js | 2 +- .../runner/components/runner_list.vue | 11 +- app/assets/stylesheets/utilities.scss | 7 ++ app/graphql/types/ci/job_type.rb | 14 ++- ...figuration__sast_create_service_create.yml | 21 ++++ ...figuration__sast_create_service_update.yml | 21 ++++ ...secret_detection_create_service_create.yml | 21 ++++ ...secret_detection_create_service_update.yml | 21 ++++ ...tainer_repositories_list_repositories.yml} | 5 +- ...tainer_repositories_delete_repository.yml} | 5 +- ...ect_container_repositories_delete_tag.yml} | 5 +- ...ontainer_repositories_delete_tag_bulk.yml} | 5 +- ...tainer_repositories_list_repositories.yml} | 5 +- ...ject_container_repositories_list_tags.yml} | 5 +- ...51015_api__pypi_packages_list_package.yml} | 5 +- ...applications_cluster_application_name.yml} | 5 +- ...prometheus_disabled_manual_prometheus.yml} | 3 + ..._prometheus_enabled_manual_prometheus.yml} | 3 + ...gistry_notification_create_repository.yml} | 5 +- ...gistry_notification_delete_repository.yml} | 5 +- ...iner_registry_notification_delete_tag.yml} | 5 +- ...registry_notification_push_repository.yml} | 5 +- ...tainer_registry_notification_push_tag.yml} | 5 +- ...109151015_delete_repository_container.yml} | 5 +- ...l => 202109151015_delete_tag_bulk_tag.yml} | 5 +- ...9151015_experiment_name_initial_write.yml} | 5 +- ...=> 202109151015_experiment_name_write.yml} | 5 +- ...ups__email_campaigns_controller_click.yml} | 5 +- ...sitories_controller_list_repositories.yml} | 5 +- ...nt__zoom_integration_add_zoom_meeting.yml} | 5 +- ..._zoom_integration_remove_zoom_meeting.yml} | 5 +- ...109151015_list_repositories_container.yml} | 5 +- ...9151015_notes__create_service_execute.yml} | 5 +- ...2109151015_package_class_pull_package.yml} | 5 +- ...2109151015_package_class_push_package.yml} | 5 +- ...sitories_controller_delete_repository.yml} | 5 +- ...sitories_controller_list_repositories.yml} | 5 +- ..._registry__tags_controller_delete_tag.yml} | 5 +- ...stry__tags_controller_delete_tag_bulk.yml} | 5 +- ...__registry__tags_controller_list_tags.yml} | 5 +- danger/ci_templates/Dangerfile | 2 +- danger/database/Dangerfile | 2 +- danger/documentation/Dangerfile | 2 +- danger/product_intelligence/Dangerfile | 2 +- danger/roulette/Dangerfile | 6 +- danger/specialization_labels/Dangerfile | 2 +- danger/specs/Dangerfile | 2 +- doc/administration/audit_events.md | 2 +- doc/administration/auth/ldap/index.md | 4 +- .../replication/version_specific_updates.md | 18 +-- .../geo/secondary_proxy/index.md | 2 +- doc/administration/instance_limits.md | 2 +- .../package_information/deprecation_policy.md | 26 ++--- .../repository_storage_types.md | 4 +- doc/api/graphql/reference/index.md | 2 +- doc/api/members.md | 6 +- doc/api/projects.md | 2 +- doc/ci/environments/protected_environments.md | 2 +- doc/ci/git_submodules.md | 2 +- doc/ci/pipelines/merge_trains.md | 2 +- doc/development/adding_database_indexes.md | 4 +- .../contributing/merge_request_workflow.md | 2 +- doc/development/fe_guide/vue.md | 2 +- doc/development/fe_guide/vue3_migration.md | 2 +- doc/development/image_scaling.md | 4 +- doc/development/service_ping/implement.md | 2 +- doc/development/service_ping/index.md | 6 +- doc/development/sidekiq_style_guide.md | 2 +- doc/development/snowplow/implementation.md | 38 +++---- .../img/review-app-parent-pipeline.png | Bin 136842 -> 42721 bytes doc/integration/elasticsearch.md | 2 +- doc/integration/img/ding_talk_menu.png | Bin 66465 -> 22685 bytes .../img/omniauth_providers_v_14_6.png | Bin 37256 -> 12165 bytes doc/integration/jira/dvcs.md | 2 +- doc/security/webhooks.md | 2 +- doc/subscriptions/gitlab_com/index.md | 2 +- doc/topics/cron/index.md | 2 +- doc/update/deprecations.md | 2 +- doc/user/admin_area/index.md | 2 +- ...product_analytics_commits_per_mr_v14_4.png | Bin 135480 -> 35894 bytes ...uctivity_analytics_time_to_merge_v14_4.png | Bin 96144 -> 21953 bytes ...productivity_analytics_trendline_v14_4.png | Bin 47250 -> 13089 bytes doc/user/analytics/index.md | 28 ++--- doc/user/analytics/productivity_analytics.md | 14 +-- .../application_security/api_fuzzing/index.md | 2 +- .../dast/browser_based.md | 2 +- doc/user/application_security/dast/index.md | 2 +- doc/user/application_security/index.md | 2 +- .../img/pipeline_security_dashboard_v14_4.png | Bin 126412 -> 44152 bytes .../security_dashboard/index.md | 2 +- doc/user/clusters/agent/index.md | 2 +- doc/user/clusters/agent/install/index.md | 2 +- .../img/policies_maintainer_edit_v14_3.png | Bin 25383 -> 26480 bytes .../compliance/license_compliance/index.md | 7 +- doc/user/group/devops_adoption/index.md | 16 +-- doc/user/group/index.md | 2 +- doc/user/group/saml_sso/index.md | 6 +- .../group/value_stream_analytics/index.md | 6 +- doc/user/img/award_emoji_select_v14_6.png | Bin 50200 -> 17252 bytes doc/user/profile/index.md | 2 +- .../integrations/img/webhook_testing.png | Bin 96374 -> 30732 bytes .../repository/gpg_signed_commits/index.md | 2 +- .../img/jupyter_notebook_diff_v14_5.png | Bin 249380 -> 71585 bytes locale/gitlab.pot | 3 + ...eploy_token.rb => project_deploy_token.rb} | 49 +++++--- .../container_registry_omnibus_spec.rb | 16 +-- .../package_registry/helm_registry_spec.rb | 2 +- .../maven_gradle_repository_spec.rb | 2 +- .../package_registry/maven_repository_spec.rb | 2 +- .../npm/npm_instance_level_spec.rb | 12 +- .../npm/npm_project_level_spec.rb | 12 +- .../deploy_token/add_deploy_token_spec.rb | 6 +- .../packages_registry_shared_context.rb | 10 +- spec/factories/ci/pipelines.rb | 6 +- spec/graphql/types/ci/job_type_spec.rb | 2 +- .../namespaces/user_namespace_policy_spec.rb | 8 +- spec/requests/api/commit_statuses_spec.rb | 30 ++++- spec/requests/api/graphql/ci/jobs_spec.rb | 50 +++------ .../cross-database-modification-allowlist.yml | 2 - .../atomic_internal_id_shared_examples.rb | 22 +++- spec/tooling/danger/project_helper_spec.rb | 105 +----------------- spec/tooling/danger/specs_spec.rb | 2 +- .../ssh_keys/_key_details.html.haml_spec.rb | 4 +- tooling/danger/changelog.rb | 6 +- tooling/danger/project_helper.rb | 23 +--- 132 files changed, 539 insertions(+), 426 deletions(-) create mode 100644 config/events/202108302307_security__ci_configuration__sast_create_service_create.yml create mode 100644 config/events/202108302307_security__ci_configuration__sast_create_service_update.yml create mode 100644 config/events/202108302307_security__ci_configuration__secret_detection_create_service_create.yml create mode 100644 config/events/202108302307_security__ci_configuration__secret_detection_create_service_update.yml rename config/events/{api__group_container_repositories_list_repositories.yml => 202109151015_api__group_container_repositories_list_repositories.yml} (87%) rename config/events/{api__project_container_repositories_delete_repository.yml => 202109151015_api__project_container_repositories_delete_repository.yml} (87%) rename config/events/{api__project_container_repositories_delete_tag.yml => 202109151015_api__project_container_repositories_delete_tag.yml} (87%) rename config/events/{api__project_container_repositories_delete_tag_bulk.yml => 202109151015_api__project_container_repositories_delete_tag_bulk.yml} (87%) rename config/events/{api__project_container_repositories_list_repositories.yml => 202109151015_api__project_container_repositories_list_repositories.yml} (87%) rename config/events/{api__project_container_repositories_list_tags.yml => 202109151015_api__project_container_repositories_list_tags.yml} (87%) rename config/events/{api__pypi_packages_list_package.yml => 202109151015_api__pypi_packages_list_package.yml} (86%) rename config/events/{cluster_applications_cluster_application_name.yml => 202109151015_cluster_applications_cluster_application_name.yml} (87%) rename config/events/{cluster_services_prometheus_disabled_manual_prometheus.yml => 202109151015_cluster_services_prometheus_disabled_manual_prometheus.yml} (94%) rename config/events/{cluster_services_prometheus_enabled_manual_prometheus.yml => 202109151015_cluster_services_prometheus_enabled_manual_prometheus.yml} (94%) rename config/events/{container_registry_notification_create_repository.yml => 202109151015_container_registry_notification_create_repository.yml} (88%) rename config/events/{container_registry_notification_delete_repository.yml => 202109151015_container_registry_notification_delete_repository.yml} (88%) rename config/events/{container_registry_notification_delete_tag.yml => 202109151015_container_registry_notification_delete_tag.yml} (87%) rename config/events/{container_registry_notification_push_repository.yml => 202109151015_container_registry_notification_push_repository.yml} (88%) rename config/events/{container_registry_notification_push_tag.yml => 202109151015_container_registry_notification_push_tag.yml} (87%) rename config/events/{delete_repository_container.yml => 202109151015_delete_repository_container.yml} (86%) rename config/events/{delete_tag_bulk_tag.yml => 202109151015_delete_tag_bulk_tag.yml} (87%) rename config/events/{experiment_name_initial_write.yml => 202109151015_experiment_name_initial_write.yml} (87%) rename config/events/{experiment_name_write.yml => 202109151015_experiment_name_write.yml} (87%) rename config/events/{groups__email_campaigns_controller_click.yml => 202109151015_groups__email_campaigns_controller_click.yml} (86%) rename config/events/{groups__registry__repositories_controller_list_repositories.yml => 202109151015_groups__registry__repositories_controller_list_repositories.yml} (87%) rename config/events/{incident_management__zoom_integration_add_zoom_meeting.yml => 202109151015_incident_management__zoom_integration_add_zoom_meeting.yml} (88%) rename config/events/{incident_management__zoom_integration_remove_zoom_meeting.yml => 202109151015_incident_management__zoom_integration_remove_zoom_meeting.yml} (88%) rename config/events/{list_repositories_container.yml => 202109151015_list_repositories_container.yml} (86%) rename config/events/{notes__create_service_execute.yml => 202109151015_notes__create_service_execute.yml} (88%) rename config/events/{package_class_pull_package.yml => 202109151015_package_class_pull_package.yml} (86%) rename config/events/{package_class_push_package.yml => 202109151015_package_class_push_package.yml} (86%) rename config/events/{projects__registry__repositories_controller_delete_repository.yml => 202109151015_projects__registry__repositories_controller_delete_repository.yml} (87%) rename config/events/{projects__registry__repositories_controller_list_repositories.yml => 202109151015_projects__registry__repositories_controller_list_repositories.yml} (87%) rename config/events/{projects__registry__tags_controller_delete_tag.yml => 202109151015_projects__registry__tags_controller_delete_tag.yml} (87%) rename config/events/{projects__registry__tags_controller_delete_tag_bulk.yml => 202109151015_projects__registry__tags_controller_delete_tag_bulk.yml} (87%) rename config/events/{projects__registry__tags_controller_list_tags.yml => 202109151015_projects__registry__tags_controller_list_tags.yml} (87%) rename qa/qa/resource/{deploy_token.rb => project_deploy_token.rb} (55%) diff --git a/.gitlab/CODEOWNERS b/.gitlab/CODEOWNERS index ed96b185ab2..5eb96d1addd 100644 --- a/.gitlab/CODEOWNERS +++ b/.gitlab/CODEOWNERS @@ -11,19 +11,19 @@ /doc/.markdownlint @marcel.amirault @eread @aqualls @cnorris /doc/ @gl-docsteam /doc/.vale/ @marcel.amirault @eread @aqualls @cnorris -/doc/administration/geo/ @marcel.amirault +/doc/administration/geo/ @axil /doc/administration/gitaly/ @eread /doc/administration/lfs/ @aqualls /doc/administration/monitoring/ @ngaskill -/doc/administration/operations/ @marcel.amirault @eread @marcia +/doc/administration/operations/ @axil @eread @marcia /doc/administration/packages/ @ngaskill /doc/administration/pages/ @rdickenson @kpaizee /doc/administration/postgresql/ @marcia -/doc/administration/raketasks/ @marcel.amirault @eread -/doc/administration/redis/ @marcel.amirault -/doc/administration/reference_architectures/ @marcel.amirault +/doc/administration/raketasks/ @axil @eread +/doc/administration/redis/ @axil +/doc/administration/reference_architectures/ @axil /doc/administration/snippets/ @aqualls -/doc/administration/troubleshooting @marcel.amirault @marcia @eread +/doc/administration/troubleshooting @axil @marcia @eread /doc/api/graphql/ @msedlakjakubowski @kpaizee /doc/api/graphql/reference/ @kpaizee /doc/api/group_activity_analytics.md @fneill @@ -37,7 +37,7 @@ /doc/development/i18n/ @ngaskill /doc/development/value_stream_analytics.md @fneill /doc/gitlab-basics/ @aqualls -/doc/install/ @marcel.amirault +/doc/install/ @axil /doc/operations/ @ngaskill @rdickenson /doc/push_rules/ @aqualls /doc/security/ @eread @@ -45,7 +45,7 @@ /doc/subscriptions/ @sselhorn /doc/topics/autodevops/ @marcia /doc/topics/git/ @aqualls -/doc/update/ @marcel.amirault @marcia +/doc/update/ @axil @marcia /doc/user/analytics/ @fneill @ngaskill /doc/user/application_security/ @rdickenson /doc/user/application_security/container_scanning/ @ngaskill diff --git a/.gitlab/ci/rules.gitlab-ci.yml b/.gitlab/ci/rules.gitlab-ci.yml index 0d6c81c9624..ec28488fe05 100644 --- a/.gitlab/ci/rules.gitlab-ci.yml +++ b/.gitlab/ci/rules.gitlab-ci.yml @@ -1367,7 +1367,7 @@ - <<: *if-not-ee when: never - <<: *if-merge-request-labels-skip-undercoverage - allow_failure: true + when: never - <<: *if-merge-request-labels-run-all-rspec - <<: *if-merge-request changes: *backend-patterns diff --git a/Dangerfile b/Dangerfile index 212097f6a68..ca729f1b941 100644 --- a/Dangerfile +++ b/Dangerfile @@ -2,15 +2,25 @@ require 'gitlab-dangerfiles' -gitlab_dangerfiles = Gitlab::Dangerfiles::Engine.new(self) -gitlab_dangerfiles.import_plugins +def ee? + # Support former project name for `dev` and support local Danger run + %w[gitlab gitlab-ee].include?(ENV['CI_PROJECT_NAME']) || Dir.exist?(File.expand_path('ee', __dir__)) +end + +project_name = ee? ? 'gitlab' : 'gitlab-foss' + +Gitlab::Dangerfiles.for_project(self, project_name) do |gitlab_dangerfiles| + gitlab_dangerfiles.import_plugins + + unless helper.release_automation? + danger.import_plugin('danger/plugins/*.rb') + gitlab_dangerfiles.import_dangerfiles(except: %w[simple_roulette]) + gitlab_dangerfiles.config.files_to_category = ProjectHelper::CATEGORIES + end +end return if helper.release_automation? -danger.import_plugin('danger/plugins/*.rb') - -gitlab_dangerfiles.import_dangerfiles - project_helper.rule_names.each do |rule| danger.import_dangerfile(path: File.join('danger', rule)) end diff --git a/Gemfile b/Gemfile index 1d379042099..38ffccf1778 100644 --- a/Gemfile +++ b/Gemfile @@ -400,7 +400,7 @@ group :development, :test do end group :development, :test, :danger do - gem 'gitlab-dangerfiles', '~> 2.5.0', require: false + gem 'gitlab-dangerfiles', '~> 2.6.1', require: false end group :development, :test, :coverage do diff --git a/Gemfile.lock b/Gemfile.lock index 8a1a1a65757..e417b8da225 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -222,7 +222,7 @@ GEM css_parser (1.7.0) addressable daemons (1.3.1) - danger (8.4.1) + danger (8.4.2) claide (~> 1.0) claide-plugins (>= 0.9.2) colored2 (~> 3.1) @@ -458,7 +458,7 @@ GEM terminal-table (~> 1.5, >= 1.5.1) gitlab-chronic (0.10.5) numerizer (~> 0.2) - gitlab-dangerfiles (2.5.0) + gitlab-dangerfiles (2.6.1) danger (>= 8.3.1) danger-gitlab (>= 8.0.0) gitlab-experiment (0.6.5) @@ -1475,7 +1475,7 @@ DEPENDENCIES gitaly (~> 14.4.0.pre.rc43) github-markup (~> 1.7.0) gitlab-chronic (~> 0.10.5) - gitlab-dangerfiles (~> 2.5.0) + gitlab-dangerfiles (~> 2.6.1) gitlab-experiment (~> 0.6.5) gitlab-fog-azure-rm (~> 1.2.0) gitlab-labkit (~> 0.21.1) diff --git a/app/assets/javascripts/ide/lib/themes/monokai.js b/app/assets/javascripts/ide/lib/themes/monokai.js index d7636574754..36fa5039be7 100644 --- a/app/assets/javascripts/ide/lib/themes/monokai.js +++ b/app/assets/javascripts/ide/lib/themes/monokai.js @@ -162,8 +162,8 @@ export default { 'editor.selectionBackground': '#49483E', 'editor.lineHighlightBackground': '#3E3D32', 'editorCursor.foreground': '#F8F8F0', - 'editorWhitespace.foreground': '#3B3A32', 'editorIndentGuide.activeBackground': '#9D550FB0', 'editor.selectionHighlightBorder': '#222218', + 'editorWhitespace.foreground': '#75715e', }, }; diff --git a/app/assets/javascripts/ide/lib/themes/solarized_dark.js b/app/assets/javascripts/ide/lib/themes/solarized_dark.js index 3c9414b9dc9..8ae609285ac 100644 --- a/app/assets/javascripts/ide/lib/themes/solarized_dark.js +++ b/app/assets/javascripts/ide/lib/themes/solarized_dark.js @@ -1105,6 +1105,6 @@ export default { 'editor.selectionBackground': '#073642', 'editor.lineHighlightBackground': '#073642', 'editorCursor.foreground': '#819090', - 'editorWhitespace.foreground': '#073642', + 'editorWhitespace.foreground': '#586e75', }, }; diff --git a/app/assets/javascripts/ide/lib/themes/solarized_light.js b/app/assets/javascripts/ide/lib/themes/solarized_light.js index b7bfcf33b0f..2c9f3d904f1 100644 --- a/app/assets/javascripts/ide/lib/themes/solarized_light.js +++ b/app/assets/javascripts/ide/lib/themes/solarized_light.js @@ -1096,6 +1096,6 @@ export default { 'editor.selectionBackground': '#EEE8D5', 'editor.lineHighlightBackground': '#EEE8D5', 'editorCursor.foreground': '#000000', - 'editorWhitespace.foreground': '#EAE3C9', + 'editorWhitespace.foreground': '#93a1a1', }, }; diff --git a/app/assets/javascripts/runner/components/runner_list.vue b/app/assets/javascripts/runner/components/runner_list.vue index bb91d1a6e1d..d70a28a2421 100644 --- a/app/assets/javascripts/runner/components/runner_list.vue +++ b/app/assets/javascripts/runner/components/runner_list.vue @@ -9,20 +9,17 @@ import RunnerSummaryCell from './cells/runner_summary_cell.vue'; import RunnerStatusCell from './cells/runner_status_cell.vue'; import RunnerTags from './runner_tags.vue'; -const tableField = ({ key, label = '', width = 10 }) => { +const tableField = ({ key, label = '', thClasses = [] }) => { return { key, label, thClass: [ - `gl-w-${width}p`, 'gl-bg-transparent!', 'gl-border-b-solid!', 'gl-border-b-gray-100!', - 'gl-py-5!', - 'gl-px-0!', 'gl-border-b-1!', + ...thClasses, ], - tdClass: ['gl-py-5!', 'gl-px-1!'], tdAttr: { 'data-testid': `td-${key}`, }, @@ -66,10 +63,10 @@ export default { }, fields: [ tableField({ key: 'status', label: s__('Runners|Status') }), - tableField({ key: 'summary', label: s__('Runners|Runner ID'), width: 30 }), + tableField({ key: 'summary', label: s__('Runners|Runner ID'), thClasses: ['gl-lg-w-25p'] }), tableField({ key: 'version', label: __('Version') }), tableField({ key: 'ipAddress', label: __('IP Address') }), - tableField({ key: 'tagList', label: __('Tags'), width: 20 }), + tableField({ key: 'tagList', label: __('Tags'), thClasses: ['gl-lg-w-25p'] }), tableField({ key: 'contactedAt', label: __('Last contact') }), tableField({ key: 'actions', label: '' }), ], diff --git a/app/assets/stylesheets/utilities.scss b/app/assets/stylesheets/utilities.scss index 65961edb833..d2cc1f8640f 100644 --- a/app/assets/stylesheets/utilities.scss +++ b/app/assets/stylesheets/utilities.scss @@ -302,3 +302,10 @@ $gl-line-height-42: px-to-rem(42px); .gl-z-index-200 { z-index: 200; } + +// Will be moved to @gitlab/ui by https://gitlab.com/gitlab-org/gitlab-ui/-/issues/1637 +.gl-lg-w-25p { + @include gl-media-breakpoint-up(lg) { + width: 25%; + } +} diff --git a/app/graphql/types/ci/job_type.rb b/app/graphql/types/ci/job_type.rb index 57ff35bcaa5..115cc611072 100644 --- a/app/graphql/types/ci/job_type.rb +++ b/app/graphql/types/ci/job_type.rb @@ -50,8 +50,8 @@ module Types null: true, description: 'How long the job was enqueued before starting.' - field :previous_stage_jobs_and_needs, Types::Ci::JobType.connection_type, null: true, - description: 'All prerequisite jobs.' + field :previous_stage_jobs_or_needs, Types::Ci::JobType.connection_type, null: true, + description: 'Jobs that must complete before the job runs. Returns needed jobs if the job uses the `needs` keyword, and returns previous stage jobs otherwise.' field :detailed_status, Types::Ci::DetailedStatusType, null: true, description: 'Detailed status of the job.' field :artifacts, Types::Ci::JobArtifactType.connection_type, null: true, @@ -103,9 +103,13 @@ module Types end end - def previous_stage_jobs_and_needs - Gitlab::Graphql::Lazy.with_value(previous_stage_jobs) do |jobs| - (jobs + object.needs).uniq(&:name) + def previous_stage_jobs_or_needs + if object.scheduling_type == 'stage' + Gitlab::Graphql::Lazy.with_value(previous_stage_jobs) do |jobs| + jobs + end + else + object.needs end end diff --git a/config/events/202108302307_security__ci_configuration__sast_create_service_create.yml b/config/events/202108302307_security__ci_configuration__sast_create_service_create.yml new file mode 100644 index 00000000000..6fb2c1878be --- /dev/null +++ b/config/events/202108302307_security__ci_configuration__sast_create_service_create.yml @@ -0,0 +1,21 @@ +description: Create SAST +category: Security::CiConfiguration::SastCreateService +action: create +label_description: One of "true", "false" +property_description: +value_description: +extra_properties: +identifiers: +product_section: sec +product_stage: secure +product_group: group::static_analysis +product_category: +milestone: "13.12" +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/58230 +distributions: +- ce +- ee +tiers: +- free +- premium +- ultimate diff --git a/config/events/202108302307_security__ci_configuration__sast_create_service_update.yml b/config/events/202108302307_security__ci_configuration__sast_create_service_update.yml new file mode 100644 index 00000000000..c4e65e47847 --- /dev/null +++ b/config/events/202108302307_security__ci_configuration__sast_create_service_update.yml @@ -0,0 +1,21 @@ +description: Update SAST +category: Security::CiConfiguration::SastCreateService +action: update +label_description: One of "true", "false" +property_description: +value_description: +extra_properties: +identifiers: +product_section: sec +product_stage: secure +product_group: group::static_analysis +product_category: +milestone: "13.12" +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/58230 +distributions: +- ce +- ee +tiers: +- free +- premium +- ultimate diff --git a/config/events/202108302307_security__ci_configuration__secret_detection_create_service_create.yml b/config/events/202108302307_security__ci_configuration__secret_detection_create_service_create.yml new file mode 100644 index 00000000000..c0c295978f1 --- /dev/null +++ b/config/events/202108302307_security__ci_configuration__secret_detection_create_service_create.yml @@ -0,0 +1,21 @@ +description: Create secret detection +category: Security::CiConfiguration::SecretDetectionCreateService +action: create +label_description: One of "true", "false" +property_description: +value_description: +extra_properties: +identifiers: +product_section: sec +product_stage: secure +product_group: group::static_analysis +product_category: +milestone: "13.12" +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/58230 +distributions: +- ce +- ee +tiers: +- free +- premium +- ultimate diff --git a/config/events/202108302307_security__ci_configuration__secret_detection_create_service_update.yml b/config/events/202108302307_security__ci_configuration__secret_detection_create_service_update.yml new file mode 100644 index 00000000000..d2875a8e89f --- /dev/null +++ b/config/events/202108302307_security__ci_configuration__secret_detection_create_service_update.yml @@ -0,0 +1,21 @@ +description: Update secret detection +category: Security::CiConfiguration::SecretDetectionCreateService +action: update +label_description: One of "true", "false" +property_description: +value_description: +extra_properties: +identifiers: +product_section: sec +product_stage: secure +product_group: group::static_analysis +product_category: +milestone: "13.12" +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/58230 +distributions: +- ce +- ee +tiers: +- free +- premium +- ultimate diff --git a/config/events/api__group_container_repositories_list_repositories.yml b/config/events/202109151015_api__group_container_repositories_list_repositories.yml similarity index 87% rename from config/events/api__group_container_repositories_list_repositories.yml rename to config/events/202109151015_api__group_container_repositories_list_repositories.yml index 4df063ec758..e5a28374fb7 100644 --- a/config/events/api__group_container_repositories_list_repositories.yml +++ b/config/events/202109151015_api__group_container_repositories_list_repositories.yml @@ -8,11 +8,14 @@ extra_properties: identifiers: product_section: ops product_stage: package -product_group: package +product_group: group::package product_category: milestone: "13.5" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/41846 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/config/events/api__project_container_repositories_delete_repository.yml b/config/events/202109151015_api__project_container_repositories_delete_repository.yml similarity index 87% rename from config/events/api__project_container_repositories_delete_repository.yml rename to config/events/202109151015_api__project_container_repositories_delete_repository.yml index 196f7273a5c..2d3004e7a98 100644 --- a/config/events/api__project_container_repositories_delete_repository.yml +++ b/config/events/202109151015_api__project_container_repositories_delete_repository.yml @@ -8,11 +8,14 @@ extra_properties: identifiers: product_section: ops product_stage: package -product_group: package +product_group: group::package product_category: milestone: "13.5" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/41846 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/config/events/api__project_container_repositories_delete_tag.yml b/config/events/202109151015_api__project_container_repositories_delete_tag.yml similarity index 87% rename from config/events/api__project_container_repositories_delete_tag.yml rename to config/events/202109151015_api__project_container_repositories_delete_tag.yml index cb2c7748faa..88da16d02a1 100644 --- a/config/events/api__project_container_repositories_delete_tag.yml +++ b/config/events/202109151015_api__project_container_repositories_delete_tag.yml @@ -8,11 +8,14 @@ extra_properties: identifiers: product_section: ops product_stage: package -product_group: package +product_group: group::package product_category: milestone: "13.5" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/41846 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/config/events/api__project_container_repositories_delete_tag_bulk.yml b/config/events/202109151015_api__project_container_repositories_delete_tag_bulk.yml similarity index 87% rename from config/events/api__project_container_repositories_delete_tag_bulk.yml rename to config/events/202109151015_api__project_container_repositories_delete_tag_bulk.yml index e36f835308b..9a0f6d7f037 100644 --- a/config/events/api__project_container_repositories_delete_tag_bulk.yml +++ b/config/events/202109151015_api__project_container_repositories_delete_tag_bulk.yml @@ -8,11 +8,14 @@ extra_properties: identifiers: product_section: ops product_stage: package -product_group: package +product_group: group::package product_category: milestone: "13.5" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/41846 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/config/events/api__project_container_repositories_list_repositories.yml b/config/events/202109151015_api__project_container_repositories_list_repositories.yml similarity index 87% rename from config/events/api__project_container_repositories_list_repositories.yml rename to config/events/202109151015_api__project_container_repositories_list_repositories.yml index 9c8063891af..d80928f92c9 100644 --- a/config/events/api__project_container_repositories_list_repositories.yml +++ b/config/events/202109151015_api__project_container_repositories_list_repositories.yml @@ -8,11 +8,14 @@ extra_properties: identifiers: product_section: ops product_stage: package -product_group: package +product_group: group::package product_category: milestone: "13.5" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/41846 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/config/events/api__project_container_repositories_list_tags.yml b/config/events/202109151015_api__project_container_repositories_list_tags.yml similarity index 87% rename from config/events/api__project_container_repositories_list_tags.yml rename to config/events/202109151015_api__project_container_repositories_list_tags.yml index 5e269e2d69e..ccac708c0fc 100644 --- a/config/events/api__project_container_repositories_list_tags.yml +++ b/config/events/202109151015_api__project_container_repositories_list_tags.yml @@ -8,11 +8,14 @@ extra_properties: identifiers: product_section: ops product_stage: package -product_group: package +product_group: group::package product_category: milestone: "13.5" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/41846 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/config/events/api__pypi_packages_list_package.yml b/config/events/202109151015_api__pypi_packages_list_package.yml similarity index 86% rename from config/events/api__pypi_packages_list_package.yml rename to config/events/202109151015_api__pypi_packages_list_package.yml index adb9d91bcee..a2382523561 100644 --- a/config/events/api__pypi_packages_list_package.yml +++ b/config/events/202109151015_api__pypi_packages_list_package.yml @@ -8,11 +8,14 @@ extra_properties: identifiers: product_section: ops product_stage: package -product_group: package +product_group: group::package product_category: milestone: "13.5" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/41846 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/config/events/cluster_applications_cluster_application_name.yml b/config/events/202109151015_cluster_applications_cluster_application_name.yml similarity index 87% rename from config/events/cluster_applications_cluster_application_name.yml rename to config/events/202109151015_cluster_applications_cluster_application_name.yml index e993c7ce9f5..bc0196c776d 100644 --- a/config/events/cluster_applications_cluster_application_name.yml +++ b/config/events/202109151015_cluster_applications_cluster_application_name.yml @@ -8,11 +8,14 @@ extra_properties: identifiers: product_section: ops product_stage: monitor -product_group: monitor +product_group: group::monitor product_category: milestone: "12.7" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/23000 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/config/events/cluster_services_prometheus_disabled_manual_prometheus.yml b/config/events/202109151015_cluster_services_prometheus_disabled_manual_prometheus.yml similarity index 94% rename from config/events/cluster_services_prometheus_disabled_manual_prometheus.yml rename to config/events/202109151015_cluster_services_prometheus_disabled_manual_prometheus.yml index 805929b01b6..c98ac8323d4 100644 --- a/config/events/cluster_services_prometheus_disabled_manual_prometheus.yml +++ b/config/events/202109151015_cluster_services_prometheus_disabled_manual_prometheus.yml @@ -14,5 +14,8 @@ milestone: "14.0" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62645 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/config/events/cluster_services_prometheus_enabled_manual_prometheus.yml b/config/events/202109151015_cluster_services_prometheus_enabled_manual_prometheus.yml similarity index 94% rename from config/events/cluster_services_prometheus_enabled_manual_prometheus.yml rename to config/events/202109151015_cluster_services_prometheus_enabled_manual_prometheus.yml index d9377a07cf2..c453b2f035c 100644 --- a/config/events/cluster_services_prometheus_enabled_manual_prometheus.yml +++ b/config/events/202109151015_cluster_services_prometheus_enabled_manual_prometheus.yml @@ -14,5 +14,8 @@ milestone: "14.0" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62645 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/config/events/container_registry_notification_create_repository.yml b/config/events/202109151015_container_registry_notification_create_repository.yml similarity index 88% rename from config/events/container_registry_notification_create_repository.yml rename to config/events/202109151015_container_registry_notification_create_repository.yml index fa455140468..f2063748eca 100644 --- a/config/events/container_registry_notification_create_repository.yml +++ b/config/events/202109151015_container_registry_notification_create_repository.yml @@ -8,11 +8,14 @@ extra_properties: identifiers: product_section: ops product_stage: package -product_group: package +product_group: group::package product_category: milestone: "12.10" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/27001 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/config/events/container_registry_notification_delete_repository.yml b/config/events/202109151015_container_registry_notification_delete_repository.yml similarity index 88% rename from config/events/container_registry_notification_delete_repository.yml rename to config/events/202109151015_container_registry_notification_delete_repository.yml index ceb7c5e4155..f366a101f81 100644 --- a/config/events/container_registry_notification_delete_repository.yml +++ b/config/events/202109151015_container_registry_notification_delete_repository.yml @@ -8,11 +8,14 @@ extra_properties: identifiers: product_section: ops product_stage: package -product_group: package +product_group: group::package product_category: milestone: "12.10" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/27001 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/config/events/container_registry_notification_delete_tag.yml b/config/events/202109151015_container_registry_notification_delete_tag.yml similarity index 87% rename from config/events/container_registry_notification_delete_tag.yml rename to config/events/202109151015_container_registry_notification_delete_tag.yml index 8e33c901e0e..c322972ab50 100644 --- a/config/events/container_registry_notification_delete_tag.yml +++ b/config/events/202109151015_container_registry_notification_delete_tag.yml @@ -8,11 +8,14 @@ extra_properties: identifiers: product_section: ops product_stage: package -product_group: package +product_group: group::package product_category: milestone: "12.10" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/27001 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/config/events/container_registry_notification_push_repository.yml b/config/events/202109151015_container_registry_notification_push_repository.yml similarity index 88% rename from config/events/container_registry_notification_push_repository.yml rename to config/events/202109151015_container_registry_notification_push_repository.yml index 10edf3ceafd..7bdb2b157f2 100644 --- a/config/events/container_registry_notification_push_repository.yml +++ b/config/events/202109151015_container_registry_notification_push_repository.yml @@ -8,11 +8,14 @@ extra_properties: identifiers: product_section: ops product_stage: package -product_group: package +product_group: group::package product_category: milestone: "12.10" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/27001 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/config/events/container_registry_notification_push_tag.yml b/config/events/202109151015_container_registry_notification_push_tag.yml similarity index 87% rename from config/events/container_registry_notification_push_tag.yml rename to config/events/202109151015_container_registry_notification_push_tag.yml index 9679dd4e52f..d250e8b2022 100644 --- a/config/events/container_registry_notification_push_tag.yml +++ b/config/events/202109151015_container_registry_notification_push_tag.yml @@ -8,11 +8,14 @@ extra_properties: identifiers: product_section: ops product_stage: package -product_group: package +product_group: group::package product_category: milestone: "12.10" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/27001 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/config/events/delete_repository_container.yml b/config/events/202109151015_delete_repository_container.yml similarity index 86% rename from config/events/delete_repository_container.yml rename to config/events/202109151015_delete_repository_container.yml index 491cf9a7e4a..162f92ccffd 100644 --- a/config/events/delete_repository_container.yml +++ b/config/events/202109151015_delete_repository_container.yml @@ -8,11 +8,14 @@ extra_properties: identifiers: product_section: ops product_stage: package -product_group: package +product_group: group::package product_category: milestone: "13.6" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/47175 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/config/events/delete_tag_bulk_tag.yml b/config/events/202109151015_delete_tag_bulk_tag.yml similarity index 87% rename from config/events/delete_tag_bulk_tag.yml rename to config/events/202109151015_delete_tag_bulk_tag.yml index feaca98bd38..2757cb48c0c 100644 --- a/config/events/delete_tag_bulk_tag.yml +++ b/config/events/202109151015_delete_tag_bulk_tag.yml @@ -8,11 +8,14 @@ extra_properties: identifiers: product_section: ops product_stage: package -product_group: package +product_group: group::package product_category: milestone: "13.7" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/48617 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/config/events/experiment_name_initial_write.yml b/config/events/202109151015_experiment_name_initial_write.yml similarity index 87% rename from config/events/experiment_name_initial_write.yml rename to config/events/202109151015_experiment_name_initial_write.yml index f2233f7dabb..94f685af02a 100644 --- a/config/events/experiment_name_initial_write.yml +++ b/config/events/202109151015_experiment_name_initial_write.yml @@ -8,11 +8,14 @@ extra_properties: identifiers: product_section: growth product_stage: growth -product_group: adoption +product_group: group::adoption product_category: milestone: "13.12" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/59713 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/config/events/experiment_name_write.yml b/config/events/202109151015_experiment_name_write.yml similarity index 87% rename from config/events/experiment_name_write.yml rename to config/events/202109151015_experiment_name_write.yml index 82b5d18bd91..d4645ecc6ae 100644 --- a/config/events/experiment_name_write.yml +++ b/config/events/202109151015_experiment_name_write.yml @@ -8,11 +8,14 @@ extra_properties: identifiers: product_section: growth product_stage: growth -product_group: adoption +product_group: group::adoption product_category: milestone: "13.12" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/59713 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/config/events/groups__email_campaigns_controller_click.yml b/config/events/202109151015_groups__email_campaigns_controller_click.yml similarity index 86% rename from config/events/groups__email_campaigns_controller_click.yml rename to config/events/202109151015_groups__email_campaigns_controller_click.yml index bbc2abb8707..e758abcce28 100644 --- a/config/events/groups__email_campaigns_controller_click.yml +++ b/config/events/202109151015_groups__email_campaigns_controller_click.yml @@ -8,11 +8,14 @@ extra_properties: identifiers: product_section: growth product_stage: growth -product_group: activation +product_group: group::activation product_category: milestone: "13.11" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/56015 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/config/events/groups__registry__repositories_controller_list_repositories.yml b/config/events/202109151015_groups__registry__repositories_controller_list_repositories.yml similarity index 87% rename from config/events/groups__registry__repositories_controller_list_repositories.yml rename to config/events/202109151015_groups__registry__repositories_controller_list_repositories.yml index 1fafbf75103..23c58662b61 100644 --- a/config/events/groups__registry__repositories_controller_list_repositories.yml +++ b/config/events/202109151015_groups__registry__repositories_controller_list_repositories.yml @@ -8,11 +8,14 @@ extra_properties: identifiers: product_section: ops product_stage: package -product_group: package +product_group: group::package product_category: milestone: "13.5" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/41846 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/config/events/incident_management__zoom_integration_add_zoom_meeting.yml b/config/events/202109151015_incident_management__zoom_integration_add_zoom_meeting.yml similarity index 88% rename from config/events/incident_management__zoom_integration_add_zoom_meeting.yml rename to config/events/202109151015_incident_management__zoom_integration_add_zoom_meeting.yml index 7b9331d3244..6b77ec83275 100644 --- a/config/events/incident_management__zoom_integration_add_zoom_meeting.yml +++ b/config/events/202109151015_incident_management__zoom_integration_add_zoom_meeting.yml @@ -8,11 +8,14 @@ extra_properties: identifiers: product_section: ops product_stage: monitor -product_group: monitor +product_group: group::monitor product_category: milestone: "12.4" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/18620 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/config/events/incident_management__zoom_integration_remove_zoom_meeting.yml b/config/events/202109151015_incident_management__zoom_integration_remove_zoom_meeting.yml similarity index 88% rename from config/events/incident_management__zoom_integration_remove_zoom_meeting.yml rename to config/events/202109151015_incident_management__zoom_integration_remove_zoom_meeting.yml index 5abc1b8bbc7..edf8e7feacd 100644 --- a/config/events/incident_management__zoom_integration_remove_zoom_meeting.yml +++ b/config/events/202109151015_incident_management__zoom_integration_remove_zoom_meeting.yml @@ -8,11 +8,14 @@ extra_properties: identifiers: product_section: ops product_stage: monitor -product_group: monitor +product_group: group::monitor product_category: milestone: "12.4" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/18620 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/config/events/list_repositories_container.yml b/config/events/202109151015_list_repositories_container.yml similarity index 86% rename from config/events/list_repositories_container.yml rename to config/events/202109151015_list_repositories_container.yml index ec3775cb9f8..c17cee5378a 100644 --- a/config/events/list_repositories_container.yml +++ b/config/events/202109151015_list_repositories_container.yml @@ -8,11 +8,14 @@ extra_properties: identifiers: product_section: ops product_stage: package -product_group: package +product_group: group::package product_category: milestone: "13.6" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/44926 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/config/events/notes__create_service_execute.yml b/config/events/202109151015_notes__create_service_execute.yml similarity index 88% rename from config/events/notes__create_service_execute.yml rename to config/events/202109151015_notes__create_service_execute.yml index 39c24f05551..e42e9856cd5 100644 --- a/config/events/notes__create_service_execute.yml +++ b/config/events/202109151015_notes__create_service_execute.yml @@ -8,11 +8,14 @@ extra_properties: identifiers: product_section: ops product_stage: verify -product_group: testing +product_group: group::testing product_category: milestone: "12.5" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/18890 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/config/events/package_class_pull_package.yml b/config/events/202109151015_package_class_pull_package.yml similarity index 86% rename from config/events/package_class_pull_package.yml rename to config/events/202109151015_package_class_pull_package.yml index 2a35ce0dd3a..c4f5ea53f71 100644 --- a/config/events/package_class_pull_package.yml +++ b/config/events/202109151015_package_class_pull_package.yml @@ -8,11 +8,14 @@ extra_properties: identifiers: product_section: ops product_stage: package -product_group: package +product_group: group::package product_category: milestone: "13.5" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/41846 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/config/events/package_class_push_package.yml b/config/events/202109151015_package_class_push_package.yml similarity index 86% rename from config/events/package_class_push_package.yml rename to config/events/202109151015_package_class_push_package.yml index 26945c7cb9e..566ee6a9c8f 100644 --- a/config/events/package_class_push_package.yml +++ b/config/events/202109151015_package_class_push_package.yml @@ -8,11 +8,14 @@ extra_properties: identifiers: product_section: ops product_stage: package -product_group: package +product_group: group::package product_category: milestone: "13.5" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/41846 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/config/events/projects__registry__repositories_controller_delete_repository.yml b/config/events/202109151015_projects__registry__repositories_controller_delete_repository.yml similarity index 87% rename from config/events/projects__registry__repositories_controller_delete_repository.yml rename to config/events/202109151015_projects__registry__repositories_controller_delete_repository.yml index 44c769a03a0..ea27e7d6ae5 100644 --- a/config/events/projects__registry__repositories_controller_delete_repository.yml +++ b/config/events/202109151015_projects__registry__repositories_controller_delete_repository.yml @@ -8,11 +8,14 @@ extra_properties: identifiers: product_section: ops product_stage: package -product_group: package +product_group: group::package product_category: milestone: "13.5" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/41846 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/config/events/projects__registry__repositories_controller_list_repositories.yml b/config/events/202109151015_projects__registry__repositories_controller_list_repositories.yml similarity index 87% rename from config/events/projects__registry__repositories_controller_list_repositories.yml rename to config/events/202109151015_projects__registry__repositories_controller_list_repositories.yml index 6dc67091a9a..6d587cc6a9e 100644 --- a/config/events/projects__registry__repositories_controller_list_repositories.yml +++ b/config/events/202109151015_projects__registry__repositories_controller_list_repositories.yml @@ -8,11 +8,14 @@ extra_properties: identifiers: product_section: ops product_stage: package -product_group: package +product_group: group::package product_category: milestone: "13.5" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/41846 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/config/events/projects__registry__tags_controller_delete_tag.yml b/config/events/202109151015_projects__registry__tags_controller_delete_tag.yml similarity index 87% rename from config/events/projects__registry__tags_controller_delete_tag.yml rename to config/events/202109151015_projects__registry__tags_controller_delete_tag.yml index 73bee5f7318..d2c27320054 100644 --- a/config/events/projects__registry__tags_controller_delete_tag.yml +++ b/config/events/202109151015_projects__registry__tags_controller_delete_tag.yml @@ -8,11 +8,14 @@ extra_properties: identifiers: product_section: ops product_stage: package -product_group: package +product_group: group::package product_category: milestone: "13.5" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/41846 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/config/events/projects__registry__tags_controller_delete_tag_bulk.yml b/config/events/202109151015_projects__registry__tags_controller_delete_tag_bulk.yml similarity index 87% rename from config/events/projects__registry__tags_controller_delete_tag_bulk.yml rename to config/events/202109151015_projects__registry__tags_controller_delete_tag_bulk.yml index 715e3549ed3..7b1c7199843 100644 --- a/config/events/projects__registry__tags_controller_delete_tag_bulk.yml +++ b/config/events/202109151015_projects__registry__tags_controller_delete_tag_bulk.yml @@ -8,11 +8,14 @@ extra_properties: identifiers: product_section: ops product_stage: package -product_group: package +product_group: group::package product_category: milestone: "13.5" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/41846 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/config/events/projects__registry__tags_controller_list_tags.yml b/config/events/202109151015_projects__registry__tags_controller_list_tags.yml similarity index 87% rename from config/events/projects__registry__tags_controller_list_tags.yml rename to config/events/202109151015_projects__registry__tags_controller_list_tags.yml index 5b655ee6c39..b8e18922ffb 100644 --- a/config/events/projects__registry__tags_controller_list_tags.yml +++ b/config/events/202109151015_projects__registry__tags_controller_list_tags.yml @@ -8,11 +8,14 @@ extra_properties: identifiers: product_section: ops product_stage: package -product_group: package +product_group: group::package product_category: milestone: "13.5" introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/41846 distributions: - ce +- ee tiers: - free +- premium +- ultimate diff --git a/danger/ci_templates/Dangerfile b/danger/ci_templates/Dangerfile index fcd9080e7d1..3d57436ef94 100644 --- a/danger/ci_templates/Dangerfile +++ b/danger/ci_templates/Dangerfile @@ -17,7 +17,7 @@ MSG return unless helper.ci? -template_paths_to_review = project_helper.changes_by_category[:ci_template] +template_paths_to_review = helper.changes_by_category[:ci_template] if gitlab.mr_labels.include?('ci::templates') || template_paths_to_review.any? message 'This merge request adds or changes files that require a ' \ diff --git a/danger/database/Dangerfile b/danger/database/Dangerfile index 70adbb4c139..b4e06c21fe4 100644 --- a/danger/database/Dangerfile +++ b/danger/database/Dangerfile @@ -51,7 +51,7 @@ end return unless helper.ci? return if gitlab.mr_labels.include?(DATABASE_APPROVED_LABEL) -db_paths_to_review = project_helper.changes_by_category[:database] +db_paths_to_review = helper.changes_by_category[:database] if gitlab.mr_labels.include?('database') || db_paths_to_review.any? message 'This merge request adds or changes files that require a ' \ diff --git a/danger/documentation/Dangerfile b/danger/documentation/Dangerfile index 01ef5dbb49e..918c787075e 100644 --- a/danger/documentation/Dangerfile +++ b/danger/documentation/Dangerfile @@ -13,7 +13,7 @@ For more information, see: - The [definition of done](https://docs.gitlab.com/ee/development/contributing/merge_request_workflow.html#definition-of-done) documentation. MSG -docs_paths_to_review = project_helper.changes_by_category[:docs] +docs_paths_to_review = helper.changes_by_category[:docs] # Documentation should be updated for feature::addition and feature::enhancement if docs_paths_to_review.empty? diff --git a/danger/product_intelligence/Dangerfile b/danger/product_intelligence/Dangerfile index eedb9b89d22..1c0c918dbfc 100644 --- a/danger/product_intelligence/Dangerfile +++ b/danger/product_intelligence/Dangerfile @@ -12,7 +12,7 @@ For MR review guidelines, see the [Service Ping review guidelines](https://docs. MSG # exit if not matching files or if no product intelligence labels -product_intelligence_paths_to_review = project_helper.changes_by_category[:product_intelligence] +product_intelligence_paths_to_review = helper.changes_by_category[:product_intelligence] labels_to_add = product_intelligence.missing_labels return if product_intelligence_paths_to_review.empty? || labels_to_add.empty? diff --git a/danger/roulette/Dangerfile b/danger/roulette/Dangerfile index 6b0c196dc5d..cdea635e808 100644 --- a/danger/roulette/Dangerfile +++ b/danger/roulette/Dangerfile @@ -89,7 +89,7 @@ def markdown_row_for_spins(category, spins_array) "| #{helper.label_for_category(category)} | #{reviewer_note} | #{maintainer_note} |" end -changes = project_helper.changes_by_category +changes = helper.changes_by_category # Ignore any files that are known but uncategorized. Prompt for any unknown files changes.delete(:none) @@ -114,9 +114,7 @@ categories << :product_intelligence if helper.mr_labels.include?("product intell categories.delete(:product_intelligence) unless helper.mr_labels.include?("growth experiment") if changes.any? - project = project_helper.project_name - - random_roulette_spins = roulette.spin(project, categories, timezone_experiment: false) + random_roulette_spins = roulette.spin(nil, categories, timezone_experiment: false) rows = random_roulette_spins.map do |spin| markdown_row_for_spins(spin.category, [spin]) diff --git a/danger/specialization_labels/Dangerfile b/danger/specialization_labels/Dangerfile index 24a759cddc8..cb4c8c96f4f 100644 --- a/danger/specialization_labels/Dangerfile +++ b/danger/specialization_labels/Dangerfile @@ -14,7 +14,7 @@ SPECIALIZATIONS = { feature_flag: 'feature flag' }.freeze -labels_to_add = project_helper.changes_by_category.each_with_object([]) do |(category, _changes), memo| +labels_to_add = helper.changes_by_category.each_with_object([]) do |(category, _changes), memo| label = SPECIALIZATIONS[category] next unless label next if gitlab.mr_labels.include?(label) diff --git a/danger/specs/Dangerfile b/danger/specs/Dangerfile index 067fb62807a..c4f609f5806 100644 --- a/danger/specs/Dangerfile +++ b/danger/specs/Dangerfile @@ -50,7 +50,7 @@ if has_ee_app_changes && has_spec_changes && !(has_app_changes || has_ee_spec_ch end # Forbidding a new file addition under `/spec/controllers` or `/ee/spec/controllers` -if project_helper.changes.added.files.grep(%r{^(ee/)?spec/controllers/}).any? +if helper.changes.added.files.grep(%r{^(ee/)?spec/controllers/}).any? warn CONTROLLER_SPEC_DEPRECATION_MESSAGE end diff --git a/doc/administration/audit_events.md b/doc/administration/audit_events.md index 11790e3a58e..7c597bd5f0f 100644 --- a/doc/administration/audit_events.md +++ b/doc/administration/audit_events.md @@ -208,7 +208,7 @@ Events visible in Audit Events views until more events are logged. ### "Deleted User" events -Audit events can be created for a user after the user is deleted. The user name associated with the event is set to +Audit events can be created for a user after the user is deleted. The user name associated with the event is set to "Deleted User" because the actual user name is unknowable. For example, if a deleted user's access to a project is removed automatically due to expiration, the audit event is created for "Deleted User". We are [investigating](https://gitlab.com/gitlab-org/gitlab/-/issues/343933) whether this is avoidable. diff --git a/doc/administration/auth/ldap/index.md b/doc/administration/auth/ldap/index.md index d2a783972dc..f551c362784 100644 --- a/doc/administration/auth/ldap/index.md +++ b/doc/administration/auth/ldap/index.md @@ -23,7 +23,7 @@ Users added through LDAP: - Take a [licensed seat](../../../subscriptions/self_managed/index.md#billable-users). - Can authenticate with Git using either their GitLab username or their email and LDAP password, - even if password authentication for Git + even if password authentication for Git [is disabled](../../../user/admin_area/settings/sign_in_restrictions.md#password-authentication-enabled). The LDAP DN is associated with existing GitLab users when: @@ -41,7 +41,7 @@ If an existing GitLab user wants to enable LDAP sign-in for themselves, they sho GitLab has multiple mechanisms to verify a user is still active in LDAP. If the user is no longer active in LDAP, they are placed in an `ldap_blocked` status and are signed out. They are unable to sign in using any authentication provider until they are -reactivated in LDAP. +reactivated in LDAP. Users are considered inactive in LDAP when they: diff --git a/doc/administration/geo/replication/version_specific_updates.md b/doc/administration/geo/replication/version_specific_updates.md index 1b22a5f0991..c65cbb0b3ad 100644 --- a/doc/administration/geo/replication/version_specific_updates.md +++ b/doc/administration/geo/replication/version_specific_updates.md @@ -50,7 +50,7 @@ If you are running a version prior to 14.1 and are using Geo and multi-arch cont ### Geo Admin Area shows 'Unhealthy' after enabling Maintenance Mode -GitLab 13.9 through GitLab 14.3 are affected by a bug in which enabling [GitLab Maintenance Mode](../../maintenance_mode/index.md) will cause Geo secondary site statuses to appear to stop updating and become unhealthy. For more information, see [Troubleshooting - Geo Admin Area shows 'Unhealthy' after enabling Maintenance Mode](troubleshooting.md#geo-admin-area-shows-unhealthy-after-enabling-maintenance-mode). +GitLab 13.9 through GitLab 14.3 are affected by a bug in which enabling [GitLab Maintenance Mode](../../maintenance_mode/index.md) causes Geo secondary site statuses to appear to stop updating and become unhealthy. For more information, see [Troubleshooting - Geo Admin Area shows 'Unhealthy' after enabling Maintenance Mode](troubleshooting.md#geo-admin-area-shows-unhealthy-after-enabling-maintenance-mode). ## Updating to GitLab 14.0/14.1 @@ -64,7 +64,7 @@ If you are running an affected version and need to remove your Primary site, you ### Geo Admin Area shows 'Unhealthy' after enabling Maintenance Mode -GitLab 13.9 through GitLab 14.3 are affected by a bug in which enabling [GitLab Maintenance Mode](../../maintenance_mode/index.md) will cause Geo secondary site statuses to appear to stop updating and become unhealthy. For more information, see [Troubleshooting - Geo Admin Area shows 'Unhealthy' after enabling Maintenance Mode](troubleshooting.md#geo-admin-area-shows-unhealthy-after-enabling-maintenance-mode). +GitLab 13.9 through GitLab 14.3 are affected by a bug in which enabling [GitLab Maintenance Mode](../../maintenance_mode/index.md) causes Geo secondary site statuses to appear to stop updating and become unhealthy. For more information, see [Troubleshooting - Geo Admin Area shows 'Unhealthy' after enabling Maintenance Mode](troubleshooting.md#geo-admin-area-shows-unhealthy-after-enabling-maintenance-mode). ## Updating to GitLab 13.12 @@ -90,7 +90,7 @@ Geo::LfsObjectRegistry.where(state: 0, success: true).update_all(state: 2) ### Geo Admin Area shows 'Unhealthy' after enabling Maintenance Mode -GitLab 13.9 through GitLab 14.3 are affected by a bug in which enabling [GitLab Maintenance Mode](../../maintenance_mode/index.md) will cause Geo secondary site statuses to appear to stop updating and become unhealthy. For more information, see [Troubleshooting - Geo Admin Area shows 'Unhealthy' after enabling Maintenance Mode](troubleshooting.md#geo-admin-area-shows-unhealthy-after-enabling-maintenance-mode). +GitLab 13.9 through GitLab 14.3 are affected by a bug in which enabling [GitLab Maintenance Mode](../../maintenance_mode/index.md) causes Geo secondary site statuses to appear to stop updating and become unhealthy. For more information, see [Troubleshooting - Geo Admin Area shows 'Unhealthy' after enabling Maintenance Mode](troubleshooting.md#geo-admin-area-shows-unhealthy-after-enabling-maintenance-mode). ## Updating to GitLab 13.11 @@ -98,20 +98,20 @@ We found an [issue with Git clone/pull through HTTP(s)](https://gitlab.com/gitla ### Geo Admin Area shows 'Unhealthy' after enabling Maintenance Mode -GitLab 13.9 through GitLab 14.3 are affected by a bug in which enabling [GitLab Maintenance Mode](../../maintenance_mode/index.md) will cause Geo secondary site statuses to appear to stop updating and become unhealthy. For more information, see [Troubleshooting - Geo Admin Area shows 'Unhealthy' after enabling Maintenance Mode](troubleshooting.md#geo-admin-area-shows-unhealthy-after-enabling-maintenance-mode). +GitLab 13.9 through GitLab 14.3 are affected by a bug in which enabling [GitLab Maintenance Mode](../../maintenance_mode/index.md) causes Geo secondary site statuses to appear to stop updating and become unhealthy. For more information, see [Troubleshooting - Geo Admin Area shows 'Unhealthy' after enabling Maintenance Mode](troubleshooting.md#geo-admin-area-shows-unhealthy-after-enabling-maintenance-mode). ## Updating to GitLab 13.10 ### Geo Admin Area shows 'Unhealthy' after enabling Maintenance Mode -GitLab 13.9 through GitLab 14.3 are affected by a bug in which enabling [GitLab Maintenance Mode](../../maintenance_mode/index.md) will cause Geo secondary site statuses to appear to stop updating and become unhealthy. For more information, see [Troubleshooting - Geo Admin Area shows 'Unhealthy' after enabling Maintenance Mode](troubleshooting.md#geo-admin-area-shows-unhealthy-after-enabling-maintenance-mode). +GitLab 13.9 through GitLab 14.3 are affected by a bug in which enabling [GitLab Maintenance Mode](../../maintenance_mode/index.md) causes Geo secondary site statuses to appear to stop updating and become unhealthy. For more information, see [Troubleshooting - Geo Admin Area shows 'Unhealthy' after enabling Maintenance Mode](troubleshooting.md#geo-admin-area-shows-unhealthy-after-enabling-maintenance-mode). ## Updating to GitLab 13.9 ### Error during zero-downtime update: "cannot drop column asset_proxy_whitelist" We've detected an issue [with a column rename](https://gitlab.com/gitlab-org/gitlab/-/issues/324160) -that will prevent upgrades to GitLab 13.9.0, 13.9.1, 13.9.2 and 13.9.3 when following the zero-downtime steps. It is necessary +that prevents upgrades to GitLab 13.9.0, 13.9.1, 13.9.2 and 13.9.3 when following the zero-downtime steps. It is necessary to perform the following additional steps for the zero-downtime update: 1. Before running the final `sudo gitlab-rake db:migrate` command on the deploy node, @@ -132,7 +132,7 @@ to perform the following additional steps for the zero-downtime update: ``` If you have already run the final `sudo gitlab-rake db:migrate` command on the deploy node and have -encountered the [column rename issue](https://gitlab.com/gitlab-org/gitlab/-/issues/324160), you will +encountered the [column rename issue](https://gitlab.com/gitlab-org/gitlab/-/issues/324160), you might see the following error: ```shell @@ -148,7 +148,7 @@ More details are available [in this issue](https://gitlab.com/gitlab-org/gitlab/ ### Geo Admin Area shows 'Unhealthy' after enabling Maintenance Mode -GitLab 13.9 through GitLab 14.3 are affected by a bug in which enabling [GitLab Maintenance Mode](../../maintenance_mode/index.md) will cause Geo secondary site statuses to appear to stop updating and become unhealthy. For more information, see [Troubleshooting - Geo Admin Area shows 'Unhealthy' after enabling Maintenance Mode](troubleshooting.md#geo-admin-area-shows-unhealthy-after-enabling-maintenance-mode). +GitLab 13.9 through GitLab 14.3 are affected by a bug in which enabling [GitLab Maintenance Mode](../../maintenance_mode/index.md) causes Geo secondary site statuses to appear to stop updating and become unhealthy. For more information, see [Troubleshooting - Geo Admin Area shows 'Unhealthy' after enabling Maintenance Mode](troubleshooting.md#geo-admin-area-shows-unhealthy-after-enabling-maintenance-mode). ## Updating to GitLab 13.7 @@ -168,7 +168,7 @@ on Geo secondaries. This issue is fixed in GitLab 13.6.1 and later. In GitLab 13.3, Geo removed the PostgreSQL [Foreign Data Wrapper](https://www.postgresql.org/docs/11/postgres-fdw.html) dependency for the tracking database. -The FDW server, user, and the extension will be removed during the upgrade +The FDW server, user, and the extension is removed during the upgrade process on each secondary node. The GitLab settings related to the FDW in the `/etc/gitlab/gitlab.rb` have been deprecated and can be safely removed. diff --git a/doc/administration/geo/secondary_proxy/index.md b/doc/administration/geo/secondary_proxy/index.md index 0f5f60fcd8e..a7a6c5056b2 100644 --- a/doc/administration/geo/secondary_proxy/index.md +++ b/doc/administration/geo/secondary_proxy/index.md @@ -68,7 +68,7 @@ a single URL used by all Geo sites, including the primary. In the Geo administration page of the **primary** site, edit each Geo secondary that is using the secondary proxying and set the `URL` field to the single URL. Make sure the primary site is also using this URL. - + ## Disable Geo proxying You can disable the secondary proxying on each Geo site, separately, by following these steps with Omnibus-based packages: diff --git a/doc/administration/instance_limits.md b/doc/administration/instance_limits.md index 942bc0af8dd..12dd7e459bf 100644 --- a/doc/administration/instance_limits.md +++ b/doc/administration/instance_limits.md @@ -551,7 +551,7 @@ Plan.default.actual_limits.update!(pages_file_entries: 100) > - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/321368) in GitLab 13.12. Disabled by default. > - Enabled on GitLab.com in GitLab 14.3. > - Enabled on self-managed in GitLab 14.4. -> - Feature flag `ci_runner_limits` removed in GitLab 14.4. +> - Feature flag `ci_runner_limits` removed in GitLab 14.4. > - Feature flag `ci_runner_limits_override` removed in GitLab 14.6. The total number of registered runners is limited at the group and project levels. Each time a new runner is registered, diff --git a/doc/administration/package_information/deprecation_policy.md b/doc/administration/package_information/deprecation_policy.md index d45c2ea3127..164c0eb5c07 100644 --- a/doc/administration/package_information/deprecation_policy.md +++ b/doc/administration/package_information/deprecation_policy.md @@ -16,18 +16,18 @@ setup, various configuration requires removal. ### Policy -The Omnibus GitLab package will retain configuration for at least **one major** -version. We cannot guarantee that deprecated configuration -will be available in the next major release. See [example](#example) for more details. +The Omnibus GitLab package retains configuration for at least **one major** +version. We can't guarantee that deprecated configuration +is available in the next major release. See [example](#example) for more details. ### Notice -If the configuration becomes obsolete, we will announce the deprecation: +If the configuration becomes obsolete, we announce the deprecation: - via release blog post on `https://about.gitlab.com/blog/`. The blog post item - will contain the deprecation notice together with the target removal date. + contains the deprecation notice together with the target removal date. - via installation/reconfigure output (if applicable). -- via official documentation on `https://docs.gitlab.com/`. The documentation update will contain the corrected syntax (if applicable) or a date of configuration removal. +- via official documentation on `https://docs.gitlab.com/`. The documentation update contains the corrected syntax (if applicable) or a date of configuration removal. ### Procedure @@ -82,16 +82,16 @@ The final comment in the issue **has to have**: ## Example -User configuration available in `/etc/gitlab/gitlab.rb` was introduced in GitLab version 10.0, `gitlab_rails['configuration'] = true`. In GitLab version 10.4.0, a new change was introduced that requires rename of this configuration option. New configuration option is `gitlab_rails['better_configuration'] = true`. Development team will translate the old configuration into new one -and trigger a deprecation procedure. +User configuration available in `/etc/gitlab/gitlab.rb` was introduced in GitLab version 10.0, `gitlab_rails['configuration'] = true`. In GitLab version 10.4.0, a new change was introduced that requires rename of this configuration option. New configuration option is `gitlab_rails['better_configuration'] = true`. Development team translates the old configuration into a new one +and triggers a deprecation procedure. This means that these two configuration -options will both be valid through GitLab version 10. In other words, +options are valid through GitLab version 10. In other words, if you still have `gitlab_rails['configuration'] = true` set in GitLab 10.8.0 -the feature will continue working the same way as if you had `gitlab_rails['better_configuration'] = true` set. -However, setting the old version of configuration will print out a deprecation +the feature continues working the same way as if you had `gitlab_rails['better_configuration'] = true` set. +However, setting the old version of the configuration prints out a deprecation notice at the end of installation/upgrade/reconfigure run. -With GitLab 11, `gitlab_rails['configuration'] = true` will no longer work and you will have to manually change the configuration in `/etc/gitlab/gitlab.rb` to the new valid configuration. +In GitLab 11, `gitlab_rails['configuration'] = true` no longer works and you must manually change the configuration in `/etc/gitlab/gitlab.rb` to the new valid configuration. **Note** If this configuration option is sensitive and can put integrity of the installation or -data in danger, installation/upgrade will be aborted. +data in danger,the installation or upgrade is aborted. diff --git a/doc/administration/repository_storage_types.md b/doc/administration/repository_storage_types.md index a85f678fe95..f33d494f638 100644 --- a/doc/administration/repository_storage_types.md +++ b/doc/administration/repository_storage_types.md @@ -101,10 +101,10 @@ To look up a project's hash path using a Rails console: #### From hashed path to project name -Administrators can look up a project's name from its hashed storage path using: +Administrators can look up a project's name from its hashed storage path using: - A Rails console. -- The `config` file in the `*.git` directory. +- The `config` file in the `*.git` directory. To look up a project's name using the Rails console: diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md index 36b56054c8d..b4f69b379ee 100644 --- a/doc/api/graphql/reference/index.md +++ b/doc/api/graphql/reference/index.md @@ -8687,7 +8687,7 @@ Represents the total number of issues and their weights for a particular day. | `needs` | [`CiBuildNeedConnection`](#cibuildneedconnection) | References to builds that must complete before the jobs run. (see [Connections](#connections)) | | `pipeline` | [`Pipeline`](#pipeline) | Pipeline the job belongs to. | | `playable` | [`Boolean!`](#boolean) | Indicates the job can be played. | -| `previousStageJobsAndNeeds` | [`CiJobConnection`](#cijobconnection) | All prerequisite jobs. (see [Connections](#connections)) | +| `previousStageJobsOrNeeds` | [`CiJobConnection`](#cijobconnection) | Jobs that must complete before the job runs. Returns needed jobs if the job uses the `needs` keyword, and returns previous stage jobs otherwise. (see [Connections](#connections)) | | `queuedAt` | [`Time`](#time) | When the job was enqueued and marked as pending. | | `queuedDuration` | [`Duration`](#duration) | How long the job was enqueued before starting. | | `refName` | [`String`](#string) | Ref name of the job. | diff --git a/doc/api/members.md b/doc/api/members.md index 51f7b74f110..2e2b403eea1 100644 --- a/doc/api/members.md +++ b/doc/api/members.md @@ -596,9 +596,9 @@ curl --request DELETE --header "PRIVATE-TOKEN: " "https://git curl --request DELETE --header "PRIVATE-TOKEN: " "https://gitlab.example.com/api/v4/projects/:id/members/:user_id" ``` -## Approve a member for a group +## Approve a member for a group -Approves a pending user for a group and its subgroups and projects. +Approves a pending user for a group and its subgroups and projects. ```plaintext PUT /groups/:id/members/:user_id/approve @@ -615,7 +615,7 @@ Example request: curl --request PUT --header "PRIVATE-TOKEN: " "https://gitlab.example.com/api/v4/groups/:id/members/:user_id/approve" ``` -## Approve all pending members for a group +## Approve all pending members for a group Approves all pending users for a group and its subgroups and projects. diff --git a/doc/api/projects.md b/doc/api/projects.md index 19a4b3d3224..9d7566f6967 100644 --- a/doc/api/projects.md +++ b/doc/api/projects.md @@ -1072,7 +1072,7 @@ If the project is a fork, and you provide a valid token to authenticate, the "ssh_url_to_repo":"git@gitlab.com:gitlab-org/gitlab-foss.git", "http_url_to_repo":"https://gitlab.com/gitlab-org/gitlab-foss.git", "web_url":"https://gitlab.com/gitlab-org/gitlab-foss", - "avatar_url":"https://assets.gitlab-static.net/uploads/-/system/project/avatar/13083/logo-extra-whitespace.png", + "avatar_url":"https://gitlab.com/uploads/-/system/project/avatar/13083/logo-extra-whitespace.png", "license_url": "https://gitlab.com/gitlab-org/gitlab/-/blob/master/LICENSE", "license": { "key": "mit", diff --git a/doc/ci/environments/protected_environments.md b/doc/ci/environments/protected_environments.md index 5ea603e0b7c..57fd72863c1 100644 --- a/doc/ci/environments/protected_environments.md +++ b/doc/ci/environments/protected_environments.md @@ -79,7 +79,7 @@ Alternatively, you can use the API to protect an environment: $ curl --request POST --header "PRIVATE-TOKEN: " \ --data "user_id=3222377&access_level=20" "https://gitlab.com/api/v4/groups/9899826/members" - {"id":3222377,"name":"Sean Carroll","username":"sfcarroll","state":"active","avatar_url":"https://assets.gitlab-static.net/uploads/-/system/user/avatar/3222377/avatar.png","web_url":"https://gitlab.com/sfcarroll","access_level":20,"created_at":"2020-10-26T17:37:50.309Z","expires_at":null} + {"id":3222377,"name":"Sean Carroll","username":"sfcarroll","state":"active","avatar_url":"https://gitlab.com/uploads/-/system/user/avatar/3222377/avatar.png","web_url":"https://gitlab.com/sfcarroll","access_level":20,"created_at":"2020-10-26T17:37:50.309Z","expires_at":null} ``` 1. Use the API to add the group to the project as a reporter: diff --git a/doc/ci/git_submodules.md b/doc/ci/git_submodules.md index dc5faf0188e..2a002b8fb9f 100644 --- a/doc/ci/git_submodules.md +++ b/doc/ci/git_submodules.md @@ -59,7 +59,7 @@ To make submodules work correctly in CI/CD jobs: variables: GIT_SUBMODULE_STRATEGY: recursive ``` - + If you use the [`CI_JOB_TOKEN`](jobs/ci_job_token.md) to clone a submodule in a pipeline job, the user executing the job must be assigned to a role that has [permission](../user/permissions.md#gitlab-cicd-permissions) to trigger a pipeline diff --git a/doc/ci/pipelines/merge_trains.md b/doc/ci/pipelines/merge_trains.md index be267ec1da1..f9e4f3fbdea 100644 --- a/doc/ci/pipelines/merge_trains.md +++ b/doc/ci/pipelines/merge_trains.md @@ -39,7 +39,7 @@ If the pipeline for the merge request at the front of the train completes succes the changes are merged into the target branch, and the other pipelines continue to run. -To add a merge request to a merge train, you need [permissions](../../user/permissions.md) to merge or push to the +To add a merge request to a merge train, you need [permissions](../../user/permissions.md) to merge or push to the target branch. Each merge train can run a maximum of **twenty** pipelines in parallel. diff --git a/doc/development/adding_database_indexes.md b/doc/development/adding_database_indexes.md index 571d2f353d4..0e8e8289464 100644 --- a/doc/development/adding_database_indexes.md +++ b/doc/development/adding_database_indexes.md @@ -317,11 +317,11 @@ end You must test the database index changes locally before creating a merge request. -### Verify indexes created asynchronously +### Verify indexes created asynchronously Use the asynchronous index helpers on your local environment to test changes for creating an index: 1. Enable the feature flags by running `Feature.enable(:database_async_index_creation)` and `Feature.enable(:database_reindexing)` in the Rails console. 1. Run `bundle exec rails db:migrate` so that it creates an entry in the `postgres_async_indexes` table. 1. Run `bundle exec rails gitlab:db:reindex` so that the index is created asynchronously. -1. To verify the index, open the PostgreSQL console using the [GDK](https://gitlab.com/gitlab-org/gitlab-development-kit/-/blob/main/doc/howto/postgresql.md) command `gdk psql` and run the command `\d ` to check that your newly created index exists. +1. To verify the index, open the PostgreSQL console using the [GDK](https://gitlab.com/gitlab-org/gitlab-development-kit/-/blob/main/doc/howto/postgresql.md) command `gdk psql` and run the command `\d ` to check that your newly created index exists. diff --git a/doc/development/contributing/merge_request_workflow.md b/doc/development/contributing/merge_request_workflow.md index 82fd62d8d79..cc6997e1a20 100644 --- a/doc/development/contributing/merge_request_workflow.md +++ b/doc/development/contributing/merge_request_workflow.md @@ -100,7 +100,7 @@ request is as follows: There isn't a way to know anything about our customers' data on their [self-managed instances](../../subscriptions/self_managed/index.md), so keep that in mind for any data implications with your merge request. - + 1. Merge requests **must** adhere to the [merge request performance guidelines](../merge_request_performance_guidelines.md). 1. For tests that use Capybara, read [how to write reliable, asynchronous integration tests](https://thoughtbot.com/blog/write-reliable-asynchronous-integration-tests-with-capybara). diff --git a/doc/development/fe_guide/vue.md b/doc/development/fe_guide/vue.md index 5d5d37e0398..ab808e6f1b7 100644 --- a/doc/development/fe_guide/vue.md +++ b/doc/development/fe_guide/vue.md @@ -73,7 +73,7 @@ component, is that you avoid the need to create a fixture or an HTML element in ##### provide/inject Vue supports dependency injection through [provide/inject](https://vuejs.org/v2/api/#provide-inject). -In the component the `inject` configuration accesses the values `provide` passes down. +In the component the `inject` configuration accesses the values `provide` passes down. This example of a Vue app initialization shows how the `provide` configuration passes a value from HAML to the component: ```javascript diff --git a/doc/development/fe_guide/vue3_migration.md b/doc/development/fe_guide/vue3_migration.md index c6f480deb22..2b783eb21b7 100644 --- a/doc/development/fe_guide/vue3_migration.md +++ b/doc/development/fe_guide/vue3_migration.md @@ -31,7 +31,7 @@ Component's computed properties / methods or external helpers. **When to use** -If you are in a Vue app that doesn't use any event hub, try to avoid adding a new one unless absolutely necessary. For example, if you need a child component to react to its parent's event, it's preferred to pass a prop down. Then, use the watch property on that prop in the child component to create the desired side effect. +If you are in a Vue app that doesn't use any event hub, try to avoid adding a new one unless absolutely necessary. For example, if you need a child component to react to its parent's event, it's preferred to pass a prop down. Then, use the watch property on that prop in the child component to create the desired side effect. If you need cross-component communication (between different Vue apps), then perhaps introducing a hub is the right decision. diff --git a/doc/development/image_scaling.md b/doc/development/image_scaling.md index 82ca8cf8e83..e1ffbdb766a 100644 --- a/doc/development/image_scaling.md +++ b/doc/development/image_scaling.md @@ -37,8 +37,8 @@ Furthermore, configuration in Workhorse can lead to the image scaler rejecting a For instance, here are two different URLs that serve the GitLab project avatar both in its original size and scaled down to 64 pixels. Only the second request will trigger the image scaler: -- [`/uploads/-/system/project/avatar/278964/logo-extra-whitespace.png`](https://assets.gitlab-static.net/uploads/-/system/project/avatar/278964/logo-extra-whitespace.png) -- [`/uploads/-/system/project/avatar/278964/logo-extra-whitespace.png?width=64`](https://assets.gitlab-static.net/uploads/-/system/project/avatar/278964/logo-extra-whitespace.png?width=64) +- [`/uploads/-/system/project/avatar/278964/logo-extra-whitespace.png`](https://gitlab.com/uploads/-/system/project/avatar/278964/logo-extra-whitespace.png) +- [`/uploads/-/system/project/avatar/278964/logo-extra-whitespace.png?width=64`](https://gitlab.com/uploads/-/system/project/avatar/278964/logo-extra-whitespace.png?width=64) ## Where do we scale images? diff --git a/doc/development/service_ping/implement.md b/doc/development/service_ping/implement.md index b38696263b4..c32789740c3 100644 --- a/doc/development/service_ping/implement.md +++ b/doc/development/service_ping/implement.md @@ -27,7 +27,7 @@ To implement a new metric in Service Ping, follow these steps: 1. [Set up and test Service Ping locally](#set-up-and-test-service-ping-locally) NOTE: -When you add or change a Service Metric, you must migrate metrics to [instrumentation classes](metrics_instrumentation.md). +When you add or change a Service Metric, you must migrate metrics to [instrumentation classes](metrics_instrumentation.md). For information about the progress on migrating Service ping metrics, see this [epic](https://gitlab.com/groups/gitlab-org/-/epics/5547). ## Instrumentation classes diff --git a/doc/development/service_ping/index.md b/doc/development/service_ping/index.md index 0b8bc42276c..1f751eea4d8 100644 --- a/doc/development/service_ping/index.md +++ b/doc/development/service_ping/index.md @@ -21,7 +21,7 @@ and sales teams understand how GitLab is used. The data helps to: Service Ping information is not anonymous. It's linked to the instance's hostname, but does not contain project names, usernames, or any other specific data. -Sending a Service Ping payload is optional and you can [disable](#disable-service-ping) it on any +Sending a Service Ping payload is optional and you can [disable](#disable-service-ping) it on any self-managed instance. When Service Ping is enabled, GitLab gathers data from the other instances and can show your instance's usage statistics to your users. @@ -41,10 +41,10 @@ We use the following terminology to describe the Service Ping components: The main purpose of Service Ping is to build a better GitLab. We collect data about how GitLab is used to understand feature or stage adoption and usage. This data gives an insight into how GitLab adds -value and helps our team understand the reasons why people use GitLab, and with this knowledge we're able to +value and helps our team understand the reasons why people use GitLab, and with this knowledge we're able to make better product decisions. -There are several other benefits to enabling Service Ping: +There are several other benefits to enabling Service Ping: - As a benefit of having Service Ping active, GitLab lets you analyze the users' activities over time of your GitLab installation. - As a benefit of having Service Ping active, GitLab provides you with [DevOps Score](../../user/admin_area/analytics/dev_ops_report.md#devops-score), which gives you an overview of your entire instance's adoption of Concurrent DevOps from planning to monitoring. diff --git a/doc/development/sidekiq_style_guide.md b/doc/development/sidekiq_style_guide.md index f4fe80ad15e..a643b89b7ff 100644 --- a/doc/development/sidekiq_style_guide.md +++ b/doc/development/sidekiq_style_guide.md @@ -354,7 +354,7 @@ This way we are always comparing the latest binary replication pointer, making sure that we read from the replica that is fully caught up. FLAG: -On self-managed GitLab, by default this feature is available. To hide the feature, ask an administrator to +On self-managed GitLab, by default this feature is available. To hide the feature, ask an administrator to [disable the feature flag](../administration/feature_flags.md) named preserve_latest_wal_locations_for_idempotent_jobs flag. This feature flag is related to GitLab development and is not intended to be used by GitLab administrators, though. diff --git a/doc/development/snowplow/implementation.md b/doc/development/snowplow/implementation.md index fe1de789eae..3ffacc5af67 100644 --- a/doc/development/snowplow/implementation.md +++ b/doc/development/snowplow/implementation.md @@ -13,12 +13,12 @@ This page describes how to: ## Snowplow JavaScript frontend tracking -GitLab provides a `Tracking` interface that wraps the [Snowplow JavaScript tracker](https://docs.snowplowanalytics.com/docs/collecting-data/collecting-from-own-applications/javascript-trackers/) -to track custom events. +GitLab provides a `Tracking` interface that wraps the [Snowplow JavaScript tracker](https://docs.snowplowanalytics.com/docs/collecting-data/collecting-from-own-applications/javascript-trackers/) +to track custom events. For the recommended frontend tracking implementation, see [Usage recommendations](#usage-recommendations). -Tracking implementations must have an `action` and a `category`. You can provide additional +Tracking implementations must have an `action` and a `category`. You can provide additional categories from the [structured event taxonomy](index.md#structured-event-taxonomy) with an `extra` object that accepts key-value pairs. @@ -67,8 +67,8 @@ The following example shows `data-track-*` attributes assigned to a button: #### Event listeners Event listeners bind at the document level to handle click events in elements with data attributes. -This allows them to be handled when the DOM re-renders or changes. Document-level binding reduces -the likelihood that click events stop propagating up the DOM tree. +This allows them to be handled when the DOM re-renders or changes. Document-level binding reduces +the likelihood that click events stop propagating up the DOM tree. If click events stop propagating, you must implement listeners and [Vue component tracking](#implement-vue-component-tracking) or [raw JavaScript tracking](#implement-raw-javascript-tracking). @@ -102,12 +102,12 @@ track_action: "click_button" }) ### Implement Vue component tracking For custom event tracking, use a Vue `mixin` in components. Vue `mixin` exposes the `Tracking.event` -static method and the `track` method. You can specify tracking options in `data` or `computed`. -These options override any defaults and allow the values to be dynamic from props or based on state. +static method and the `track` method. You can specify tracking options in `data` or `computed`. +These options override any defaults and allow the values to be dynamic from props or based on state. -Several default options are passed when an event is tracked from the component: +Several default options are passed when an event is tracked from the component: -- `category`: If you don't specify, by default `document.body.dataset.page` is used. +- `category`: If you don't specify, by default `document.body.dataset.page` is used. - `label` - `property` - `value` @@ -121,7 +121,7 @@ To implement Vue component tracking: const trackingMixin = Tracking.mixin; ``` -1. Provide categories to track the event from the component. For example, to track all events in a +1. Provide categories to track the event from the component. For example, to track all events in a component with a label, use the `label` category: ```javascript @@ -293,14 +293,14 @@ describe('MyTracking', () => { ### Form tracking -To enable Snowplow automatic [form tracking](https://docs.snowplowanalytics.com/docs/collecting-data/collecting-from-own-applications/javascript-trackers/javascript-tracker/javascript-tracker-v2/tracking-specific-events/#form-tracking): +To enable Snowplow automatic [form tracking](https://docs.snowplowanalytics.com/docs/collecting-data/collecting-from-own-applications/javascript-trackers/javascript-tracker/javascript-tracker-v2/tracking-specific-events/#form-tracking): -1. Call `Tracking.enableFormTracking` when the DOM is ready. +1. Call `Tracking.enableFormTracking` when the DOM is ready. 1. Provide a `config` object that includes at least one of the following elements: - `forms` determines the forms to track. Identified by the CSS class name. - `fields` determines the fields inside the tracked forms to track. Identified by the field `name`. 1. Optional. Provide a list of contexts as the second argument. The [`gitlab_standard`](schemas.md#gitlab_standard) schema is excluded from these events. - + ```javascript Tracking.enableFormTracking({ forms: { allow: ['sign-in-form', 'password-recovery-form'] }, @@ -339,7 +339,7 @@ Backend tracking provides: - User behavior tracking - Instrumentation to monitor and visualize performance over time in a section or aspect of code. -To add custom event tracking and instrumentation, call the `GitLab::Tracking.event` class method. +To add custom event tracking and instrumentation, call the `GitLab::Tracking.event` class method. For example: ```ruby @@ -370,7 +370,7 @@ Use the following arguments: ### Unit testing -To test backend Snowplow events, use the `expect_snowplow_event` helper. For more information, see +To test backend Snowplow events, use the `expect_snowplow_event` helper. For more information, see [testing best practices](../testing_guide/best_practices.md#test-snowplow-events). ### Performance @@ -419,17 +419,17 @@ Snowplow Inspector Chrome Extension is a browser extension for testing frontend [Snowplow Micro](https://snowplowanalytics.com/blog/2019/07/17/introducing-snowplow-micro/) is a Docker-based solution for testing backend and frontend in a local development environment. Snowplow Micro -records the same events as the full Snowplow pipeline. To query events, use the Snowplow Micro API. +records the same events as the full Snowplow pipeline. To query events, use the Snowplow Micro API. -To install and run Snowplow Micro, complete these steps to modify the +To install and run Snowplow Micro, complete these steps to modify the [GitLab Development Kit (GDK)](https://gitlab.com/gitlab-org/gitlab-development-kit): 1. Ensure [Docker is installed](https://docs.docker.com/get-docker/) and running. -1. To install Snowplow Micro, clone the settings in +1. To install Snowplow Micro, clone the settings in [this project](https://gitlab.com/gitlab-org/snowplow-micro-configuration). -1. Navigate to the directory with the cloned project, +1. Navigate to the directory with the cloned project, and start the appropriate Docker container: ```shell diff --git a/doc/development/testing_guide/img/review-app-parent-pipeline.png b/doc/development/testing_guide/img/review-app-parent-pipeline.png index 5686d5f6ebe2fbd4fb90a413bc88966243dca5ff..dd64d7d1be540f36fdbb08adfdf14af6fc053e03 100644 GIT binary patch literal 42721 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 literal 136842 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