diff --git a/.gitlab/ci/rules.gitlab-ci.yml b/.gitlab/ci/rules.gitlab-ci.yml
index 0a9265d2e60..d05d0e32263 100644
--- a/.gitlab/ci/rules.gitlab-ci.yml
+++ b/.gitlab/ci/rules.gitlab-ci.yml
@@ -2699,6 +2699,8 @@
when: never
- if: '$DEPENDENCY_SCANNING_DISABLED || $GITLAB_FEATURES !~ /\bdependency_scanning\b/ || $DS_EXCLUDED_ANALYZERS =~ /gemnasium([^-]|$)/'
when: never
+ # Run Dependency Scanning on master until https://gitlab.com/gitlab-org/gitlab/-/issues/361657 is resolved
+ - <<: *if-default-branch-refs
- <<: *if-default-refs
changes: *dependency-patterns
@@ -2708,6 +2710,8 @@
when: never
- if: '$DEPENDENCY_SCANNING_DISABLED || $GITLAB_FEATURES !~ /\bdependency_scanning\b/ || $DS_EXCLUDED_ANALYZERS =~ /gemnasium-python/'
when: never
+ # Run Dependency Scanning on master until https://gitlab.com/gitlab-org/gitlab/-/issues/361657 is resolved
+ - <<: *if-default-branch-refs
- <<: *if-default-refs
changes: *python-patterns
diff --git a/.rubocop_todo/rspec/example_without_description.yml b/.rubocop_todo/rspec/example_without_description.yml
index 44ae7dc6868..04e9e33117b 100644
--- a/.rubocop_todo/rspec/example_without_description.yml
+++ b/.rubocop_todo/rspec/example_without_description.yml
@@ -290,7 +290,6 @@ RSpec/ExampleWithoutDescription:
- 'spec/initializers/gitlab_http_spec.rb'
- 'spec/initializers/google_cloud_profiler_spec.rb'
- 'spec/keeps/helpers/postgres_ai_spec.rb'
- - 'spec/lib/api/entities/virtual_registries/packages/maven/cached_response_spec.rb'
- 'spec/lib/banzai/filter/commit_trailers_filter_spec.rb'
- 'spec/lib/banzai/pipeline/incident_management/timeline_event_pipeline_spec.rb'
- 'spec/lib/banzai/pipeline_spec.rb'
@@ -477,7 +476,6 @@ RSpec/ExampleWithoutDescription:
- 'spec/models/users/banned_user_spec.rb'
- 'spec/models/users/phone_number_validation_spec.rb'
- 'spec/models/users/project_callout_spec.rb'
- - 'spec/models/virtual_registries/packages/maven/cached_response_spec.rb'
- 'spec/models/virtual_registries/packages/maven/registry_spec.rb'
- 'spec/models/virtual_registries/packages/maven/registry_upstream_spec.rb'
- 'spec/models/virtual_registries/packages/maven/upstream_spec.rb'
diff --git a/app/assets/javascripts/ci/pipelines_page/components/failure_widget/pipeline_failed_jobs_widget.vue b/app/assets/javascripts/ci/pipelines_page/components/failure_widget/pipeline_failed_jobs_widget.vue
index a57dcfb1e22..158b8796195 100644
--- a/app/assets/javascripts/ci/pipelines_page/components/failure_widget/pipeline_failed_jobs_widget.vue
+++ b/app/assets/javascripts/ci/pipelines_page/components/failure_widget/pipeline_failed_jobs_widget.vue
@@ -113,6 +113,7 @@ export default {
class="!gl-text-subtle"
:aria-expanded="isExpanded.toString()"
:aria-controls="$options.ariaControlsId"
+ data-testid="toggle-button"
@click="toggleWidget"
>
@@ -126,6 +127,15 @@ export default {
{{ failedJobsCountBadge }}
+
+
+ {{ __('Leave feedback') }}
+
+
-
+
{{ environment.name }}?
diff --git a/app/assets/javascripts/gfm_auto_complete.js b/app/assets/javascripts/gfm_auto_complete.js
index ea85485fdc4..eccfc541e8a 100644
--- a/app/assets/javascripts/gfm_auto_complete.js
+++ b/app/assets/javascripts/gfm_auto_complete.js
@@ -392,6 +392,7 @@ class GfmAutoComplete {
UNASSIGN_REVIEWER: '/unassign_reviewer',
REASSIGN: '/reassign',
CC: '/cc',
+ REQUEST_REVIEW: '/request_review',
};
let assignees = [];
let reviewers = [];
diff --git a/app/assets/javascripts/merge_requests/list/components/merge_requests_list_app.vue b/app/assets/javascripts/merge_requests/list/components/merge_requests_list_app.vue
index d91f228e36c..de593d5a066 100644
--- a/app/assets/javascripts/merge_requests/list/components/merge_requests_list_app.vue
+++ b/app/assets/javascripts/merge_requests/list/components/merge_requests_list_app.vue
@@ -709,6 +709,7 @@ export default {
:sort-options="sortOptions"
:initial-sort-by="sortKey"
:issuables="mergeRequests"
+ issuable-symbol="!"
:error="mergeRequestsError"
:tabs="$options.mergeRequestListTabs"
:current-tab="state"
diff --git a/app/assets/javascripts/sidebar/components/todo_toggle/sidebar_todo_widget.vue b/app/assets/javascripts/sidebar/components/todo_toggle/sidebar_todo_widget.vue
index 4d1d00ea897..f79742ece61 100644
--- a/app/assets/javascripts/sidebar/components/todo_toggle/sidebar_todo_widget.vue
+++ b/app/assets/javascripts/sidebar/components/todo_toggle/sidebar_todo_widget.vue
@@ -231,6 +231,7 @@ export default {
category="tertiary"
type="reset"
class="sidebar-collapsed-icon sidebar-collapsed-container !gl-rounded-none !gl-shadow-none"
+ :class="{ '!gl-text-blue-500': hasTodo }"
@click.stop.prevent="toggleTodo"
>
diff --git a/app/assets/javascripts/vue_shared/components/markdown/comment_templates_modal.vue b/app/assets/javascripts/vue_shared/components/markdown/comment_templates_modal.vue
index e09d15ed810..42144bafa60 100644
--- a/app/assets/javascripts/vue_shared/components/markdown/comment_templates_modal.vue
+++ b/app/assets/javascripts/vue_shared/components/markdown/comment_templates_modal.vue
@@ -159,7 +159,7 @@ export default {
>
{{ item.text }}
-
+
diff --git a/app/assets/stylesheets/page_bundles/issuable.scss b/app/assets/stylesheets/page_bundles/issuable.scss
index 44d875a4cf5..2bb58d10130 100644
--- a/app/assets/stylesheets/page_bundles/issuable.scss
+++ b/app/assets/stylesheets/page_bundles/issuable.scss
@@ -99,6 +99,10 @@
.comment-templates-modal {
padding: 3rem 0.5rem 0;
+ .modal-content {
+ @apply gl-max-h-[80vh];
+ }
+
// stylelint-disable-next-line gitlab/no-gl-class
&.gl-modal .modal-dialog {
align-items: flex-start;
diff --git a/app/models/integrations/unify_circuit.rb b/app/models/integrations/unify_circuit.rb
index 4a672511b00..f7b26500606 100644
--- a/app/models/integrations/unify_circuit.rb
+++ b/app/models/integrations/unify_circuit.rb
@@ -6,17 +6,22 @@ module Integrations
field :webhook,
section: SECTION_TYPE_CONNECTION,
- help: 'https://yourcircuit.com/rest/v2/webhooks/incoming/…',
+ help: -> { _('The Unify Circuit webhook (for example, `https://circuit.com/rest/v2/webhooks/incoming/...`).') },
required: true
field :notify_only_broken_pipelines,
type: :checkbox,
+ description: -> { _('Send notifications for broken pipelines.') },
section: SECTION_TYPE_CONFIGURATION
field :branches_to_be_notified,
type: :select,
section: SECTION_TYPE_CONFIGURATION,
title: -> { s_('Integrations|Branches for which notifications are to be sent') },
+ description: -> {
+ _('Branches to send notifications for. Valid options are `all`, `default`, `protected`, ' \
+ 'and `default_and_protected`. The default value is `default`.')
+ },
choices: -> { branch_choices }
def self.title
diff --git a/app/models/packages/nuget/symbol.rb b/app/models/packages/nuget/symbol.rb
index c9391d6fd5a..e8c5ac0e5c8 100644
--- a/app/models/packages/nuget/symbol.rb
+++ b/app/models/packages/nuget/symbol.rb
@@ -7,16 +7,16 @@ module Packages
include ShaAttribute
include Packages::Destructible
- # Used in destroying stale symbols in worker
+ # Used in destroying orphan symbols in worker
enum :status, default: 0, processing: 1, error: 3
belongs_to :package, class_name: 'Packages::Nuget::Package', inverse_of: :nuget_symbols
belongs_to :project
- delegate :project_id, :project, to: :package
+ delegate :project_id, :project, to: :package, allow_nil: true
validates :file, :file_path, :signature, :object_storage_key, :size, presence: true
- validates :signature, uniqueness: { scope: :file_path }
+ validates :signature, uniqueness: { scope: %i[file_path package_id] }, if: -> { package }
validates :object_storage_key, uniqueness: true
validates :package, presence: true
@@ -26,8 +26,8 @@ module Packages
before_validation :set_object_storage_key, on: :create
- scope :stale, -> { where(package_id: nil) }
- scope :pending_destruction, -> { stale.default }
+ scope :orphan, -> { where(package_id: nil) }
+ scope :pending_destruction, -> { orphan.default }
scope :with_file_name, ->(file_name) { where(arel_table[:file].lower.eq(file_name.downcase)) }
scope :with_signature, ->(signature) { where(arel_table[:signature].lower.eq(signature.downcase)) }
scope :with_file_sha256, ->(checksums) { where(file_sha256: Array.wrap(checksums).map(&:downcase)) }
@@ -36,6 +36,7 @@ module Packages
with_signature(signature)
.with_file_name(file_name)
.with_file_sha256(checksums)
+ .where.not(orphan.where_values_hash)
.take
end
diff --git a/app/models/virtual_registries/packages/maven/cached_response.rb b/app/models/virtual_registries/packages/maven/cached_response.rb
index a39f1b4824a..f29bc5c5e04 100644
--- a/app/models/virtual_registries/packages/maven/cached_response.rb
+++ b/app/models/virtual_registries/packages/maven/cached_response.rb
@@ -19,6 +19,7 @@ module VirtualRegistries
enum :status, default: 0, processing: 1, pending_destruction: 2, error: 3
ignore_column :downloads_count, remove_with: '17.8', remove_after: '2024-12-23'
+ ignore_column :downloaded_at, remove_with: '17.9', remove_after: '2025-01-23'
validates :group, top_level_group: true, presence: true
validates :relative_path,
@@ -86,13 +87,6 @@ module VirtualRegistries
(upstream_checked_at + upstream.cache_validity_hours.hours).past?
end
- def bump_statistics(include_upstream_checked_at: false)
- now = Time.zone.now
- updates = { downloaded_at: now }
- updates[:upstream_checked_at] = now if include_upstream_checked_at
- update_columns(**updates)
- end
-
private
def set_object_storage_key
diff --git a/app/services/import/reassign_placeholder_user_records_service.rb b/app/services/import/reassign_placeholder_user_records_service.rb
index e38db6e6e52..0d653a49e81 100644
--- a/app/services/import/reassign_placeholder_user_records_service.rb
+++ b/app/services/import/reassign_placeholder_user_records_service.rb
@@ -10,7 +10,8 @@ module Import
def initialize(import_source_user)
@import_source_user = import_source_user
- @reassigned_by_user = User.find_by_id(import_source_user.reassigned_by_user_id)
+ @reassigned_by_user = import_source_user.reassigned_by_user
+ @project_membership_created = false
end
def execute
@@ -24,6 +25,8 @@ module Import
create_memberships
delete_placeholder_memberships
+ UserProjectAccessChangedService.new(import_source_user.reassign_to_user_id).execute if project_membership_created?
+
import_source_user.complete!
end
@@ -153,6 +156,8 @@ module Import
)
member.save!
+
+ @project_membership_created = true if memberable.is_a?(Project)
rescue ActiveRecord::ActiveRecordError => exception
Gitlab::ErrorTracking.track_and_raise_for_dev_exception(
exception,
@@ -193,6 +198,10 @@ module Import
Import::Placeholders::Membership.by_source_user(import_source_user)
end
+ def project_membership_created?
+ @project_membership_created == true
+ end
+
def log_create_membership_skipped(message, placeholder_membership, existing_membership)
log_info(
message,
diff --git a/app/services/notes/create_service.rb b/app/services/notes/create_service.rb
index fe90adf6940..64a8948949b 100644
--- a/app/services/notes/create_service.rb
+++ b/app/services/notes/create_service.rb
@@ -4,7 +4,9 @@ module Notes
class CreateService < ::Notes::BaseService
include IncidentManagement::UsageData
- def execute(skip_capture_diff_note_position: false, skip_merge_status_trigger: false, executing_user: nil)
+ def execute(
+ skip_capture_diff_note_position: false, skip_merge_status_trigger: false, executing_user: nil,
+ importing: false)
Gitlab::Database::QueryAnalyzers::PreventCrossDatabaseModification.temporary_ignore_tables_in_transaction(
%w[
notes
@@ -29,7 +31,7 @@ module Notes
execute_quick_actions(note) do |only_commands|
note.check_for_spam(action: :create, user: current_user) if check_for_spam?(only_commands)
- after_commit(note)
+ after_commit(note) unless importing
note_saved = note.with_transaction_returning_status do
break false if only_commands
diff --git a/app/services/virtual_registries/packages/maven/cached_responses/create_or_update_service.rb b/app/services/virtual_registries/packages/maven/cached_responses/create_or_update_service.rb
index 0a5055f5f3c..b727be18b3c 100644
--- a/app/services/virtual_registries/packages/maven/cached_responses/create_or_update_service.rb
+++ b/app/services/virtual_registries/packages/maven/cached_responses/create_or_update_service.rb
@@ -29,7 +29,6 @@ module VirtualRegistries
file: file,
size: file.size,
file_sha1: file.sha1,
- downloaded_at: now,
content_type: content_type
}
updates[:file_md5] = file.md5 unless Gitlab::FIPS.enabled?
diff --git a/app/services/virtual_registries/packages/maven/handle_file_request_service.rb b/app/services/virtual_registries/packages/maven/handle_file_request_service.rb
index 9fa9a13b868..f533cb5cb34 100644
--- a/app/services/virtual_registries/packages/maven/handle_file_request_service.rb
+++ b/app/services/virtual_registries/packages/maven/handle_file_request_service.rb
@@ -65,11 +65,8 @@ module VirtualRegistries
def cache_response_still_valid?
return false unless cached_response
+ return true unless cached_response.stale?
- unless cached_response.stale?
- cached_response.bump_statistics
- return true
- end
# cached response with no etag can't be checked
return false if cached_response.upstream_etag.blank?
@@ -77,7 +74,7 @@ module VirtualRegistries
return false unless cached_response.upstream_etag == response.headers['etag']
- cached_response.bump_statistics(include_upstream_checked_at: true)
+ cached_response.update_column(:upstream_checked_at, Time.current)
true
end
diff --git a/db/post_migrate/20241111220006_update_unique_index_on_packages_nuget_symbol.rb b/db/post_migrate/20241111220006_update_unique_index_on_packages_nuget_symbol.rb
new file mode 100644
index 00000000000..5dc34c240f8
--- /dev/null
+++ b/db/post_migrate/20241111220006_update_unique_index_on_packages_nuget_symbol.rb
@@ -0,0 +1,33 @@
+# frozen_string_literal: true
+
+class UpdateUniqueIndexOnPackagesNugetSymbol < Gitlab::Database::Migration[2.2]
+ disable_ddl_transaction!
+ milestone '17.7'
+
+ TABLE_NAME = :packages_nuget_symbols
+ OLD_INDEX_NAME = :index_packages_nuget_symbols_on_signature_and_file_path
+ NEW_INDEX_NAME = :idx_pkgs_nuget_symbols_on_signature_and_file_path_with_pkg_id
+
+ def up
+ add_concurrent_index(
+ TABLE_NAME,
+ %i[signature file_path],
+ unique: true,
+ name: NEW_INDEX_NAME,
+ where: 'package_id IS NOT NULL'
+ )
+
+ remove_concurrent_index_by_name(TABLE_NAME, OLD_INDEX_NAME)
+ end
+
+ def down
+ add_concurrent_index(
+ TABLE_NAME,
+ %i[signature file_path],
+ unique: true,
+ name: OLD_INDEX_NAME
+ )
+
+ remove_concurrent_index_by_name(TABLE_NAME, NEW_INDEX_NAME)
+ end
+end
diff --git a/db/schema_migrations/20241111220006 b/db/schema_migrations/20241111220006
new file mode 100644
index 00000000000..d7ba3a72e91
--- /dev/null
+++ b/db/schema_migrations/20241111220006
@@ -0,0 +1 @@
+da65c2c8c0afc61af3000cdf6fe11ddaf61e157b6b73f0b274d825b4adf2d43b
\ No newline at end of file
diff --git a/db/structure.sql b/db/structure.sql
index d7ade6011ce..98bbff09838 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -28515,6 +28515,8 @@ CREATE INDEX idx_pkgs_npm_metadata_caches_on_id_and_project_id_and_status ON pac
CREATE INDEX idx_pkgs_nuget_symbols_on_lowercase_signature_and_file_name ON packages_nuget_symbols USING btree (lower(signature), lower(file));
+CREATE UNIQUE INDEX idx_pkgs_nuget_symbols_on_signature_and_file_path_with_pkg_id ON packages_nuget_symbols USING btree (signature, file_path) WHERE (package_id IS NOT NULL);
+
CREATE INDEX idx_pkgs_on_project_id_name_version_on_installable_terraform ON packages_packages USING btree (project_id, name, version, id) WHERE ((package_type = 12) AND (status = ANY (ARRAY[0, 1])));
CREATE INDEX idx_pkgs_project_id_lower_name_when_nuget_installable_version ON packages_packages USING btree (project_id, lower((name)::text)) WHERE ((package_type = 4) AND (version IS NOT NULL) AND (status = ANY (ARRAY[0, 1])));
@@ -31329,8 +31331,6 @@ CREATE INDEX index_packages_nuget_symbols_on_package_id ON packages_nuget_symbol
CREATE INDEX index_packages_nuget_symbols_on_project_id ON packages_nuget_symbols USING btree (project_id);
-CREATE UNIQUE INDEX index_packages_nuget_symbols_on_signature_and_file_path ON packages_nuget_symbols USING btree (signature, file_path);
-
CREATE INDEX index_packages_on_available_pypi_packages ON packages_packages USING btree (project_id, id) WHERE ((status = ANY (ARRAY[0, 1])) AND (package_type = 5) AND (version IS NOT NULL));
CREATE INDEX index_packages_package_file_build_infos_on_package_file_id ON packages_package_file_build_infos USING btree (package_file_id);
diff --git a/doc/administration/configure.md b/doc/administration/configure.md
index d432b0e39f4..bd69d4a50ef 100644
--- a/doc/administration/configure.md
+++ b/doc/administration/configure.md
@@ -48,3 +48,4 @@ Customize and configure your self-managed GitLab installation.
- [Snippets](../administration/snippets/index.md)
- [Host the product documentation](../administration/docs_self_host.md)
- [Custom HTML header tags](../administration/custom_html_header_tags.md)
+- [Self-hosted models](../administration/self_hosted_models/index.md)
diff --git a/doc/administration/index.md b/doc/administration/index.md
index ffcd02d25f9..a6416c90666 100644
--- a/doc/administration/index.md
+++ b/doc/administration/index.md
@@ -12,7 +12,8 @@ Learn how to administer a self-managed GitLab instance.
| | | |
|--|--|--|
| [**Get started**](../administration/get_started.md) Administration overview. | [**All feature flags**](../user/feature_flags.md) Complete list of flags. | [**Authentication and authorization**](../administration/auth/index.md) Third-party authentication providers. |
-| [**Configure your installation**](../administration/configure.md) Installation settings. | [**Update your Admin area settings**](../administration/settings/index.md) Product settings. | [**Configure GitLab Dedicated**](../administration/dedicated/index.md) IP allowlists, SAML, maintenance. |
-| [**Maintain your installation**](../administration/operations/index.md) Backup and restore, move repos, maintenance tasks. | [**Secure your application**](../user/application_security/secure_your_application.md) SSH key limits, 2FA, tokens, hardening. | [**Administer users**](../user/profile/account/create_accounts.md) Passwords, user moderation, broadcast messages. |
+| [**Configure GitLab**](../administration/configure.md) Installation settings. | [**Update your Admin area settings**](../administration/settings/index.md) Product settings. | [**Maintain GitLab**](../administration/operations/index.md) Backup and restore, move repositories, maintenance tasks. |
+| [**Monitor GitLab**](../administration/monitoring/index.md) Performance, health, uptime monitoring. | [**Secure GitLab**](../security/index.md) SSH key limits, 2FA, tokens, hardening. | [**Administer users**](../user/profile/account/create_accounts.md) Passwords, user moderation, broadcast messages. |
+| [**GitLab Dedicated**](../administration/dedicated/index.md) Get started with GitLab Dedicated. | | |
Only GitLab team members have access to administration tools and settings on GitLab.com.
diff --git a/doc/administration/monitoring/index.md b/doc/administration/monitoring/index.md
index ae05f7667e5..3aa73f5d8b1 100644
--- a/doc/administration/monitoring/index.md
+++ b/doc/administration/monitoring/index.md
@@ -1,6 +1,7 @@
---
stage: Monitor
group: Platform Insights
+description: Performance, health, uptime monitoring.
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md
index fed505d024f..69fbd45ac53 100644
--- a/doc/api/graphql/reference/index.md
+++ b/doc/api/graphql/reference/index.md
@@ -20959,6 +20959,7 @@ Represents a ComplianceFramework associated with a Project.
| `projects` | [`ProjectConnection`](#projectconnection) | Projects associated with the compliance framework. (see [Connections](#connections)) |
| `scanExecutionPolicies` | [`ScanExecutionPolicyConnection`](#scanexecutionpolicyconnection) | Scan Execution Policies of the compliance framework. (see [Connections](#connections)) |
| `scanResultPolicies` | [`ScanResultPolicyConnection`](#scanresultpolicyconnection) | Scan Result Policies of the compliance framework. (see [Connections](#connections)) |
+| `vulnerabilityManagementPolicies` | [`VulnerabilityManagementPolicyConnection`](#vulnerabilitymanagementpolicyconnection) | Vulnerability Management Policies of the compliance framework. (see [Connections](#connections)) |
### `ComplianceRequirement`
@@ -25649,6 +25650,27 @@ Returns [`[VulnerableProjectsByGrade!]`](#vulnerableprojectsbygrade).
| `includeSubgroups` | [`Boolean`](#boolean) | Include grades belonging to subgroups. |
| `letterGrade` | [`VulnerabilityGrade`](#vulnerabilitygrade) | Filter the response by given letter grade. |
+##### `Group.vulnerabilityManagementPolicies`
+
+Vulnerability Management Policies of the project.
+
+DETAILS:
+**Introduced** in GitLab 17.7.
+**Status**: Experiment.
+
+Returns [`VulnerabilityManagementPolicyConnection`](#vulnerabilitymanagementpolicyconnection).
+
+This field returns a [connection](#connections). It accepts the
+four standard [pagination arguments](#pagination-arguments):
+`before: String`, `after: String`, `first: Int`, and `last: Int`.
+
+###### Arguments
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| `includeUnscoped` | [`Boolean`](#boolean) | Filter policies that are scoped to the project. |
+| `relationship` | [`SecurityPolicyRelationType`](#securitypolicyrelationtype) | Filter policies by the given policy relationship. |
+
##### `Group.vulnerabilitySeveritiesCount`
Counts for each vulnerability severity in the group and its subgroups.
@@ -29477,6 +29499,27 @@ four standard [pagination arguments](#pagination-arguments):
| `includeUnscoped` **{warning-solid}** | [`Boolean`](#boolean) | **Introduced** in GitLab 17.3. **Status**: Experiment. Filter policies that are scoped to the project. |
| `relationship` | [`SecurityPolicyRelationType`](#securitypolicyrelationtype) | Filter policies by the given policy relationship. |
+##### `Namespace.vulnerabilityManagementPolicies`
+
+Vulnerability Management Policies of the project.
+
+DETAILS:
+**Introduced** in GitLab 17.7.
+**Status**: Experiment.
+
+Returns [`VulnerabilityManagementPolicyConnection`](#vulnerabilitymanagementpolicyconnection).
+
+This field returns a [connection](#connections). It accepts the
+four standard [pagination arguments](#pagination-arguments):
+`before: String`, `after: String`, `first: Int`, and `last: Int`.
+
+###### Arguments
+
+| Name | Type | Description |
+| ---- | ---- | ----------- |
+| `includeUnscoped` | [`Boolean`](#boolean) | Filter policies that are scoped to the project. |
+| `relationship` | [`SecurityPolicyRelationType`](#securitypolicyrelationtype) | Filter policies by the given policy relationship. |
+
##### `Namespace.workItem`
Find a work item by IID directly associated with the namespace(project or group). Returns `null` for group level work items if the `namespace_level_work_items` feature flag is disabled.
diff --git a/doc/editor_extensions/visual_studio_code/cicd.md b/doc/editor_extensions/visual_studio_code/cicd.md
index 1fdb2485dcc..44fa7cad2fd 100644
--- a/doc/editor_extensions/visual_studio_code/cicd.md
+++ b/doc/editor_extensions/visual_studio_code/cicd.md
@@ -15,12 +15,12 @@ shows the status of its most recent pipeline, or shows **No pipeline** if a pipe
Possible statuses include:
-- **Pipeline canceled**
-- **Pipeline failed**
-- **Pipeline passed**
-- **Pipeline pending**
-- **Pipeline running**
-- **Pipeline skipped**
+- Pipeline canceled
+- Pipeline failed
+- Pipeline passed
+- Pipeline pending
+- Pipeline running
+- Pipeline skipped
## View pipeline information
@@ -91,7 +91,15 @@ VS Code opens a new tab (`.gitlab-ci (Merged).yml`) with full information.
### CI/CD variable autocompletion
-Quickly find the CI/CD variable you are looking for with the CI/CD variable autocompletion:
+Quickly find the CI/CD variable you are looking for with the CI/CD variable autocompletion.
+
+Prerequisites:
+
+- Your file is named either:
+ - `.gitlab-ci.yml`.
+ - Beginning with `.gitlab-ci` and ending with `.yml` or `.yaml`, like `.gitlab-ci.production.yml`.
+
+To autocomplete a variable:
1. In VS Code, open your `.gitlab-ci.yml` file, and ensure the file's tab is in focus.
1. Begin entering the name of a variable to display auto-complete options.
diff --git a/doc/editor_extensions/visual_studio_code/index.md b/doc/editor_extensions/visual_studio_code/index.md
index 36f3f65120b..1b90771c05f 100644
--- a/doc/editor_extensions/visual_studio_code/index.md
+++ b/doc/editor_extensions/visual_studio_code/index.md
@@ -198,18 +198,62 @@ To view issues and merge requests for a specific project:
- All project merge requests
- Your [custom queries](custom_queries.md)
-1. Select an issue or merge request to open it in a new VS Code tab.
-1. Optional. If you select a merge request, its sidebar entry expands to show all files changed
- in the merge request. Deleted files are marked in red. For example:
+Select an issue or merge request to open it in a new VS Code tab.
+
+## Review a merge request
+
+Use this extension to review, comment on, and approve merge requests without leaving VS Code:
+
+1. While viewing [issues and merge requests](#view-issues-and-merge-requests) in VS Code, select the
+ merge request you want to review. Its sidebar entry expands with more information.
+1. Under the merge request's number and title, select **Description** to read more about the merge request.
+1. To review the proposed changes to a file, select the file from the list to show it in a VS Code tab.
+ Diff comments are shown inline in the tab. In the list, deleted files are marked in red:

- 1. Select a file to view its diff in a VS Code tab.
+Use the diff to:
+
+- Review and create discussions.
+- Resolve and unresolve these discussions.
+- Delete and edit individual comments.
+
+### Compare with default branch
+
+
+
+To compare your branch with your project's default branch, without creating a merge request:
+
+1. Open the Command Palette:
+ - For macOS, press Command+Shift+P.
+ - For Windows or Linux, press Ctrl+Shift+P.
+1. In the Command Palette, search for **GitLab: Compare current branch with master** and press Enter.
+
+The extension opens a new browser tab. It shows a diff between the most recent commit on your branch, and
+the most recent commit on your project's default branch.
+
+
+
+### Open current file in GitLab UI
+
+To open a file from your current GitLab project in the GitLab UI, with specific lines highlighted:
+
+1. Open your desired file in VS Code.
+1. Select the lines you want to highlight.
+1. Open the Command Palette:
+ - For macOS, press Command+Shift+P.
+ - For Windows or Linux, press Ctrl+Shift+P.
+1. In the Command Palette, search for **GitLab: Open active file on GitLab** and press Enter.
## View security findings
+DETAILS:
+**Tier:** Ultimate
+**Offering:** GitLab.com, Self-managed, GitLab Dedicated
+
Prerequisites:
+- You're using GitLab Workflow version 3.74.0 or later.
- Your project includes [Security Risk Management](https://about.gitlab.com/features/?stage=secure) features, such as
Static Application Security Testing (SAST), Dynamic Application Security Testing (DAST),
Container Scanning, or Dependency Scanning.
diff --git a/doc/editor_extensions/visual_studio_code/troubleshooting.md b/doc/editor_extensions/visual_studio_code/troubleshooting.md
index dcb3ed21c4c..9722841d028 100644
--- a/doc/editor_extensions/visual_studio_code/troubleshooting.md
+++ b/doc/editor_extensions/visual_studio_code/troubleshooting.md
@@ -64,7 +64,7 @@ Prerequisites:
| `gitlab.certKey`| null | Unsupported. See [epic 6244](https://gitlab.com/groups/gitlab-org/-/epics/6244). If your self-managed GitLab instance requires a custom certificate or key pair, set this option to point to your certificate key file. See `gitlab.cert`. |
| `gitlab.ignoreCertificateErrors` | false | Unsupported. See [epic 6244](https://gitlab.com/groups/gitlab-org/-/epics/6244). If you use a self-managed GitLab instance with no SSL certificate, or have certificate issues that prevent you from using the extension, set this option to `true` to ignore certificate errors. |
-## Disable code suggestions
+## Disable Code Suggestions
Code completion is enabled by default. To disable it:
@@ -193,3 +193,15 @@ A workaround exists for Ubuntu users who use versions of VS Code earlier than 1.
If you use VS Code version 1.68.0 or later, re-installation might not be possible. However, you can still run
the last three steps to re-authenticate.
+
+## Set token with environment variables
+
+If you often delete your VS Code storage, such as in Gitpod containers, you can create environment variables
+before starting VS Code. If you set the token in a
+[VS Code environment variable](https://code.visualstudio.com/docs/editor/variables-reference#_environment-variables),
+you don't have to set a personal access token each time you delete your VS Code storage. Set these variables:
+
+- `GITLAB_WORKFLOW_INSTANCE_URL`: Your GitLab instance URL, like `https://gitlab.com`.
+- `GITLAB_WORKFLOW_TOKEN`: Your personal access token, which you created [during setup](https://gitlab.com/gitlab-org/gitlab-vscode-extension/#setup).
+
+The token configured in an environment variable is overridden if you configure a token for the same GitLab instance in the extension.
diff --git a/doc/user/packages/dependency_proxy/reduce_dependency_proxy_storage.md b/doc/user/packages/dependency_proxy/reduce_dependency_proxy_storage.md
index 738d6b82c7a..826a462a3a9 100644
--- a/doc/user/packages/dependency_proxy/reduce_dependency_proxy_storage.md
+++ b/doc/user/packages/dependency_proxy/reduce_dependency_proxy_storage.md
@@ -11,15 +11,11 @@ DETAILS:
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
There's no automatic removal process for blobs. Unless you delete them manually, they're stored
-indefinitely. Since this impacts your
-[storage usage quota](../../storage_usage_quotas.md),
-it's important that you clear unused items from the cache. This page covers several options for
-doing so.
+indefinitely. This page covers several options for clearing unused items from the cache.
## Check Dependency Proxy Storage Use
-The Usage Quotas page (**Settings > Usage Quotas > Storage**) displays storage usage for Packages, which includes the Dependency Proxy,
-however, the storage is not yet displayed.
+The [**Usage Quotas**](../../storage_usage_quotas.md) page displays storage usage for the dependency proxy.
## Use the API to clear the cache
diff --git a/doc/user/packages/npm_registry/index.md b/doc/user/packages/npm_registry/index.md
index 8dcb5cfff08..40aaed77dbd 100644
--- a/doc/user/packages/npm_registry/index.md
+++ b/doc/user/packages/npm_registry/index.md
@@ -204,35 +204,31 @@ Replace `@scope` with your package's scope.
### For installing packages
-When installing packages, you can use project, group, or instance endpoints. The URL structure varies accordingly:
-
-You can configure these URLs using one of the following methods:
-
When you install packages, you can use project, group, or instance endpoints. The URL structure varies accordingly.
To configure these URLs, use one of these methods:
::Tabs
-:::TabTitle `.npmrc` file
+:::TabTitle `.npmrc` file
Create or edit the `.npmrc` file in your project root. Use the appropriate URL based on your needs:
- For a project:
```shell
- npm config set @scope:registry=https://gitlab.example.com/api/v4/projects//packages/npm/
+ @scope:registry=https://gitlab.example.com/api/v4/projects//packages/npm/
```
- For a group:
```shell
- npm config set @scope:registry=https://gitlab.example.com/api/v4/groups//-/packages/npm/
+ @scope:registry=https://gitlab.example.com/api/v4/groups//-/packages/npm/
```
- For an instance:
```shell
- npm config set @scope:registry=https://gitlab.example.com/api/v4/packages/npm/
+ @scope:registry=https://gitlab.example.com/api/v4/packages/npm/
```
:::TabTitle `npm config`
diff --git a/doc/user/project/quick_actions.md b/doc/user/project/quick_actions.md
index 89d098a47cc..de7b2397f55 100644
--- a/doc/user/project/quick_actions.md
+++ b/doc/user/project/quick_actions.md
@@ -57,8 +57,8 @@ To auto-format this table, use the VS Code Markdown Table formatter: `https://do
| `/approve` | **{dotted-circle}** No | **{check-circle}** Yes | **{dotted-circle}** No | Approve the merge request. |
| `/assign @user1 @user2` | **{check-circle}** Yes | **{check-circle}** Yes | **{dotted-circle}** No | Assign one or more users. |
| `/assign me` | **{check-circle}** Yes | **{check-circle}** Yes | **{dotted-circle}** No | Assign yourself. |
-| `/assign_reviewer @user1 @user2` or `/reviewer @user1 @user2` or `/request_review @user1 @user2` | **{dotted-circle}** No | **{check-circle}** Yes | **{dotted-circle}** No | Assign one or more users as reviewers. |
-| `/assign_reviewer me` or `/reviewer me` or `/request_review me` | **{dotted-circle}** No | **{check-circle}** Yes | **{dotted-circle}** No | Assign yourself as a reviewer. |
+| `/assign_reviewer @user1 @user2` or `/reviewer @user1 @user2` | **{dotted-circle}** No | **{check-circle}** Yes | **{dotted-circle}** No | Assign one or more users as reviewers. |
+| `/assign_reviewer me` or `/reviewer me` | **{dotted-circle}** No | **{check-circle}** Yes | **{dotted-circle}** No | Assign yourself as a reviewer. |
| `/blocked_by ` | **{check-circle}** Yes | **{dotted-circle}** No | **{dotted-circle}** No | Mark the issue as blocked by other issues. The `` value should be in the format of `#issue`, `group/project#issue`, or the full issue URL. ([Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/214232) in GitLab 16.0). |
| `/blocks ` | **{check-circle}** Yes | **{dotted-circle}** No | **{dotted-circle}** No | Mark the issue as blocking other issues. The `` value should be in the format of `#issue`, `group/project#issue`, or the full issue URL. ([Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/214232) in GitLab 16.0). |
| `/cc @user` | **{check-circle}** Yes | **{check-circle}** Yes | **{check-circle}** Yes | Mention a user. This command performs no action. You can instead type `CC @user` or only `@user`. |
@@ -112,6 +112,8 @@ To auto-format this table, use the VS Code Markdown Table formatter: `https://do
| `/remove_time_spent` | **{check-circle}** Yes | **{check-circle}** Yes | **{dotted-circle}** No | Remove time spent. |
| `/remove_zoom` | **{check-circle}** Yes | **{dotted-circle}** No | **{dotted-circle}** No | Remove Zoom meeting from this issue. |
| `/reopen` | **{check-circle}** Yes | **{check-circle}** Yes | **{check-circle}** Yes | Reopen. |
+| `/request_review @user1 @user2` | **{dotted-circle}** No | **{check-circle}** Yes | **{dotted-circle}** No | Assigns or requests a new review from one or more users. |
+| `/request_review me` | **{dotted-circle}** No | **{check-circle}** Yes | **{dotted-circle}** No | Assigns or requests a new review from one or more users. |
| `/severity ` | **{check-circle}** Yes | **{dotted-circle}** No | **{dotted-circle}** No | Set the severity. Issue type must be `Incident`. Options for `` are `S1` ... `S4`, `critical`, `high`, `medium`, `low`, `unknown`. |
| `/shrug` | **{check-circle}** Yes | **{check-circle}** Yes | **{check-circle}** Yes | Add `¯\_(ツ)_/¯`. |
| `/spend