diff --git a/db/migrate/20241021123147_allow_null_file_checksum_in_xray_reports.rb b/db/migrate/20241021123147_allow_null_file_checksum_in_xray_reports.rb new file mode 100644 index 0000000000000000000000000000000000000000..f7e5ee98c29221833c85e082127b0c21d7b82d5c --- /dev/null +++ b/db/migrate/20241021123147_allow_null_file_checksum_in_xray_reports.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class AllowNullFileChecksumInXrayReports < Gitlab::Database::Migration[2.2] + milestone '17.6' + + def change + change_column_null :xray_reports, :file_checksum, true + end +end diff --git a/db/schema_migrations/20241021123147 b/db/schema_migrations/20241021123147 new file mode 100644 index 0000000000000000000000000000000000000000..2a46711a1d6924b66cb65d37136b5e7113709a4c --- /dev/null +++ b/db/schema_migrations/20241021123147 @@ -0,0 +1 @@ +b7dcafc4a5211261d39d17e8879a445297297faa021b739f36435774790d1987 \ No newline at end of file diff --git a/db/structure.sql b/db/structure.sql index f3aaf7324bcd8ffcf1b8c784b8b91ce333eb86c5..9a4d58bbc1b953906c938e2659196789a21f3499 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -21490,7 +21490,7 @@ CREATE TABLE xray_reports ( updated_at timestamp with time zone NOT NULL, lang text NOT NULL, payload jsonb NOT NULL, - file_checksum bytea NOT NULL, + file_checksum bytea, CONSTRAINT check_6da5a3b473 CHECK ((char_length(lang) <= 255)) ); diff --git a/ee/app/models/projects/xray_report.rb b/ee/app/models/projects/xray_report.rb index 27e5dd5ba1c95e5c48c75db5a9ee77b9ae1e542d..4c76e95c2dce0280c378f5313c7bfe64b44d36c6 100644 --- a/ee/app/models/projects/xray_report.rb +++ b/ee/app/models/projects/xray_report.rb @@ -3,10 +3,13 @@ module Projects class XrayReport < ApplicationRecord include Gitlab::Utils::StrongMemoize + include IgnorableColumns + + ignore_column :file_checksum, remove_with: '17.8', remove_after: '2024-12-22' belongs_to :project - validates :project, :payload, :lang, :file_checksum, presence: true + validates :project, :payload, :lang, presence: true validates :lang, uniqueness: { scope: :project } validates :payload, json_schema: { filename: 'xray_report' } diff --git a/ee/app/services/ai/repository_xray/scan_dependencies_service.rb b/ee/app/services/ai/repository_xray/scan_dependencies_service.rb index ce79abbf131f148867926012d1aa466e7805bcfa..4be407166e3463e1d741872be871b56a2b15a3be 100644 --- a/ee/app/services/ai/repository_xray/scan_dependencies_service.rb +++ b/ee/app/services/ai/repository_xray/scan_dependencies_service.rb @@ -42,15 +42,12 @@ def process def save_xray_reports(config_files) config_files_by_lang = config_files.group_by { |cf| cf.class.lang } - # TODO: `file_checksum` to be removed in https://gitlab.com/gitlab-org/gitlab/-/issues/479185. - file_checksum = config_files.first.payload[:checksum] reports_array = config_files_by_lang.map do |(lang, config_files)| { project_id: project.id, payload: merge_payloads(config_files), - lang: lang, - file_checksum: file_checksum + lang: lang } end diff --git a/ee/app/services/ai/store_repository_xray_service.rb b/ee/app/services/ai/store_repository_xray_service.rb index 32d5c9477fe21c5d2edf0b5715e91a2beac792dc..9820cb458ddd11775480d92d5475e947e382d18f 100644 --- a/ee/app/services/ai/store_repository_xray_service.rb +++ b/ee/app/services/ai/store_repository_xray_service.rb @@ -17,7 +17,7 @@ def execute content = ::Gitlab::Json.parse(blob) Projects::XrayReport .upsert( - { project_id: pipeline.project_id, payload: content, lang: lang, file_checksum: content['checksum'] }, + { project_id: pipeline.project_id, payload: content, lang: lang }, unique_by: [:project_id, :lang] ) rescue JSON::ParserError => e diff --git a/ee/app/services/code_suggestions/xray/store_dependencies_service.rb b/ee/app/services/code_suggestions/xray/store_dependencies_service.rb index 788a3e1167aff27cf06beb92cddbd5046755c130..31d3e10df27d2a248310743227541aa0224a846f 100644 --- a/ee/app/services/code_suggestions/xray/store_dependencies_service.rb +++ b/ee/app/services/code_suggestions/xray/store_dependencies_service.rb @@ -22,7 +22,7 @@ def execute } Projects::XrayReport.upsert( - { project_id: project.id, payload: payload, lang: language, file_checksum: checksum }, + { project_id: project.id, payload: payload, lang: language }, unique_by: [:project_id, :lang] ) diff --git a/ee/spec/factories/projects/xray_reports.rb b/ee/spec/factories/projects/xray_reports.rb index 33d528c04fe77a655235536d68205bacd52d8b1e..3c5b6ca366eda05ff1681a298dead6b0203889ff 100644 --- a/ee/spec/factories/projects/xray_reports.rb +++ b/ee/spec/factories/projects/xray_reports.rb @@ -4,7 +4,6 @@ factory :xray_report, class: 'Projects::XrayReport' do project lang { 'Ruby' } - file_checksum { '53b5964d32d30fc60089fb54cd73538003a487afdd5d6a3b549ae162ce4819cd' } payload do { "scannerVersion" => "0.0.1", diff --git a/ee/spec/models/projects/xray_report_spec.rb b/ee/spec/models/projects/xray_report_spec.rb index 42826a5cbc1ffd3462dc3bec9657f12dbe6794d3..504691168d16104e78dc59df924dce27d8dc7b54 100644 --- a/ee/spec/models/projects/xray_report_spec.rb +++ b/ee/spec/models/projects/xray_report_spec.rb @@ -9,7 +9,6 @@ it { is_expected.to validate_presence_of(:project) } it { is_expected.to validate_presence_of(:lang) } it { is_expected.to validate_presence_of(:payload) } - it { is_expected.to validate_presence_of(:file_checksum) } it 'validates uniqueness of lang and project', :aggregate_failures do create(:xray_report, project: project, lang: 'Ruby') diff --git a/ee/spec/services/code_suggestions/xray/store_dependencies_service_spec.rb b/ee/spec/services/code_suggestions/xray/store_dependencies_service_spec.rb index 2d64c0c57311c24d2fae76a407977d48f1976cf1..50a98a4a4cb51dce1b9aabc8ea90f4029edb9dfb 100644 --- a/ee/spec/services/code_suggestions/xray/store_dependencies_service_spec.rb +++ b/ee/spec/services/code_suggestions/xray/store_dependencies_service_spec.rb @@ -27,7 +27,6 @@ report = project.xray_reports.last! expect(report.lang).to eq(language) - expect(report.file_checksum).to be_present expect(report.payload['checksum']).to be_present expect(report.payload['scannerVersion']).to eq(scanner_version) expect(report.payload['libs']).to match_array(dependencies_hash)