From 2a708022d45768d45279ba8acb185bba2f6047be Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Thu, 3 Jul 2025 03:10:37 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .../pagination_bar/pagination_bar.vue | 2 +- .../work_items/widgets/linked_resources.rb | 4 ++- config/gitlab_loose_foreign_keys.yml | 4 +++ config/routes.rb | 1 + db/docs/vulnerability_partial_scans.yml | 13 ++++++++++ ...0250624192419_create_partial_scan_table.rb | 16 ++++++++++++ ...3036_add_foreign_key_to_partial_scan_id.rb | 16 ++++++++++++ ...0_remove_p_ci_builds_trigger_request_id.rb | 2 ++ db/schema_migrations/20250624192419 | 1 + db/schema_migrations/20250624193036 | 1 + db/structure.sql | 18 +++++++++++++ lib/gitlab/ci/reports/security/scan.rb | 3 ++- locale/gitlab.pot | 23 ++++++++++++++++- scripts/frontend/quarantined_vue3_specs.txt | 1 - .../gitlab/ci/reports/security/scan_spec.rb | 25 ++++++++++++++++--- .../widgets/linked_resources_spec.rb | 13 +++++++++- 16 files changed, 134 insertions(+), 9 deletions(-) create mode 100644 db/docs/vulnerability_partial_scans.yml create mode 100644 db/migrate/20250624192419_create_partial_scan_table.rb create mode 100644 db/migrate/20250624193036_add_foreign_key_to_partial_scan_id.rb create mode 100644 db/schema_migrations/20250624192419 create mode 100644 db/schema_migrations/20250624193036 diff --git a/app/assets/javascripts/vue_shared/components/pagination_bar/pagination_bar.vue b/app/assets/javascripts/vue_shared/components/pagination_bar/pagination_bar.vue index 2a12e21d2e5..2ba99c75185 100644 --- a/app/assets/javascripts/vue_shared/components/pagination_bar/pagination_bar.vue +++ b/app/assets/javascripts/vue_shared/components/pagination_bar/pagination_bar.vue @@ -113,7 +113,7 @@ export default {
- + diff --git a/app/models/work_items/widgets/linked_resources.rb b/app/models/work_items/widgets/linked_resources.rb index 7736941c125..5f30075ba32 100644 --- a/app/models/work_items/widgets/linked_resources.rb +++ b/app/models/work_items/widgets/linked_resources.rb @@ -3,7 +3,9 @@ module WorkItems module Widgets class LinkedResources < Base - delegate :zoom_meetings, to: :work_item + def zoom_meetings + work_item.zoom_meetings.added_to_issue + end end end end diff --git a/config/gitlab_loose_foreign_keys.yml b/config/gitlab_loose_foreign_keys.yml index 54a5aeb109e..b8a3a3a19af 100644 --- a/config/gitlab_loose_foreign_keys.yml +++ b/config/gitlab_loose_foreign_keys.yml @@ -821,6 +821,10 @@ vulnerability_occurrences: - table: projects column: project_id on_delete: async_delete +vulnerability_partial_scans: + - table: projects + column: project_id + on_delete: async_delete vulnerability_reads: - table: cluster_agents column: casted_cluster_agent_id diff --git a/config/routes.rb b/config/routes.rb index 643291d2d78..39a441acdb6 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -59,6 +59,7 @@ InitializerConnections.raise_if_new_database_connection do scope path: '/users/sign_up', module: :registrations, as: :users_sign_up do Gitlab.ee do resource :welcome, only: [:show, :update], controller: 'welcome' + resource :trial_welcome, only: [:new], controller: 'trial_welcome' resource :company, only: [:new, :create], controller: 'company' resources :groups, only: [:new, :create] end diff --git a/db/docs/vulnerability_partial_scans.yml b/db/docs/vulnerability_partial_scans.yml new file mode 100644 index 00000000000..0339c527e07 --- /dev/null +++ b/db/docs/vulnerability_partial_scans.yml @@ -0,0 +1,13 @@ +--- +table_name: vulnerability_partial_scans +classes: +- Vulnerabilities::PartialScan +feature_categories: +- vulnerability_management +description: Contains information related to partial scans +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/195373 +milestone: '18.2' +gitlab_schema: gitlab_sec +sharding_key: + project_id: projects +table_size: small diff --git a/db/migrate/20250624192419_create_partial_scan_table.rb b/db/migrate/20250624192419_create_partial_scan_table.rb new file mode 100644 index 00000000000..e15ab7a3fa6 --- /dev/null +++ b/db/migrate/20250624192419_create_partial_scan_table.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class CreatePartialScanTable < Gitlab::Database::Migration[2.3] + milestone '18.2' + + def change + # rubocop:disable Migration/EnsureFactoryForTable -- Ruby namespace differs from table prefix + create_table :vulnerability_partial_scans, id: false do |t| + t.timestamps_with_timezone null: false + t.bigint :scan_id, null: false, primary_key: true, index: true, default: nil + t.bigint :project_id, null: false, index: true + t.integer :mode, limit: 2, null: false + end + # rubocop:enable Migration/EnsureFactoryForTable + end +end diff --git a/db/migrate/20250624193036_add_foreign_key_to_partial_scan_id.rb b/db/migrate/20250624193036_add_foreign_key_to_partial_scan_id.rb new file mode 100644 index 00000000000..29e43b840e2 --- /dev/null +++ b/db/migrate/20250624193036_add_foreign_key_to_partial_scan_id.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class AddForeignKeyToPartialScanId < Gitlab::Database::Migration[2.3] + milestone '18.2' + disable_ddl_transaction! + + def up + add_concurrent_foreign_key :vulnerability_partial_scans, :security_scans, column: :scan_id, on_delete: :cascade + end + + def down + with_lock_retries do + remove_foreign_key_if_exists :vulnerability_partial_scans, column: :scan_id + end + end +end diff --git a/db/post_migrate/20250512060430_remove_p_ci_builds_trigger_request_id.rb b/db/post_migrate/20250512060430_remove_p_ci_builds_trigger_request_id.rb index d84a4942bae..6930e7e00fd 100644 --- a/db/post_migrate/20250512060430_remove_p_ci_builds_trigger_request_id.rb +++ b/db/post_migrate/20250512060430_remove_p_ci_builds_trigger_request_id.rb @@ -11,6 +11,8 @@ class RemovePCiBuildsTriggerRequestId < Gitlab::Database::Migration[2.3] def up return unless can_execute_on?(:ci_builds) + execute("ALTER SEQUENCE ci_builds_id_seq OWNED BY p_ci_builds.id") + remove_column(TABLE, COLUMN) end diff --git a/db/schema_migrations/20250624192419 b/db/schema_migrations/20250624192419 new file mode 100644 index 00000000000..3ba20145620 --- /dev/null +++ b/db/schema_migrations/20250624192419 @@ -0,0 +1 @@ +82bca77125c6ec691f4cb9a65ff3086a980876bf022d12c47bf0194ae1f66d0e \ No newline at end of file diff --git a/db/schema_migrations/20250624193036 b/db/schema_migrations/20250624193036 new file mode 100644 index 00000000000..4e5e892a89c --- /dev/null +++ b/db/schema_migrations/20250624193036 @@ -0,0 +1 @@ +d9bf5dd197018a90a5af537837dd676d4293df494245b09fc604b85ba8d507a1 \ No newline at end of file diff --git a/db/structure.sql b/db/structure.sql index 2ea22968e5d..0df9c3445d4 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -25695,6 +25695,14 @@ CREATE SEQUENCE vulnerability_occurrences_id_seq ALTER SEQUENCE vulnerability_occurrences_id_seq OWNED BY vulnerability_occurrences.id; +CREATE TABLE vulnerability_partial_scans ( + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL, + scan_id bigint NOT NULL, + project_id bigint NOT NULL, + mode smallint NOT NULL +); + CREATE TABLE vulnerability_reads ( id bigint NOT NULL, vulnerability_id bigint NOT NULL, @@ -31840,6 +31848,9 @@ ALTER TABLE ONLY vulnerability_occurrence_identifiers ALTER TABLE ONLY vulnerability_occurrences ADD CONSTRAINT vulnerability_occurrences_pkey PRIMARY KEY (id); +ALTER TABLE ONLY vulnerability_partial_scans + ADD CONSTRAINT vulnerability_partial_scans_pkey PRIMARY KEY (scan_id); + ALTER TABLE ONLY vulnerability_reads ADD CONSTRAINT vulnerability_reads_pkey PRIMARY KEY (id); @@ -38443,6 +38454,10 @@ CREATE INDEX index_vulnerability_occurrences_on_vulnerability_id ON vulnerabilit CREATE INDEX index_vulnerability_occurrences_prim_iden_id_and_vuln_id ON vulnerability_occurrences USING btree (primary_identifier_id, vulnerability_id); +CREATE INDEX index_vulnerability_partial_scans_on_project_id ON vulnerability_partial_scans USING btree (project_id); + +CREATE INDEX index_vulnerability_partial_scans_on_scan_id ON vulnerability_partial_scans USING btree (scan_id); + CREATE INDEX index_vulnerability_reads_common_attrs_for_groups ON vulnerability_reads USING btree (resolved_on_default_branch, state, report_type, severity, traversal_ids, vulnerability_id, has_vulnerability_resolution) WHERE (archived = false); CREATE INDEX index_vulnerability_reads_common_finder_query ON vulnerability_reads USING btree (project_id, state, report_type, severity, vulnerability_id DESC, dismissal_reason, has_vulnerability_resolution); @@ -44220,6 +44235,9 @@ ALTER TABLE ONLY lists ALTER TABLE ONLY agent_activity_events ADD CONSTRAINT fk_d6f785c9fc FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL; +ALTER TABLE ONLY vulnerability_partial_scans + ADD CONSTRAINT fk_d7311920a8 FOREIGN KEY (scan_id) REFERENCES security_scans(id) ON DELETE CASCADE; + ALTER TABLE ONLY user_achievements ADD CONSTRAINT fk_d7653ef780 FOREIGN KEY (revoked_by_user_id) REFERENCES users(id) ON DELETE SET NULL; diff --git a/lib/gitlab/ci/reports/security/scan.rb b/lib/gitlab/ci/reports/security/scan.rb index 6d5c5807ffc..d5f2e0944b5 100644 --- a/lib/gitlab/ci/reports/security/scan.rb +++ b/lib/gitlab/ci/reports/security/scan.rb @@ -5,13 +5,14 @@ module Gitlab module Reports module Security class Scan - attr_accessor :type, :status, :start_time, :end_time + attr_accessor :type, :status, :start_time, :end_time, :partial_scan_mode def initialize(params = {}) @type = params['type'] @status = params['status'] @start_time = params['start_time'] @end_time = params['end_time'] + @partial_scan_mode = params.dig('partial_scan', 'mode') end def to_hash diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 180509fa874..6da1cd1fdb7 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -11646,7 +11646,7 @@ msgstr "" msgid "BulkImport|Select whether user memberships in groups and projects are imported." msgstr "" -msgid "BulkImport|Showing %{start}-%{end} of %{total}" +msgid "BulkImport|Showing %{start} - %{end} of %{total}" msgstr "" msgid "BulkImport|Some groups are imported without projects." @@ -30252,12 +30252,18 @@ msgstr "" msgid "Group milestone" msgstr "" +msgid "Group name" +msgstr "" + msgid "Group name (your organization)" msgstr "" msgid "Group name can contain only letters, digits, dashes, spaces, dots, underscores, parenthesis, and emojis." msgstr "" +msgid "Group name is required." +msgstr "" + msgid "Group name must start with a letter, digit, emoji, or underscore." msgstr "" @@ -48299,6 +48305,9 @@ msgstr "" msgid "Project name can contain only lowercase or uppercase letters, digits, emoji, spaces, dots, underscores, dashes, or pluses." msgstr "" +msgid "Project name is required." +msgstr "" + msgid "Project name must start with a letter, digit, emoji, or underscore." msgstr "" @@ -49478,6 +49487,9 @@ msgstr "" msgid "Projects are where you store your code, access issues, wiki, and other features of GitLab." msgstr "" +msgid "Projects contain the resources for your repository" +msgstr "" + msgid "Projects contributed to" msgstr "" @@ -65539,6 +65551,9 @@ msgstr "" msgid "Trial|Continue" msgstr "" +msgid "Trial|Continue to GitLab" +msgstr "" + msgid "Trial|Continue with trial" msgstr "" @@ -65569,6 +65584,9 @@ msgstr "" msgid "Trial|We need a few more details from you to activate your trial." msgstr "" +msgid "Trial|Welcome to GitLab" +msgstr "" + msgid "Trial|Your free Ultimate & GitLab Duo Enterprise Trial lasts for 60 days. After this period, you can maintain a GitLab Free account forever, or upgrade to a paid plan." msgstr "" @@ -72356,6 +72374,9 @@ msgstr "" msgid "You tried to fork %{link_to_the_project} but it failed for the following reason:" msgstr "" +msgid "You use groups to organize your projects" +msgstr "" + msgid "You will be redirected to %{strong_start}%{domain}%{strong_end} after authorizing." msgstr "" diff --git a/scripts/frontend/quarantined_vue3_specs.txt b/scripts/frontend/quarantined_vue3_specs.txt index db4ae910bb0..8a939ccf110 100644 --- a/scripts/frontend/quarantined_vue3_specs.txt +++ b/scripts/frontend/quarantined_vue3_specs.txt @@ -112,7 +112,6 @@ spec/frontend/vue_popovers_spec.js spec/frontend/vue_shared/components/file_tree_spec.js spec/frontend/vue_shared/components/filtered_search_bar/tokens/date_token_spec.js spec/frontend/vue_shared/components/metric_images/metric_image_details_modal_spec.js -spec/frontend/vue_shared/components/pagination_bar/pagination_bar_spec.js spec/frontend/vue_shared/components/registry/code_instruction_spec.js spec/frontend/vue_shared/components/tooltip_on_truncate_spec.js spec/frontend/vue_shared/components/upload_dropzone/upload_dropzone_spec.js diff --git a/spec/lib/gitlab/ci/reports/security/scan_spec.rb b/spec/lib/gitlab/ci/reports/security/scan_spec.rb index 23427e8608c..a6d80dbc45d 100644 --- a/spec/lib/gitlab/ci/reports/security/scan_spec.rb +++ b/spec/lib/gitlab/ci/reports/security/scan_spec.rb @@ -17,13 +17,32 @@ RSpec.describe Gitlab::Ci::Reports::Security::Scan do context 'when all params are given' do it 'initializes an instance' do - expect { subject }.not_to raise_error - expect(subject).to have_attributes( status: 'success', type: 'dependency-scanning', start_time: 'placeholer', - end_time: 'placholder' + end_time: 'placholder', + partial_scan_mode: nil + ) + end + end + + context 'when partial scan' do + let(:params) do + { + status: 'success', + type: 'dependency-scanning', + start_time: 'placeholer', + end_time: 'placholder', + partial_scan: { + mode: 'differential' + } + } + end + + it 'sets partial_scan_mode attribute' do + expect(subject).to have_attributes( + partial_scan_mode: 'differential' ) end end diff --git a/spec/models/work_items/widgets/linked_resources_spec.rb b/spec/models/work_items/widgets/linked_resources_spec.rb index 7276f69f984..0c0b8dc1c89 100644 --- a/spec/models/work_items/widgets/linked_resources_spec.rb +++ b/spec/models/work_items/widgets/linked_resources_spec.rb @@ -9,6 +9,17 @@ RSpec.describe WorkItems::Widgets::LinkedResources, feature_category: :team_plan describe '#zoom_meetings' do subject { described_class.new(work_item).zoom_meetings } - it { is_expected.to eq(work_item.zoom_meetings) } + context 'when zoom meeting is added' do + it { is_expected.to eq(work_item.zoom_meetings.added_to_issue) } + it { is_expected.to include(zoom_meeting) } + end + + context 'when zoom meeting is removed' do + before do + zoom_meeting.update!(issue_status: :removed) + end + + it { is_expected.not_to include(zoom_meeting) } + end end end