Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2024-07-11 03:18:18 +00:00
parent 67881c09c8
commit ce5d2304a9
39 changed files with 327 additions and 161 deletions

View File

@ -60,17 +60,22 @@ export default {
{
key: 'name',
label: s__('CiCatalogComponent|Parameters'),
thClass: 'gl-w-2/5',
},
{
key: 'description',
label: s__('CiCatalogComponent|Description'),
},
{
key: 'default',
label: s__('CiCatalogComponent|Default Value'),
thClass: 'gl-w-2/5',
label: s__('CiCatalogComponent|Default value'),
},
{
key: 'required',
label: s__('CiCatalogComponent|Mandatory'),
thClass: 'gl-w-1/5',
},
{
key: 'type',
label: s__('CiCatalogComponent|Type'),
},
],
i18n: {

View File

@ -12,8 +12,10 @@ query getCiCatalogResourceComponents($fullPath: ID!) {
includePath
inputs {
name
required
default
description
required
type
}
}
}

View File

@ -1,5 +1,6 @@
<script>
import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
import glAbilitiesMixin from '~/vue_shared/mixins/gl_abilities_mixin';
import DiscussionFilter from './discussion_filter.vue';
export default {
@ -10,7 +11,7 @@ export default {
import('ee_component/notes/components/note_actions/ai_summarize_notes.vue'),
MrDiscussionFilter: () => import('./mr_discussion_filter.vue'),
},
mixins: [glFeatureFlagsMixin()],
mixins: [glAbilitiesMixin(), glFeatureFlagsMixin()],
inject: {
showTimelineViewToggle: {
default: false,
@ -38,7 +39,11 @@ export default {
},
computed: {
showAiActions() {
return this.resourceGlobalId && this.glFeatures.summarizeComments;
return (
this.resourceGlobalId &&
this.glAbilities.summarizeComments &&
this.glFeatures.summarizeComments
);
},
},
};

View File

@ -14,6 +14,9 @@ class Packages::Conan::Metadatum < ApplicationRecord
validate :username_channel_none_values
validates :os, :architecture, :build_type, :compiler, :compiler_libcxx, :compiler_cppstd, length: { maximum: 32 }
validates :compiler_version, length: { maximum: 16 }
def recipe
"#{package.name}/#{package.version}@#{package_username}/#{package_channel}"
end

View File

@ -97,12 +97,13 @@
= render ::Layouts::CrudComponent.new(_('Group members'),
icon: 'user',
count: @group.users_count) do |c|
- c.with_actions do
= render 'shared/members/manage_access_button', path: group_group_members_path(@group)
- c.with_description do
- direct_members_link = link_to('', help_page_path('user/project/members/index', anchor: 'membership-types'))
- direct_members_message = s_('The number of direct members in the current group. Members in subgroups are not included. %{link_start}What is a direct member%{link_end}?')
- if @group.root?
.gl-text-sm.gl-text-secondary.gl-pt-3= safe_format(direct_members_message, tag_pair(direct_members_link, :link_start, :link_end))
= safe_format(direct_members_message, tag_pair(direct_members_link, :link_start, :link_end))
- c.with_actions do
= render 'shared/members/manage_access_button', path: group_group_members_path(@group)
- c.with_body do
%ul.content-list.group-users-list.members-list
= render partial: 'shared/members/member',

View File

@ -30,7 +30,7 @@
.commit-detail.flex-list.gl-display-flex.gl-justify-content-space-between.gl-align-items-center.gl-flex-grow-1.gl-min-w-0
.commit-content{ data: { testid: 'commit-content' } }
- if view_details && merge_request
= link_to commit.title, project_commit_path(project, commit.id, merge_request_iid: merge_request.iid), class: ["commit-row-message item-title js-onboarding-commit-item", ("font-italic" if commit.message.empty?)]
= link_to commit.title, project_commit_path(project, commit.id, merge_request_iid: merge_request.iid), class: ["commit-row-message item-title js-onboarding-commit-item", ("font-italic" if commit.message.empty?)], data: link_data_attrs
- else
= link_to_markdown_field(commit, :title, link, class: "commit-row-message item-title js-onboarding-commit-item #{'font-italic' if commit.message.empty?}", data: link_data_attrs)
%span.commit-row-message.d-inline.d-sm-none

View File

@ -11,7 +11,8 @@
.section
- if @scope == 'commits'
%ul.content-list.commit-list
= render partial: "search/results/commit", collection: @search_objects
- @search_objects.each_with_index do |commit, index|
= render partial: "search/results/commit", locals: { commit: commit, index: index }
- else
.search-results.js-search-results
- if @scope == 'projects'
@ -24,9 +25,11 @@
%th= _('User')
%th.text-right= _('Activity')
%tbody
= render_if_exists partial: "search/results/user", collection: @search_objects
- @search_objects.each_with_index do |user, index|
= render_if_exists partial: "search/results/user", locals: { user: user, index: index }
- else
= render_if_exists partial: "search/results/#{@scope.singularize}", collection: @search_objects
- @search_objects.each_with_index do |result, index|
= render_if_exists partial: "search/results/#{@scope.singularize}", locals: { result: result, index: index }
- if @scope != 'projects'
= paginate_collection(@search_objects)

View File

@ -1,8 +1,11 @@
- blob = local_assigns.fetch(:result, nil)
- project = blob.project
- return unless project
- project_repository_ref = repository_ref(project) || ''
- blob_path = blob.path || ''
- blob_link = project_blob_path(project, tree_join(project_repository_ref, blob_path))
- blame_link = project_blame_path(project, tree_join(project_repository_ref, blob_path))
- index = local_assigns.fetch(:index, nil)
- position = index + 1
= render partial: 'search/results/blob_data', locals: { blob: blob, project: project, path: blob_path, blob_link: blob_link, blame_link: blame_link }
= render partial: 'search/results/blob_data', locals: { blob: blob, project: project, path: blob_path, blob_link: blob_link, blame_link: blame_link, position: position }

View File

@ -1,7 +1,7 @@
.js-blob-result.gl-mt-3.gl-mb-5{ data: { testid: 'result-item-content' } }
.file-holder.file-holder-top-border
.js-file-title.file-title{ data: { testid: 'file-title-content' } }
= link_to blob_link, data: {track_action: 'click_text', track_label: 'blob_path', track_property: 'search_result'} do
= link_to blob_link, data: { event_tracking: 'click_search_result', event_label: @scope, event_value: position, event_property: @search_term } do
= sprite_icon('document')
%strong
= search_blob_title(project, path)

View File

@ -1 +1,4 @@
= render 'projects/commits/commit', project: commit.project, commit: commit, ref: nil, show_project_name: @project.nil?, link_data_attrs: {track_action: 'click_text', track_label: 'commit_title', track_property: 'search_result'}
- index = local_assigns.fetch(:index, nil)
- position = index + 1
= render 'projects/commits/commit', project: commit.project, commit: commit, ref: nil, show_project_name: @project.nil?, link_data_attrs: { event_tracking: 'click_search_result', event_label: @scope, event_value: position, event_property: @search_term }

View File

@ -1,9 +1,11 @@
- position = local_assigns.fetch(:position, nil)
.search-result-row.row.gl-display-flex.gl-sm-flex-direction-row.gl-flex-direction-column.gl-mt-5{ class: 'gl-pb-5! gl-mb-0!' }
.col-sm-9
%span.gl-display-flex.gl-align-items-center
= gl_badge_tag issuable_state_text(issuable), variant: issuable_state_to_badge_class(issuable), size: :sm
= sprite_icon('eye-slash', css_class: 'gl-text-secondary gl-ml-2') if issuable.respond_to?(:confidential?) && issuable.confidential?
= link_to issuable_path(issuable), data: { track_action: 'click_text', track_label: "#{issuable.class.name.downcase}_title", track_property: 'search_result' }, class: 'gl-w-full' do
= link_to issuable_path(issuable), data: { event_tracking: 'click_search_result', event_label: @scope, event_value: position, event_property: @search_term }, class: 'gl-w-full' do
%span.term.str-truncated.gl-font-bold.gl-ml-2= simple_search_highlight_and_truncate(issuable.title, @search_term)
.gl-text-secondary.gl-mb-3.gl-mt-2.gl-font-sm
= issuable_project_reference(issuable)

View File

@ -1 +1,5 @@
= render partial: 'search/results/issuable', object: issue
- index = local_assigns.fetch(:index, nil)
- issue = local_assigns.fetch(:result, nil)
- position = index + 1
= render partial: 'search/results/issuable', object: issue, locals: { position: position }

View File

@ -1 +1,5 @@
= render partial: 'search/results/issuable', object: merge_request
- index = local_assigns.fetch(:index, nil)
- merge_request = local_assigns.fetch(:result, nil)
- position = index + 1
= render partial: 'search/results/issuable', object: merge_request, locals: { position: position }

View File

@ -1,5 +1,9 @@
- index = local_assigns.fetch(:index, nil)
- milestone = local_assigns.fetch(:result, nil)
- position = index + 1
.search-result-row
= link_to project_milestone_path(milestone.project, milestone), class: 'gl-font-bold gl-text-black-normal', data: {track_action: 'click_text', track_label: 'milestone_title', track_property: 'search_result'} do
= link_to project_milestone_path(milestone.project, milestone), class: 'gl-font-bold gl-text-black-normal', data: { event_tracking: 'click_search_result', event_label: @scope, event_value: position, event_property: @search_term } do
%span.term.str-truncated= simple_search_highlight_and_truncate(milestone.title, @search_term)
- if milestone.project_milestone?

View File

@ -1,3 +1,6 @@
- index = local_assigns.fetch(:index, nil)
- note = local_assigns.fetch(:result, nil)
- position = index + 1
- project = note.project
- note_url = Gitlab::UrlBuilder.build(note)
- noteable_identifier = note.noteable.try(:iid) || note.noteable.try(:id)
@ -19,7 +22,7 @@
- else
%span #{note.noteable_type.titleize} ##{noteable_identifier}
&middot;
= link_to note.noteable.title, note_url, data: {track_action: 'click_text', track_label: 'noteable_title', track_property: 'search_result'}
= link_to note.noteable.title, note_url, data: { event_tracking: 'click_search_result', event_label: @scope, event_value: position, event_property: @search_term }
.note-search-result
.term

View File

@ -1,6 +1,10 @@
- index = local_assigns.fetch(:index, nil)
- snippet_title = local_assigns.fetch(:result, nil)
- position = index + 1
.search-result-row
%h4
= link_to gitlab_snippet_path(snippet_title) do
= link_to gitlab_snippet_path(snippet_title), data: { event_tracking: 'click_search_result', event_label: @scope, event_value: position, event_property: @search_term } do
= truncate(snippet_title.title, length: 60)
= snippet_badge(snippet_title)
%span.cgray.monospace.tiny.gl-float-right.term

View File

@ -1,10 +1,13 @@
- index = local_assigns.fetch(:index, nil)
- position = index + 1
%tr
%td{ data: { label: _('User') } }
%div
%div{ class: '!gl-inline-flex' }
= render Pajamas::AvatarComponent.new(user, size: 32, alt: '')
.gl-ml-3{ class: 'gl-text-left!' }
= link_to user_path(user), class: 'gl-text-body' do
= link_to user_path(user), class: 'gl-text-body', data: { event_tracking: 'click_search_result', event_label: @scope, event_value: position, event_property: @search_term } do
.gl-display-inline-block.gl-font-bold= simple_search_highlight_and_truncate(user.name, @search_term)
= user_status(user)
%div{ class: 'gl-text-left!' }= simple_search_highlight_and_truncate(user.to_reference, @search_term)

View File

@ -1,6 +1,10 @@
- index = local_assigns.fetch(:index, nil)
- wiki_blob = local_assigns.fetch(:result, nil)
- position = index + 1
%div{ class: 'search-result-row gl-pb-3! gl-mt-5 gl-mb-0!' }
%span.gl-display-flex.gl-align-items-center
= link_to wiki_blob_link(wiki_blob), data: { track_action: 'click_text', track_label: "wiki_title", track_property: 'search_result' }, class: 'gl-w-full' do
= link_to wiki_blob_link(wiki_blob), data: { event_tracking: 'click_search_result', event_label: @scope, event_value: position, event_property: @search_term }, class: 'gl-w-full' do
%span.term.str-truncated.gl-font-bold= ::Wiki.canonicalize_filename(wiki_blob.path)
.description.term.col-sm-10.gl-px-0
= simple_search_highlight_and_truncate(wiki_blob.data, @search_term)

View File

@ -0,0 +1,25 @@
---
description: Which results are clicked on Global Search page
internal_events: true
action: click_search_result
identifiers:
- project
- namespace
- user
additional_properties:
label:
description: search result scope
value:
description: result position
property:
description: search term
product_group: global_search
milestone: '17.2'
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/156499
distributions:
- ce
- ee
tiers:
- free
- premium
- ultimate

View File

@ -0,0 +1,8 @@
---
name: summarize_notes_with_duo
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/156650
rollout_issue_url:
milestone: '17.2'
type: development
group: group::project management
default_enabled: false

View File

@ -0,0 +1,22 @@
---
key_path: redis_hll_counters.count_distinct_user_id_from_click_search_result_monthly
description: Monthly count of unique users who clicked result on position 1
product_group: global_search
performance_indicator_type: []
value_type: number
status: active
milestone: '17.2'
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/156499
time_frame: 28d
data_source: internal_events
data_category: optional
distribution:
- ce
- ee
tier:
- free
- premium
- ultimate
events:
- name: click_search_result
unique: user.id

View File

@ -0,0 +1,22 @@
---
key_path: redis_hll_counters.count_distinct_user_id_from_click_search_result_weekly
description: Weekly count of unique users who clicked result on position 1
product_group: global_search
performance_indicator_type: []
value_type: number
status: active
milestone: '17.2'
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/156499
time_frame: 7d
data_source: internal_events
data_category: optional
distribution:
- ce
- ee
tier:
- free
- premium
- ultimate
events:
- name: click_search_result
unique: user.id

View File

@ -10,5 +10,4 @@ milestone: '11.5'
gitlab_schema: gitlab_main_cell
allow_cross_foreign_keys:
- gitlab_main_clusterwide
sharding_key:
group_id: namespaces
exempt_from_sharding: true # Table is scheduled for removal

View File

@ -10,5 +10,4 @@ milestone: '10.2'
gitlab_schema: gitlab_main_cell
allow_cross_foreign_keys:
- gitlab_main_clusterwide
sharding_key:
project_id: projects
exempt_from_sharding: true # Table is scheduled for removal

View File

@ -4,8 +4,8 @@ classes:
- Clusters::Integrations::Prometheus
feature_categories:
- incident_management
description: Persists information about prometheus cluster integration
description: (Deprecated) Persists information about prometheus cluster integration
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/59091
milestone: '13.11'
gitlab_schema: gitlab_main
sharding_key_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/465723
exempt_from_sharding: true # Table is scheduled for removal

View File

@ -10,12 +10,4 @@ milestone: '12.8'
gitlab_schema: gitlab_main_cell
allow_cross_foreign_keys:
- gitlab_main_clusterwide
desired_sharding_key:
project_id:
references: projects
backfill_via:
parent:
foreign_key: deployment_id
table: deployments
sharding_key: project_id
belongs_to: deployment
exempt_from_sharding: true # Table is scheduled for removal

View File

@ -8,4 +8,4 @@ description: TODO
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/27583
milestone: '13.0'
gitlab_schema: gitlab_main
sharding_key_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/464344
exempt_from_sharding: true # Table is scheduled for removal

View File

@ -0,0 +1,41 @@
# frozen_string_literal: true
# See https://docs.gitlab.com/ee/development/migration_style_guide.html
# for more information on how to write migrations for GitLab.
class AddExtraMetadataToPackagesConanMetadata < Gitlab::Database::Migration[2.2]
disable_ddl_transaction!
milestone '17.2'
def up
with_lock_retries do
add_column :packages_conan_metadata, :os, :text, if_not_exists: true
add_column :packages_conan_metadata, :architecture, :text, if_not_exists: true
add_column :packages_conan_metadata, :build_type, :text, if_not_exists: true
add_column :packages_conan_metadata, :compiler, :text, if_not_exists: true
add_column :packages_conan_metadata, :compiler_version, :text, if_not_exists: true
add_column :packages_conan_metadata, :compiler_libcxx, :text, if_not_exists: true
add_column :packages_conan_metadata, :compiler_cppstd, :text, if_not_exists: true
end
add_text_limit :packages_conan_metadata, :os, 32
add_text_limit :packages_conan_metadata, :architecture, 32
add_text_limit :packages_conan_metadata, :build_type, 32
add_text_limit :packages_conan_metadata, :compiler, 32
add_text_limit :packages_conan_metadata, :compiler_version, 16
add_text_limit :packages_conan_metadata, :compiler_libcxx, 32
add_text_limit :packages_conan_metadata, :compiler_cppstd, 32
end
def down
with_lock_retries do
remove_column :packages_conan_metadata, :os, if_exists: true
remove_column :packages_conan_metadata, :architecture, if_exists: true
remove_column :packages_conan_metadata, :build_type, if_exists: true
remove_column :packages_conan_metadata, :compiler, if_exists: true
remove_column :packages_conan_metadata, :compiler_version, if_exists: true
remove_column :packages_conan_metadata, :compiler_libcxx, if_exists: true
remove_column :packages_conan_metadata, :compiler_cppstd, if_exists: true
end
end
end

View File

@ -0,0 +1 @@
bd8b523a2dc23b6d9950d634ea339b3f545bd1f9f3d70ec5ec9393bc35abe92c

View File

@ -14015,7 +14015,21 @@ CREATE TABLE packages_conan_metadata (
updated_at timestamp with time zone NOT NULL,
package_username character varying(255) NOT NULL,
package_channel character varying(255) NOT NULL,
project_id bigint
project_id bigint,
os text,
architecture text,
build_type text,
compiler text,
compiler_version text,
compiler_libcxx text,
compiler_cppstd text,
CONSTRAINT check_15f3356ff2 CHECK ((char_length(architecture) <= 32)),
CONSTRAINT check_3dc474bc51 CHECK ((char_length(compiler_version) <= 16)),
CONSTRAINT check_52abd85dde CHECK ((char_length(compiler_libcxx) <= 32)),
CONSTRAINT check_535bd0bf5b CHECK ((char_length(os) <= 32)),
CONSTRAINT check_a0b998cb1b CHECK ((char_length(build_type) <= 32)),
CONSTRAINT check_e57d0def27 CHECK ((char_length(compiler_cppstd) <= 32)),
CONSTRAINT check_e7f03884b8 CHECK ((char_length(compiler) <= 32))
);
CREATE SEQUENCE packages_conan_metadata_id_seq

View File

@ -159,28 +159,6 @@ This field returns a [connection](#connections). It accepts the
four standard [pagination arguments](#pagination-arguments):
`before: String`, `after: String`, `first: Int`, and `last: Int`.
### `Query.blobSearch`
Find code visible to the current user.
DETAILS:
**Introduced** in GitLab 17.2.
**Status**: Experiment.
Returns [`BlobSearch`](#blobsearch).
#### Arguments
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="queryblobsearchchunkcount"></a>`chunkCount` **{warning-solid}** | [`Int`](#int) | **Introduced** in GitLab 17.2. **Status**: Experiment. Maximum chunks per file. |
| <a id="queryblobsearchgroupid"></a>`groupId` **{warning-solid}** | [`GroupID`](#groupid) | **Introduced** in GitLab 17.2. **Status**: Experiment. Group to search in. |
| <a id="queryblobsearchpage"></a>`page` **{warning-solid}** | [`Int`](#int) | **Introduced** in GitLab 17.2. **Status**: Experiment. Page number to fetch the results. |
| <a id="queryblobsearchperpage"></a>`perPage` **{warning-solid}** | [`Int`](#int) | **Introduced** in GitLab 17.2. **Status**: Experiment. Number of results per page. |
| <a id="queryblobsearchprojectid"></a>`projectId` **{warning-solid}** | [`ProjectID`](#projectid) | **Introduced** in GitLab 17.2. **Status**: Experiment. Project to search in. |
| <a id="queryblobsearchrepositoryref"></a>`repositoryRef` **{warning-solid}** | [`String`](#string) | **Introduced** in GitLab 17.2. **Status**: Experiment. Repository reference to search in. |
| <a id="queryblobsearchsearch"></a>`search` | [`String!`](#string) | Searched term. |
### `Query.boardList`
Find an issue board list.
@ -17519,21 +17497,6 @@ An emoji awarded by a user.
| <a id="blobwebpath"></a>`webPath` | [`String`](#string) | Web path of the blob. |
| <a id="blobweburl"></a>`webUrl` | [`String`](#string) | Web URL of the blob. |
### `BlobSearch`
Full JSON structure of multi-match results in a single file.
#### Fields
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="blobsearchfilecount"></a>`fileCount` **{warning-solid}** | [`Int`](#int) | **Introduced** in GitLab 17.2. **Status**: Experiment. Total number of files with matches. |
| <a id="blobsearchfiles"></a>`files` **{warning-solid}** | [`[SearchBlobFileType!]`](#searchblobfiletype) | **Introduced** in GitLab 17.2. **Status**: Experiment. List of files with matches. |
| <a id="blobsearchmatchcount"></a>`matchCount` **{warning-solid}** | [`Int`](#int) | **Introduced** in GitLab 17.2. **Status**: Experiment. Total number of matches. |
| <a id="blobsearchperpage"></a>`perPage` **{warning-solid}** | [`Int`](#int) | **Introduced** in GitLab 17.2. **Status**: Experiment. Total number of files per page. |
| <a id="blobsearchsearchlevel"></a>`searchLevel` **{warning-solid}** | [`SearchLevel`](#searchlevel) | **Introduced** in GitLab 17.2. **Status**: Experiment. Level of search performed. |
| <a id="blobsearchsearchtype"></a>`searchType` **{warning-solid}** | [`SearchType`](#searchtype) | **Introduced** in GitLab 17.2. **Status**: Experiment. Type of search performed. |
### `BlobViewer`
Represents how the blob content should be displayed.
@ -30857,45 +30820,6 @@ Represents a resource scanned by a security scan.
| <a id="scannedresourcerequestmethod"></a>`requestMethod` | [`String`](#string) | HTTP request method used to access the URL. |
| <a id="scannedresourceurl"></a>`url` | [`String`](#string) | URL scanned by the scanner. |
### `SearchBlobChunk`
JSON structure of a matched chunk.
#### Fields
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="searchblobchunklines"></a>`lines` **{warning-solid}** | [`[SearchBlobLine!]`](#searchblobline) | **Introduced** in GitLab 17.2. **Status**: Experiment. Path of the file. |
| <a id="searchblobchunkmatchcountinchunk"></a>`matchCountInChunk` **{warning-solid}** | [`Int`](#int) | **Introduced** in GitLab 17.2. **Status**: Experiment. Number of matches in the chunk. |
### `SearchBlobFileType`
JSON structure of a file with matches.
#### Fields
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="searchblobfiletypeblameurl"></a>`blameUrl` **{warning-solid}** | [`String`](#string) | **Introduced** in GitLab 17.2. **Status**: Experiment. Blame URL of the file. |
| <a id="searchblobfiletypechunks"></a>`chunks` **{warning-solid}** | [`[SearchBlobChunk!]`](#searchblobchunk) | **Introduced** in GitLab 17.2. **Status**: Experiment. Maximum matches per file. |
| <a id="searchblobfiletypefileurl"></a>`fileUrl` **{warning-solid}** | [`String`](#string) | **Introduced** in GitLab 17.2. **Status**: Experiment. URL of the file. |
| <a id="searchblobfiletypematchcount"></a>`matchCount` **{warning-solid}** | [`Int`](#int) | **Introduced** in GitLab 17.2. **Status**: Experiment. Matches per file in maximum 50 chunks. |
| <a id="searchblobfiletypematchcounttotal"></a>`matchCountTotal` **{warning-solid}** | [`Int`](#int) | **Introduced** in GitLab 17.2. **Status**: Experiment. Total number of matches per file. |
| <a id="searchblobfiletypepath"></a>`path` **{warning-solid}** | [`String`](#string) | **Introduced** in GitLab 17.2. **Status**: Experiment. Path of the file. |
| <a id="searchblobfiletypeprojectpath"></a>`projectPath` **{warning-solid}** | [`String`](#string) | **Introduced** in GitLab 17.2. **Status**: Experiment. Full path of the project. |
### `SearchBlobLine`
JSON structure of each line in a matched chunk.
#### Fields
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="searchbloblinelinenumber"></a>`lineNumber` **{warning-solid}** | [`Int`](#int) | **Introduced** in GitLab 17.2. **Status**: Experiment. Line number of the blob. |
| <a id="searchbloblinerichtext"></a>`richText` **{warning-solid}** | [`String`](#string) | **Introduced** in GitLab 17.2. **Status**: Experiment. Rich text of the blob. |
| <a id="searchbloblinetext"></a>`text` **{warning-solid}** | [`String`](#string) | **Introduced** in GitLab 17.2. **Status**: Experiment. Text content of the blob. |
### `SecurityPolicyValidationError`
Security policy validation error.
@ -36017,26 +35941,6 @@ The status of the security scan.
| <a id="scanstatusreport_error"></a>`REPORT_ERROR` | The report artifact provided by the CI build couldn't be parsed. |
| <a id="scanstatussucceeded"></a>`SUCCEEDED` | The report has been successfully prepared. |
### `SearchLevel`
Level of search.
| Value | Description |
| ----- | ----------- |
| <a id="searchlevelglobal"></a>`GLOBAL` | Global search including all groups and projects. |
| <a id="searchlevelgroup"></a>`GROUP` | Group search. |
| <a id="searchlevelproject"></a>`PROJECT` | Project search. |
### `SearchType`
Type of search.
| Value | Description |
| ----- | ----------- |
| <a id="searchtypeadvanced"></a>`ADVANCED` | Advanced search. |
| <a id="searchtypebasic"></a>`BASIC` | Basic search. |
| <a id="searchtypezoekt"></a>`ZOEKT` | Exact code search. |
### `SecurityPolicyRelationType`
| Value | Description |

View File

@ -4320,6 +4320,8 @@ In this example:
**Additional details**:
- In some cases you cannot use `/` or `./` in a CI/CD variable with `exists`.
See [issue 386595](https://gitlab.com/gitlab-org/gitlab/-/issues/386595) for more details.
- Glob patterns are interpreted with Ruby's [`File.fnmatch`](https://docs.ruby-lang.org/en/master/File.html#method-c-fnmatch)
with the [flags](https://docs.ruby-lang.org/en/master/File/Constants.html#module-File::Constants-label-Filename+Globbing+Constants+-28File-3A-3AFNM_-2A-29)
`File::FNM_PATHNAME | File::FNM_DOTMATCH | File::FNM_EXTGLOB`.
@ -4376,6 +4378,11 @@ docker-build-2:
In this example, both jobs have the same behavior.
**Additional details**:
- In some cases you cannot use `/` or `./` in a CI/CD variable with `exists`.
See [issue 386595](https://gitlab.com/gitlab-org/gitlab/-/issues/386595) for more details.
##### `rules:exists:project`
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/386040) in GitLab 16.11 [with a flag](../../administration/feature_flags.md) named `ci_support_rules_exists_paths_and_project`. Disabled by default.

View File

@ -433,16 +433,11 @@ policies from running.
## Experimental features
DETAILS:
**Status:** Experiment
**Status:** Experiment has ended
These experimental features have limitations:
This experiment has concluded and will not continue. After receiving feedback within this experiment, we will be focusing our efforts on a new policy type for enforcement of custom CI. The experiment will be removed in 17.3.
1. Enforcing pipeline execution using the pipeline execution action in projects
without a `.gitlab-ci.yml` is not supported.
1. The pipeline execution action cannot be used with a scheduled trigger type.
Have feedback on our experimental features? We'd love to hear it! Please share your thoughts in our
[feedback issue](https://gitlab.com/gitlab-org/gitlab/-/issues/434425).
Learn more about the [pipeline execution policy](pipeline_execution_policies.md).
### Pipeline execution policy action

View File

@ -11126,7 +11126,10 @@ msgstr ""
msgid "CiCatalogComponent|Component details not available"
msgstr ""
msgid "CiCatalogComponent|Default Value"
msgid "CiCatalogComponent|Default value"
msgstr ""
msgid "CiCatalogComponent|Description"
msgstr ""
msgid "CiCatalogComponent|Inputs"
@ -11144,6 +11147,9 @@ msgstr ""
msgid "CiCatalogComponent|This tab displays auto-collected information about the components in the repository, but no information was found."
msgstr ""
msgid "CiCatalogComponent|Type"
msgstr ""
msgid "CiCatalog|All"
msgstr ""
@ -54593,6 +54599,9 @@ msgstr ""
msgid "This repository was last checked %{last_check_timestamp}. The check passed."
msgstr ""
msgid "This resource has no comments to summarize"
msgstr ""
msgid "This runner will only run on pipelines triggered on protected branches"
msgstr ""

View File

@ -21,8 +21,9 @@ module RuboCop
# These namespaces are considered acceptable.
# Note: Nested namespace like Foo::Bar are also supported.
PERMITTED_NAMESPACES = %w[
Search EE::Search API::Search EE::API::Search API::Admin::Search RuboCop::Cop::Search Types Resolvers
API::Entities::Search::Zoekt API::Internal::Search::Zoekt
Search EE::Search API::Search EE::API::Search API::Admin::Search RuboCop::Cop::Search
API::Entities::Search::Zoekt
API::Internal::Search::Zoekt
Keeps
].map { |x| x.split('::') }.freeze

View File

@ -136,7 +136,9 @@ describe('CiResourceComponents', () => {
firstComponent.inputs.forEach((input) => {
expect(findComponents().at(0).text()).toContain(input.name);
expect(findComponents().at(0).text()).toContain(input.default);
expect(findComponents().at(0).text()).toContain(input.description);
expect(findComponents().at(0).text()).toContain('Yes');
expect(findComponents().at(0).text()).toContain(input.type);
});
});
});

View File

@ -6,7 +6,15 @@ const componentsDetailsMockData = {
name: 'Ruby gal',
description: 'This is a pretty amazing component that does EVERYTHING ruby.',
includePath: 'gitlab.com/gitlab-org/ruby-gal@~latest',
inputs: [{ name: 'version', default: '1.0.0', required: true }],
inputs: [
{
name: 'version',
default: '1.0.0',
description: 'here is a test description',
required: true,
type: 'STRING',
},
],
},
{
id: 'gid://gitlab/Ci::Component/2',
@ -14,8 +22,27 @@ const componentsDetailsMockData = {
description: 'Adds some spice to your life.',
includePath: 'gitlab.com/gitlab-org/javascript-madness@~latest',
inputs: [
{ name: 'isFun', default: 'true', required: true },
{ name: 'RandomNumber', default: '10', required: false },
{
name: 'isFun',
default: 'true',
description: 'this is a boolean',
required: true,
type: 'BOOLEAN',
},
{
name: 'RandomNumber',
default: '10',
description: 'a number',
required: false,
type: 'NUMBER',
},
{
name: 'RandomNumber',
default: '10',
description: 'another number',
required: false,
type: 'NUMBER',
},
],
},
{
@ -23,7 +50,15 @@ const componentsDetailsMockData = {
name: 'Go go go',
description: 'When you write Go, you gotta go go go.',
includePath: 'gitlab.com/gitlab-org/go-go-go@~latest',
inputs: [{ name: 'version', default: '1.0.0', required: true }],
inputs: [
{
name: 'version',
default: '1.0.0',
description: 'a version',
required: true,
type: 'STRING',
},
],
},
],
};

View File

@ -11,6 +11,8 @@ RSpec.describe Packages::Conan::Metadatum, type: :model, feature_category: :pack
describe 'validations' do
let(:fifty_one_characters) { 'f_a' * 17 }
let(:thirty_three_characters) { 'a' * 33 }
let(:seventeen_characters) { 'a' * 17 }
it { is_expected.to validate_presence_of(:package) }
it { is_expected.to validate_presence_of(:package_username) }
@ -47,6 +49,41 @@ RSpec.describe Packages::Conan::Metadatum, type: :model, feature_category: :pack
it { is_expected.not_to allow_value("my@channel").for(:package_channel) }
end
describe '#architecture' do
it { is_expected.to validate_length_of(:architecture).is_at_most(32) }
it { is_expected.not_to allow_value(thirty_three_characters).for(:architecture) }
end
describe '#os' do
it { is_expected.to validate_length_of(:os).is_at_most(32) }
it { is_expected.not_to allow_value(thirty_three_characters).for(:os) }
end
describe '#build_type' do
it { is_expected.to validate_length_of(:build_type).is_at_most(32) }
it { is_expected.not_to allow_value(thirty_three_characters).for(:build_type) }
end
describe '#compiler' do
it { is_expected.to validate_length_of(:compiler).is_at_most(32) }
it { is_expected.not_to allow_value(thirty_three_characters).for(:compiler) }
end
describe '#compiler_libcxx' do
it { is_expected.to validate_length_of(:compiler_libcxx).is_at_most(32) }
it { is_expected.not_to allow_value(thirty_three_characters).for(:compiler_libcxx) }
end
describe '#compiler_cppstd' do
it { is_expected.to validate_length_of(:compiler_cppstd).is_at_most(32) }
it { is_expected.not_to allow_value(thirty_three_characters).for(:compiler_cppstd) }
end
describe '#compiler_version' do
it { is_expected.to validate_length_of(:compiler_version).is_at_most(16) }
it { is_expected.not_to allow_value(seventeen_characters).for(:compiler_version) }
end
describe '#username_channel_none_values' do
let_it_be(:package) { create(:conan_package) }

View File

@ -85,8 +85,8 @@ RSpec.describe 'search/_results', feature_category: :global_search do
it 'renders the click text event tracking attributes' do
render
expect(rendered).to have_selector('[data-track-action=click_text]')
expect(rendered).to have_selector('[data-track-property=search_result]')
expect(rendered).to have_selector('[data-event-tracking=click_search_result]')
expect(rendered).to have_selector("[data-event-label=#{scope}]")
end
end
@ -94,8 +94,8 @@ RSpec.describe 'search/_results', feature_category: :global_search do
it 'does not render the click text event tracking attributes' do
render
expect(rendered).not_to have_selector('[data-track-action=click_text]')
expect(rendered).not_to have_selector('[data-track-property=search_result]')
expect(rendered).not_to have_selector('[data-event-tracking=click_search_result]')
expect(rendered).not_to have_selector("[data-event-label=#{scope}]")
end
end
end
@ -135,8 +135,8 @@ RSpec.describe 'search/_results', feature_category: :global_search do
it 'renders the click text event tracking attributes' do
render
expect(rendered).to have_selector('[data-track-action=click_text]')
expect(rendered).to have_selector('[data-track-property=search_result]')
expect(rendered).to have_selector('[data-event-tracking=click_search_result]')
expect(rendered).to have_selector("[data-event-label=#{scope}]")
end
end
@ -144,8 +144,8 @@ RSpec.describe 'search/_results', feature_category: :global_search do
it 'does not render the click text event tracking attributes' do
render
expect(rendered).not_to have_selector('[data-track-action=click_text]')
expect(rendered).not_to have_selector('[data-track-property=search_result]')
expect(rendered).not_to have_selector('[data-event-tracking=click_search_result]')
expect(rendered).not_to have_selector("[data-event-label=#{scope}]")
end
end