mirror of
https://github.com/gitlabhq/gitlabhq.git
synced 2025-08-19 01:23:09 +00:00
Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
2
Gemfile
2
Gemfile
@ -755,4 +755,4 @@ gem 'paper_trail', '~> 16.0', feature_category: :shared
|
||||
|
||||
gem "i18n_data", "~> 0.13.1", feature_category: :system_access
|
||||
|
||||
gem "gitlab-cloud-connector", "~> 1.11", require: 'gitlab/cloud_connector', feature_category: :cloud_connector
|
||||
gem "gitlab-cloud-connector", "~> 1.13", require: 'gitlab/cloud_connector', feature_category: :cloud_connector
|
||||
|
@ -219,7 +219,7 @@
|
||||
{"name":"gitaly","version":"17.8.4","platform":"ruby","checksum":"196d9735a83f8a7d396baa216b979eb0c801622d8b7573f90010338d5b0c7b4f"},
|
||||
{"name":"gitlab","version":"4.19.0","platform":"ruby","checksum":"3f645e3e195dbc24f0834fbf83e8ccfb2056d8e9712b01a640aad418a6949679"},
|
||||
{"name":"gitlab-chronic","version":"0.10.6","platform":"ruby","checksum":"a244d11a1396d2aac6ae9b2f326adf1605ec1ad20c29f06e8b672047d415a9ac"},
|
||||
{"name":"gitlab-cloud-connector","version":"1.12.0","platform":"ruby","checksum":"b1eb7b0f5cb6633929681904d92771b387ec126b02319cd6cb62dd04bd5750af"},
|
||||
{"name":"gitlab-cloud-connector","version":"1.13.0","platform":"ruby","checksum":"c2b0bcd1bc775208825a119ad0c8b8e2f6eac6c762e9514f8026d63ace9086e8"},
|
||||
{"name":"gitlab-crystalball","version":"0.8.0","platform":"ruby","checksum":"e99dd0e3abe3416e91340004d45866ece6357f7e12702174ffc5a097763c2bc1"},
|
||||
{"name":"gitlab-dangerfiles","version":"4.9.1","platform":"ruby","checksum":"296b19d8aca5e4da8d391234914a1c4dfedc29700ddbcd9c554b6ffaa7fdf1b2"},
|
||||
{"name":"gitlab-experiment","version":"0.9.1","platform":"ruby","checksum":"f230ee742154805a755d5f2539dc44d93cdff08c5bbbb7656018d61f93d01f48"},
|
||||
|
@ -746,7 +746,7 @@ GEM
|
||||
terminal-table (>= 1.5.1)
|
||||
gitlab-chronic (0.10.6)
|
||||
numerizer (~> 0.2)
|
||||
gitlab-cloud-connector (1.12.0)
|
||||
gitlab-cloud-connector (1.13.0)
|
||||
activesupport (~> 7.0)
|
||||
jwt (~> 2.9.3)
|
||||
gitlab-crystalball (0.8.0)
|
||||
@ -2159,7 +2159,7 @@ DEPENDENCIES
|
||||
gitlab-active-context!
|
||||
gitlab-backup-cli!
|
||||
gitlab-chronic (~> 0.10.5)
|
||||
gitlab-cloud-connector (~> 1.11)
|
||||
gitlab-cloud-connector (~> 1.13)
|
||||
gitlab-crystalball (~> 0.8.0)
|
||||
gitlab-dangerfiles (~> 4.9.0)
|
||||
gitlab-duo-workflow-service-client (~> 0.1)!
|
||||
|
@ -219,7 +219,7 @@
|
||||
{"name":"gitaly","version":"17.8.4","platform":"ruby","checksum":"196d9735a83f8a7d396baa216b979eb0c801622d8b7573f90010338d5b0c7b4f"},
|
||||
{"name":"gitlab","version":"4.19.0","platform":"ruby","checksum":"3f645e3e195dbc24f0834fbf83e8ccfb2056d8e9712b01a640aad418a6949679"},
|
||||
{"name":"gitlab-chronic","version":"0.10.6","platform":"ruby","checksum":"a244d11a1396d2aac6ae9b2f326adf1605ec1ad20c29f06e8b672047d415a9ac"},
|
||||
{"name":"gitlab-cloud-connector","version":"1.12.0","platform":"ruby","checksum":"b1eb7b0f5cb6633929681904d92771b387ec126b02319cd6cb62dd04bd5750af"},
|
||||
{"name":"gitlab-cloud-connector","version":"1.13.0","platform":"ruby","checksum":"c2b0bcd1bc775208825a119ad0c8b8e2f6eac6c762e9514f8026d63ace9086e8"},
|
||||
{"name":"gitlab-crystalball","version":"0.8.0","platform":"ruby","checksum":"e99dd0e3abe3416e91340004d45866ece6357f7e12702174ffc5a097763c2bc1"},
|
||||
{"name":"gitlab-dangerfiles","version":"4.9.1","platform":"ruby","checksum":"296b19d8aca5e4da8d391234914a1c4dfedc29700ddbcd9c554b6ffaa7fdf1b2"},
|
||||
{"name":"gitlab-experiment","version":"0.9.1","platform":"ruby","checksum":"f230ee742154805a755d5f2539dc44d93cdff08c5bbbb7656018d61f93d01f48"},
|
||||
|
@ -746,7 +746,7 @@ GEM
|
||||
terminal-table (>= 1.5.1)
|
||||
gitlab-chronic (0.10.6)
|
||||
numerizer (~> 0.2)
|
||||
gitlab-cloud-connector (1.12.0)
|
||||
gitlab-cloud-connector (1.13.0)
|
||||
activesupport (~> 7.0)
|
||||
jwt (~> 2.9.3)
|
||||
gitlab-crystalball (0.8.0)
|
||||
@ -2159,7 +2159,7 @@ DEPENDENCIES
|
||||
gitlab-active-context!
|
||||
gitlab-backup-cli!
|
||||
gitlab-chronic (~> 0.10.5)
|
||||
gitlab-cloud-connector (~> 1.11)
|
||||
gitlab-cloud-connector (~> 1.13)
|
||||
gitlab-crystalball (~> 0.8.0)
|
||||
gitlab-dangerfiles (~> 4.9.0)
|
||||
gitlab-duo-workflow-service-client (~> 0.1)!
|
||||
|
@ -50,6 +50,13 @@ module Resolvers
|
||||
required: false,
|
||||
description: 'Date when the group was marked for deletion.'
|
||||
|
||||
argument :active, GraphQL::Types::Boolean,
|
||||
required: false,
|
||||
default_value: nil,
|
||||
description: 'When `nil` (default value), returns all groups. ' \
|
||||
'When `true`, returns only groups that are not pending deletion. ' \
|
||||
'When `false`, only returns groups that are pending deletion.'
|
||||
|
||||
private
|
||||
|
||||
def resolve_groups(parent_path: nil, **args)
|
||||
|
@ -8,6 +8,8 @@ module Types
|
||||
|
||||
implements ::Types::Namespaces::GroupInterface
|
||||
|
||||
connection_type_class Types::CountableConnectionType
|
||||
|
||||
authorize :read_group
|
||||
|
||||
expose_permissions Types::PermissionTypes::Group
|
||||
|
@ -0,0 +1,10 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class DropResourceLabelEventsReferenceHtml < Gitlab::Database::Migration[2.3]
|
||||
milestone '18.1'
|
||||
|
||||
def change
|
||||
remove_column :resource_label_events, :reference_html, :text
|
||||
remove_column :resource_label_events, :cached_markdown_version, :integer
|
||||
end
|
||||
end
|
1
db/schema_migrations/20250512000129
Normal file
1
db/schema_migrations/20250512000129
Normal file
@ -0,0 +1 @@
|
||||
c6922683ddd72f3983c90f979e2ae114ee204d873576dc7efe666c426e55c654
|
@ -22079,9 +22079,7 @@ CREATE TABLE resource_label_events (
|
||||
label_id bigint,
|
||||
user_id bigint,
|
||||
created_at timestamp with time zone NOT NULL,
|
||||
cached_markdown_version integer,
|
||||
reference text,
|
||||
reference_html text,
|
||||
imported_from smallint DEFAULT 0 NOT NULL
|
||||
);
|
||||
|
||||
|
@ -747,6 +747,7 @@ four standard [pagination arguments](#pagination-arguments):
|
||||
|
||||
| Name | Type | Description |
|
||||
| ---- | ---- | ----------- |
|
||||
| <a id="querygroupsactive"></a>`active` | [`Boolean`](#boolean) | When `nil` (default value), returns all groups. When `true`, returns only groups that are not pending deletion. When `false`, only returns groups that are pending deletion. |
|
||||
| <a id="querygroupsallavailable"></a>`allAvailable` | [`Boolean`](#boolean) | When `true`, returns all accessible groups. When `false`, returns only groups where the user is a member. Unauthenticated requests always return all public groups. The `owned_only` argument takes precedence. |
|
||||
| <a id="querygroupsids"></a>`ids` | [`[ID!]`](#id) | Filter groups by IDs. |
|
||||
| <a id="querygroupsmarkedfordeletionon"></a>`markedForDeletionOn` | [`Date`](#date) | Date when the group was marked for deletion. |
|
||||
@ -2165,6 +2166,34 @@ Input type: `AiFeatureSettingUpdateInput`
|
||||
| <a id="mutationaifeaturesettingupdateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
|
||||
| <a id="mutationaifeaturesettingupdateerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during the mutation. |
|
||||
|
||||
### `Mutation.aiModelSelectionNamespaceUpdate`
|
||||
|
||||
Updates or creates settings for AI features for a namespace.
|
||||
|
||||
{{< details >}}
|
||||
**Introduced** in GitLab 18.1.
|
||||
**Status**: Experiment.
|
||||
{{< /details >}}
|
||||
|
||||
Input type: `AiModelSelectionNamespaceUpdateInput`
|
||||
|
||||
#### Arguments
|
||||
|
||||
| Name | Type | Description |
|
||||
| ---- | ---- | ----------- |
|
||||
| <a id="mutationaimodelselectionnamespaceupdateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
|
||||
| <a id="mutationaimodelselectionnamespaceupdatefeatures"></a>`features` | [`[AiModelSelectionFeatures!]!`](#aimodelselectionfeatures) | Array of AI features being configured (for single or batch update). |
|
||||
| <a id="mutationaimodelselectionnamespaceupdategroupid"></a>`groupId` | [`GroupID!`](#groupid) | Group for the model selection. |
|
||||
| <a id="mutationaimodelselectionnamespaceupdateofferedmodelref"></a>`offeredModelRef` | [`String!`](#string) | Identifier of the selected model for the feature. |
|
||||
|
||||
#### Fields
|
||||
|
||||
| Name | Type | Description |
|
||||
| ---- | ---- | ----------- |
|
||||
| <a id="mutationaimodelselectionnamespaceupdateaifeaturesettings"></a>`aiFeatureSettings` {{< icon name="warning-solid" >}} | [`[AiModelSelectionNamespaceFeatureSetting!]!`](#aimodelselectionnamespacefeaturesetting) | **Deprecated:** **Status**: Experiment. Introduced in GitLab 18.1. |
|
||||
| <a id="mutationaimodelselectionnamespaceupdateclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
|
||||
| <a id="mutationaimodelselectionnamespaceupdateerrors"></a>`errors` | [`[String!]!`](#string) | Errors encountered during the mutation. |
|
||||
|
||||
### `Mutation.aiSelfHostedModelConnectionCheck`
|
||||
|
||||
Checks if the AI Gateway can establish a connection with the given model configuration.
|
||||
@ -16389,6 +16418,7 @@ The connection type for [`Group`](#group).
|
||||
|
||||
| Name | Type | Description |
|
||||
| ---- | ---- | ----------- |
|
||||
| <a id="groupconnectioncount"></a>`count` | [`Int!`](#int) | Total count of collection. |
|
||||
| <a id="groupconnectionedges"></a>`edges` | [`[GroupEdge]`](#groupedge) | A list of edges. |
|
||||
| <a id="groupconnectionnodes"></a>`nodes` | [`[Group]`](#group) | A list of nodes. |
|
||||
| <a id="groupconnectionpageinfo"></a>`pageInfo` | [`PageInfo!`](#pageinfo) | Information to aid in pagination. |
|
||||
@ -21211,6 +21241,33 @@ Returns [`codeSuggestionMetrics`](#codesuggestionmetrics).
|
||||
| ---- | ---- | ----------- |
|
||||
| <a id="aimetricscodesuggestionslanguages"></a>`languages` | [`[String!]`](#string) | Filter code suggestion metrics by one or more languages. |
|
||||
|
||||
### `AiModelSelectionNamespaceFeatureSetting`
|
||||
|
||||
Model Selection feature setting for namespaces.
|
||||
|
||||
#### Fields
|
||||
|
||||
| Name | Type | Description |
|
||||
| ---- | ---- | ----------- |
|
||||
| <a id="aimodelselectionnamespacefeaturesettingdefaultmodel"></a>`defaultModel` | [`AiModelSelectionOfferedModel`](#aimodelselectionofferedmodel) | LLMs Compatible with the feature. |
|
||||
| <a id="aimodelselectionnamespacefeaturesettingfeature"></a>`feature` | [`String!`](#string) | Identifier for the AI feature. |
|
||||
| <a id="aimodelselectionnamespacefeaturesettingmainfeature"></a>`mainFeature` | [`String`](#string) | Displayed name of the main feature. |
|
||||
| <a id="aimodelselectionnamespacefeaturesettingnamespace"></a>`namespace` | [`Group!`](#group) | Namespace that the feature setting is set for. |
|
||||
| <a id="aimodelselectionnamespacefeaturesettingselectablemodels"></a>`selectableModels` | [`[AiModelSelectionOfferedModel!]!`](#aimodelselectionofferedmodel) | LLMs Compatible with the feature. |
|
||||
| <a id="aimodelselectionnamespacefeaturesettingselectedmodel"></a>`selectedModel` | [`AiModelSelectionOfferedModel`](#aimodelselectionofferedmodel) | Identifier of the current model selected. |
|
||||
| <a id="aimodelselectionnamespacefeaturesettingtitle"></a>`title` | [`String`](#string) | Displayed AI feature name. |
|
||||
|
||||
### `AiModelSelectionOfferedModel`
|
||||
|
||||
Model offered for Model Selection.
|
||||
|
||||
#### Fields
|
||||
|
||||
| Name | Type | Description |
|
||||
| ---- | ---- | ----------- |
|
||||
| <a id="aimodelselectionofferedmodelname"></a>`name` | [`String!`](#string) | Humanized name for the offered model, e.g "Chat GPT 4o". |
|
||||
| <a id="aimodelselectionofferedmodelref"></a>`ref` | [`String!`](#string) | Identifier for the offered model. |
|
||||
|
||||
### `AiSelfHostedModel`
|
||||
|
||||
Self-hosted LLM servers.
|
||||
@ -33973,6 +34030,7 @@ four standard [pagination arguments](#pagination-arguments):
|
||||
|
||||
| Name | Type | Description |
|
||||
| ---- | ---- | ----------- |
|
||||
| <a id="organizationgroupsactive"></a>`active` | [`Boolean`](#boolean) | When `nil` (default value), returns all groups. When `true`, returns only groups that are not pending deletion. When `false`, only returns groups that are pending deletion. |
|
||||
| <a id="organizationgroupsallavailable"></a>`allAvailable` | [`Boolean`](#boolean) | When `true`, returns all accessible groups. When `false`, returns only groups where the user is a member. Unauthenticated requests always return all public groups. The `owned_only` argument takes precedence. |
|
||||
| <a id="organizationgroupsids"></a>`ids` | [`[ID!]`](#id) | Filter groups by IDs. |
|
||||
| <a id="organizationgroupsmarkedfordeletionon"></a>`markedForDeletionOn` | [`Date`](#date) | Date when the group was marked for deletion. |
|
||||
@ -42758,6 +42816,26 @@ Types of messages returned from AI features.
|
||||
| ----- | ----------- |
|
||||
| <a id="aimessagetypetool"></a>`TOOL` | Tool selection message. |
|
||||
|
||||
### `AiModelSelectionFeatures`
|
||||
|
||||
AI features that can be configured through the Model Selection feature settings.
|
||||
|
||||
| Value | Description |
|
||||
| ----- | ----------- |
|
||||
| <a id="aimodelselectionfeaturescode_completions"></a>`CODE_COMPLETIONS` | Code completion feature setting. |
|
||||
| <a id="aimodelselectionfeaturescode_generations"></a>`CODE_GENERATIONS` | Code generation feature setting. |
|
||||
| <a id="aimodelselectionfeaturesduo_chat"></a>`DUO_CHAT` | Duo Chat feature setting. |
|
||||
| <a id="aimodelselectionfeaturesduo_chat_explain_code"></a>`DUO_CHAT_EXPLAIN_CODE` | Duo chat explain code feature setting. |
|
||||
| <a id="aimodelselectionfeaturesduo_chat_explain_vulnerability"></a>`DUO_CHAT_EXPLAIN_VULNERABILITY` | Duo chat explain vulnerability feature setting. |
|
||||
| <a id="aimodelselectionfeaturesduo_chat_fix_code"></a>`DUO_CHAT_FIX_CODE` | Duo chat fix code feature setting. |
|
||||
| <a id="aimodelselectionfeaturesduo_chat_refactor_code"></a>`DUO_CHAT_REFACTOR_CODE` | Duo chat refactor code feature setting. |
|
||||
| <a id="aimodelselectionfeaturesduo_chat_troubleshoot_job"></a>`DUO_CHAT_TROUBLESHOOT_JOB` | Duo chat troubleshoot job feature setting. |
|
||||
| <a id="aimodelselectionfeaturesduo_chat_write_tests"></a>`DUO_CHAT_WRITE_TESTS` | Duo chat write test feature setting. |
|
||||
| <a id="aimodelselectionfeaturesgenerate_commit_message"></a>`GENERATE_COMMIT_MESSAGE` | Generate commit message feature setting. |
|
||||
| <a id="aimodelselectionfeaturesresolve_vulnerability"></a>`RESOLVE_VULNERABILITY` | Resolve vulnerability feature setting. |
|
||||
| <a id="aimodelselectionfeaturessummarize_new_merge_request"></a>`SUMMARIZE_NEW_MERGE_REQUEST` | Summarize new merge request feature setting. |
|
||||
| <a id="aimodelselectionfeaturessummarize_review"></a>`SUMMARIZE_REVIEW` | Summarize review feature setting. |
|
||||
|
||||
### `AiSelfHostedModelReleaseState`
|
||||
|
||||
GitLab release state of the model.
|
||||
|
@ -99,6 +99,11 @@ Amazon Q can analyze your merge request and suggest improvements to your code.
|
||||
It can find things like security issues, quality issues, inefficiencies,
|
||||
and other errors.
|
||||
|
||||
[You can have Amazon Q review automatically](setup.md#enter-the-arn-in-gitlab-and-enable-amazon-q)
|
||||
when you open or reopen a merge request, or you can manually start a review.
|
||||
|
||||
To manually start:
|
||||
|
||||
1. Open your merge request.
|
||||
1. On the **Overview** tab, in a comment, type `/q review`.
|
||||
1. Select **Comment**.
|
||||
|
@ -39466,6 +39466,9 @@ msgstr ""
|
||||
msgid "Model registry"
|
||||
msgstr ""
|
||||
|
||||
msgid "Model selection is only available for top-level namespaces."
|
||||
msgstr ""
|
||||
|
||||
msgid "Model version not found"
|
||||
msgstr ""
|
||||
|
||||
|
@ -16,6 +16,7 @@ RSpec.describe 'searching groups', :with_license, feature_category: :groups_and_
|
||||
nodes {
|
||||
#{all_graphql_fields_for('Group', excluded: %w[runners ciQueueingHistory])}
|
||||
}
|
||||
count
|
||||
FIELDS
|
||||
end
|
||||
|
||||
@ -31,6 +32,12 @@ RSpec.describe 'searching groups', :with_license, feature_category: :groups_and_
|
||||
|
||||
subject { post_graphql(query, current_user: user) }
|
||||
|
||||
it 'is countable' do
|
||||
subject
|
||||
|
||||
expect(graphql_data_at(:groups, :count)).to eq(1)
|
||||
end
|
||||
|
||||
describe "Query groups(search)" do
|
||||
let(:groups) { graphql_data_at(:groups, :nodes) }
|
||||
let(:names) { groups.map { |group| group["name"] } } # rubocop: disable Rails/Pluck
|
||||
@ -96,6 +103,59 @@ RSpec.describe 'searching groups', :with_license, feature_category: :groups_and_
|
||||
end
|
||||
end
|
||||
|
||||
describe 'active argument' do
|
||||
let_it_be(:group_pending_deletion) { create(:group_with_deletion_schedule, owners: user) }
|
||||
|
||||
context 'when active argument is nil' do
|
||||
it 'returns all groups' do
|
||||
subject
|
||||
|
||||
expect(graphql_data_at(:groups,
|
||||
:nodes)).to match_array([a_graphql_entity_for(public_group), a_graphql_entity_for(group_pending_deletion)])
|
||||
end
|
||||
end
|
||||
|
||||
context 'when active argument is true' do
|
||||
let(:query) do
|
||||
<<~QUERY
|
||||
query {
|
||||
groups(active: true) {
|
||||
nodes {
|
||||
id
|
||||
}
|
||||
}
|
||||
}
|
||||
QUERY
|
||||
end
|
||||
|
||||
it 'returns only groups that are not pending deletion' do
|
||||
subject
|
||||
|
||||
expect(graphql_data_at(:groups, :nodes)).to match_array([a_graphql_entity_for(public_group)])
|
||||
end
|
||||
end
|
||||
|
||||
context 'when active argument is false' do
|
||||
let(:query) do
|
||||
<<~QUERY
|
||||
query {
|
||||
groups(active: false) {
|
||||
nodes {
|
||||
id
|
||||
}
|
||||
}
|
||||
}
|
||||
QUERY
|
||||
end
|
||||
|
||||
it 'returns only groups that are pending deletion' do
|
||||
subject
|
||||
|
||||
expect(graphql_data_at(:groups, :nodes)).to match_array([a_graphql_entity_for(group_pending_deletion)])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'group sorting' do
|
||||
let_it_be(:public_group2) { create(:group, :public, name: 'Group C') }
|
||||
let_it_be(:public_group3) { create(:group, :public, name: 'Group D') }
|
||||
|
Reference in New Issue
Block a user