Skip to content
代码片段 群组 项目
未验证 提交 6bc0eac1 编辑于 作者: Lorenz van Herwaarden's avatar Lorenz van Herwaarden 提交者: GitLab
浏览文件

Merge branch 'add-vulnerability-work-item-widget' into 'master'

No related branches found
No related tags found
2 合并请求!3031Merge per-main-jh to main-jh by luzhiyuan,!3030Merge per-main-jh to main-jh
显示
136 个添加6 个删除
...@@ -298,6 +298,7 @@ ...@@ -298,6 +298,7 @@
"WorkItemWidgetTestReports", "WorkItemWidgetTestReports",
"WorkItemWidgetTimeTracking", "WorkItemWidgetTimeTracking",
"WorkItemWidgetVerificationStatus", "WorkItemWidgetVerificationStatus",
"WorkItemWidgetVulnerabilities",
"WorkItemWidgetWeight" "WorkItemWidgetWeight"
], ],
"WorkItemWidgetDefinition": [ "WorkItemWidgetDefinition": [
......
...@@ -45,7 +45,8 @@ class WidgetDefinition < ApplicationRecord ...@@ -45,7 +45,8 @@ class WidgetDefinition < ApplicationRecord
custom_status: 26, custom_status: 26,
linked_resources: 27, linked_resources: 27,
custom_fields: 28, # EE-only custom_fields: 28, # EE-only
error_tracking: 29 error_tracking: 29,
vulnerabilities: 30 # EE-only
} }
attribute :widget_options, ::Gitlab::Database::Type::IndifferentJsonb.new attribute :widget_options, ::Gitlab::Database::Type::IndifferentJsonb.new
......
# frozen_string_literal: true
class AddVulnerabilitiesWidgetToWorkItemTypes < Gitlab::Database::Migration[2.2]
include Gitlab::Database::MigrationHelpers::WorkItems::Widgets
restrict_gitlab_migration gitlab_schema: :gitlab_main
disable_ddl_transaction!
milestone '17.10'
WORK_ITEM_TYPE_ENUM_VALUES = [0] # issue
WIDGETS = [
{
name: 'Vulnerabilities',
widget_type: 30
}
]
def up
add_widget_definitions(type_enum_values: WORK_ITEM_TYPE_ENUM_VALUES, widgets: WIDGETS)
end
def down
remove_widget_definitions(type_enum_values: WORK_ITEM_TYPE_ENUM_VALUES, widgets: WIDGETS)
end
end
99672a385440dbf7119382fc9b722e6fb400ab743a1c5daeaa42e4af93837691
\ No newline at end of file
...@@ -40374,6 +40374,17 @@ Represents a verification status widget. ...@@ -40374,6 +40374,17 @@ Represents a verification status widget.
| <a id="workitemwidgetverificationstatustype"></a>`type` | [`WorkItemWidgetType`](#workitemwidgettype) | Widget type. | | <a id="workitemwidgetverificationstatustype"></a>`type` | [`WorkItemWidgetType`](#workitemwidgettype) | Widget type. |
| <a id="workitemwidgetverificationstatusverificationstatus"></a>`verificationStatus` {{< icon name="warning-solid" >}} | [`String`](#string) | **Introduced** in GitLab 15.5. **Status**: Experiment. Verification status of the work item. | | <a id="workitemwidgetverificationstatusverificationstatus"></a>`verificationStatus` {{< icon name="warning-solid" >}} | [`String`](#string) | **Introduced** in GitLab 15.5. **Status**: Experiment. Verification status of the work item. |
   
### `WorkItemWidgetVulnerabilities`
Represents a vulnerabilities widget.
#### Fields
| Name | Type | Description |
| ---- | ---- | ----------- |
| <a id="workitemwidgetvulnerabilitiesrelatedvulnerabilities"></a>`relatedVulnerabilities` {{< icon name="warning-solid" >}} | [`VulnerabilityConnection`](#vulnerabilityconnection) | **Introduced** in GitLab 17.10. **Status**: Experiment. Related vulnerabilities of the work item. |
| <a id="workitemwidgetvulnerabilitiestype"></a>`type` | [`WorkItemWidgetType`](#workitemwidgettype) | Widget type. |
### `WorkItemWidgetWeight` ### `WorkItemWidgetWeight`
   
Represents a weight widget. Represents a weight widget.
...@@ -44283,6 +44294,7 @@ Type of a work item widget. ...@@ -44283,6 +44294,7 @@ Type of a work item widget.
| <a id="workitemwidgettypetest_reports"></a>`TEST_REPORTS` | Test Reports widget. | | <a id="workitemwidgettypetest_reports"></a>`TEST_REPORTS` | Test Reports widget. |
| <a id="workitemwidgettypetime_tracking"></a>`TIME_TRACKING` | Time Tracking widget. | | <a id="workitemwidgettypetime_tracking"></a>`TIME_TRACKING` | Time Tracking widget. |
| <a id="workitemwidgettypeverification_status"></a>`VERIFICATION_STATUS` | Verification Status widget. | | <a id="workitemwidgettypeverification_status"></a>`VERIFICATION_STATUS` | Verification Status widget. |
| <a id="workitemwidgettypevulnerabilities"></a>`VULNERABILITIES` | Vulnerabilities widget. |
| <a id="workitemwidgettypeweight"></a>`WEIGHT` | Weight widget. | | <a id="workitemwidgettypeweight"></a>`WEIGHT` | Weight widget. |
   
### `WorkspaceVariableInputType` ### `WorkspaceVariableInputType`
...@@ -46690,6 +46702,7 @@ Implementations: ...@@ -46690,6 +46702,7 @@ Implementations:
- [`WorkItemWidgetTestReports`](#workitemwidgettestreports) - [`WorkItemWidgetTestReports`](#workitemwidgettestreports)
- [`WorkItemWidgetTimeTracking`](#workitemwidgettimetracking) - [`WorkItemWidgetTimeTracking`](#workitemwidgettimetracking)
- [`WorkItemWidgetVerificationStatus`](#workitemwidgetverificationstatus) - [`WorkItemWidgetVerificationStatus`](#workitemwidgetverificationstatus)
- [`WorkItemWidgetVulnerabilities`](#workitemwidgetvulnerabilities)
- [`WorkItemWidgetWeight`](#workitemwidgetweight) - [`WorkItemWidgetWeight`](#workitemwidgetweight)
   
##### Fields ##### Fields
...@@ -25,7 +25,8 @@ def type_mappings ...@@ -25,7 +25,8 @@ def type_mappings
::WorkItems::Widgets::RequirementLegacy => ::Types::WorkItems::Widgets::RequirementLegacyType, ::WorkItems::Widgets::RequirementLegacy => ::Types::WorkItems::Widgets::RequirementLegacyType,
::WorkItems::Widgets::TestReports => ::Types::WorkItems::Widgets::TestReportsType, ::WorkItems::Widgets::TestReports => ::Types::WorkItems::Widgets::TestReportsType,
::WorkItems::Widgets::Color => ::Types::WorkItems::Widgets::ColorType, ::WorkItems::Widgets::Color => ::Types::WorkItems::Widgets::ColorType,
::WorkItems::Widgets::CustomFields => ::Types::WorkItems::Widgets::CustomFieldsType ::WorkItems::Widgets::CustomFields => ::Types::WorkItems::Widgets::CustomFieldsType,
::WorkItems::Widgets::Vulnerabilities => ::Types::WorkItems::Widgets::VulnerabilitiesType
}.freeze }.freeze
orphan_types(*type_mappings.values) orphan_types(*type_mappings.values)
......
# frozen_string_literal: true
module Types
module WorkItems
module Widgets
# rubocop:disable Graphql/AuthorizeTypes -- Disabling widget level authorization
class VulnerabilitiesType < BaseObject
graphql_name 'WorkItemWidgetVulnerabilities'
description 'Represents a vulnerabilities widget'
implements ::Types::WorkItems::WidgetInterface
field :related_vulnerabilities, ::Types::VulnerabilityType.connection_type,
null: true,
description: 'Related vulnerabilities of the work item.',
experiment: { milestone: '17.10' }
end
# rubocop:enable Graphql/AuthorizeTypes
end
end
end
...@@ -18,7 +18,8 @@ module Type ...@@ -18,7 +18,8 @@ module Type
issuable_health_status: ::WorkItems::Widgets::HealthStatus, issuable_health_status: ::WorkItems::Widgets::HealthStatus,
okrs: ::WorkItems::Widgets::Progress, okrs: ::WorkItems::Widgets::Progress,
epic_colors: ::WorkItems::Widgets::Color, epic_colors: ::WorkItems::Widgets::Color,
custom_fields: ::WorkItems::Widgets::CustomFields custom_fields: ::WorkItems::Widgets::CustomFields,
security_dashboard: ::WorkItems::Widgets::Vulnerabilities
}.freeze }.freeze
LICENSED_TYPES = { epic: :epics, objective: :okrs, key_result: :okrs, requirement: :requirements }.freeze LICENSED_TYPES = { epic: :epics, objective: :okrs, key_result: :okrs, requirement: :requirements }.freeze
......
# frozen_string_literal: true
module WorkItems
module Widgets
class Vulnerabilities < Base
delegate :related_vulnerabilities, to: :work_item
end
end
end
# frozen_string_literal: true
module WorkItems
module DataSync
module Widgets
class Vulnerabilities < Base
def after_save_commit
# copy Vulnerabilities
end
def post_move_cleanup
# do it
end
end
end
end
end
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
WorkItems::Widgets::Color | Types::WorkItems::Widgets::ColorType WorkItems::Widgets::Color | Types::WorkItems::Widgets::ColorType
WorkItems::Widgets::RequirementLegacy | Types::WorkItems::Widgets::RequirementLegacyType WorkItems::Widgets::RequirementLegacy | Types::WorkItems::Widgets::RequirementLegacyType
WorkItems::Widgets::TestReports | Types::WorkItems::Widgets::TestReportsType WorkItems::Widgets::TestReports | Types::WorkItems::Widgets::TestReportsType
WorkItems::Widgets::Vulnerabilities | Types::WorkItems::Widgets::VulnerabilitiesType
end end
with_them do with_them do
......
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Types::WorkItems::Widgets::VulnerabilitiesType, feature_category: :vulnerability_management do
let(:fields) do
%i[type related_vulnerabilities]
end
specify { expect(described_class.graphql_name).to eq('WorkItemWidgetVulnerabilities') }
specify { expect(described_class).to have_graphql_fields(fields) }
end
...@@ -35,7 +35,8 @@ ...@@ -35,7 +35,8 @@
::WorkItems::Widgets::EmailParticipants, ::WorkItems::Widgets::EmailParticipants,
::WorkItems::Widgets::CustomStatus, ::WorkItems::Widgets::CustomStatus,
::WorkItems::Widgets::CustomFields, ::WorkItems::Widgets::CustomFields,
::WorkItems::Widgets::ErrorTracking ::WorkItems::Widgets::ErrorTracking,
::WorkItems::Widgets::Vulnerabilities
) )
end end
......
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe WorkItems::Widgets::Vulnerabilities, feature_category: :vulnerability_management do
let_it_be(:work_item) { create(:work_item, :issue) }
describe '#related_vulnerabilities' do
subject { described_class.new(work_item).related_vulnerabilities }
it { is_expected.to eq(work_item.related_vulnerabilities) }
end
end
...@@ -32,7 +32,8 @@ module BaseTypeImporter ...@@ -32,7 +32,8 @@ module BaseTypeImporter
email_participants: 'Email participants', email_participants: 'Email participants',
custom_status: 'Custom status', custom_status: 'Custom status',
custom_fields: 'Custom fields', custom_fields: 'Custom fields',
error_tracking: 'Error tracking' error_tracking: 'Error tracking',
vulnerabilities: 'Vulnerabilities'
}.freeze }.freeze
WIDGETS_FOR_TYPE = { WIDGETS_FOR_TYPE = {
...@@ -58,6 +59,7 @@ module BaseTypeImporter ...@@ -58,6 +59,7 @@ module BaseTypeImporter
:participants, :participants,
:start_and_due_date, :start_and_due_date,
:time_tracking, :time_tracking,
:vulnerabilities,
[:weight, { editable: true, rollup: false }] [:weight, { editable: true, rollup: false }]
], ],
incident: [ incident: [
......
# frozen_string_literal: true
require 'spec_helper'
require_migration!
RSpec.describe AddVulnerabilitiesWidgetToWorkItemTypes, :migration, feature_category: :vulnerability_management do
it_behaves_like 'migration that adds widgets to a work item type'
end
...@@ -36,7 +36,8 @@ ...@@ -36,7 +36,8 @@
::WorkItems::Widgets::RequirementLegacy, ::WorkItems::Widgets::RequirementLegacy,
::WorkItems::Widgets::TestReports, ::WorkItems::Widgets::TestReports,
::WorkItems::Widgets::Color, ::WorkItems::Widgets::Color,
::WorkItems::Widgets::CustomFields ::WorkItems::Widgets::CustomFields,
::WorkItems::Widgets::Vulnerabilities
] ]
end end
......
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册