diff --git a/.eslint_todo/vue-no-unused-properties.mjs b/.eslint_todo/vue-no-unused-properties.mjs index 8af51452e10..b1252ee2cdc 100644 --- a/.eslint_todo/vue-no-unused-properties.mjs +++ b/.eslint_todo/vue-no-unused-properties.mjs @@ -290,8 +290,6 @@ export default { 'ee/app/assets/javascripts/metrics/details/metrics_details.vue', 'ee/app/assets/javascripts/metrics/details/metrics_line_chart.vue', 'ee/app/assets/javascripts/metrics/details/related_issues/related_issues_provider.vue', - 'ee/app/assets/javascripts/ml/ai_agents/components/agent_list.vue', - 'ee/app/assets/javascripts/ml/ai_agents/views/list_agents.vue', 'ee/app/assets/javascripts/notes/components/ai_summary.vue', 'ee/app/assets/javascripts/oncall_schedules/components/add_edit_schedule_form.vue', 'ee/app/assets/javascripts/oncall_schedules/components/oncall_schedule.vue', diff --git a/GITLAB_KAS_VERSION b/GITLAB_KAS_VERSION index 7f50b45f095..5ea1c7facd3 100644 --- a/GITLAB_KAS_VERSION +++ b/GITLAB_KAS_VERSION @@ -1 +1 @@ -29df9c3e0ca986ea473dccdba5120f12ca48ee24 +fdc468f3e3100fd467ec62ade667bbccb178b086 diff --git a/Gemfile b/Gemfile index 7e216ca47e5..278286a99bd 100644 --- a/Gemfile +++ b/Gemfile @@ -647,11 +647,7 @@ gem 'gitaly', '~> 17.11.2', feature_category: :gitaly # KAS GRPC protocol definitions gem 'gitlab-kas-grpc', '~> 17.11.0', feature_category: :deployment_management -# Lock the version before issues below are resolved: -# https://gitlab.com/gitlab-org/gitlab/-/issues/473169#note_2028352939 -# Or we can upgrade to a more recent version as long as we can confirm -# that it doesn't have the same issues. -gem 'grpc', '= 1.63.0', feature_category: :shared +gem 'grpc', '~> 1.72.0', feature_category: :shared gem 'google-protobuf', '~> 3.25', '>= 3.25.3', feature_category: :shared diff --git a/Gemfile.checksum b/Gemfile.checksum index ffbcbe533e7..093ea6eb76d 100644 --- a/Gemfile.checksum +++ b/Gemfile.checksum @@ -237,7 +237,7 @@ {"name":"gitlab-markup","version":"2.0.0","platform":"ruby","checksum":"951a1c871463a8f329e6c002b2da337cd547febcc1e33d84df4a212419fba02e"}, {"name":"gitlab-net-dns","version":"0.12.0","platform":"ruby","checksum":"b64afbb0a5d4d1a77306933cac23f3b507667d54a6968dab6ffe91b1ebc6b5a7"}, {"name":"gitlab-sdk","version":"0.3.1","platform":"ruby","checksum":"48ba49084f4ab92df7c7ef9f347020d9dfdf6ed9c1e782b67264e98ffe6ea710"}, -{"name":"gitlab-secret_detection","version":"0.29.0","platform":"ruby","checksum":"50fe8740933e4266ceed427c708dd7cef1429fc51ba9880fa5009b20db60f557"}, +{"name":"gitlab-secret_detection","version":"0.21.1","platform":"ruby","checksum":"0a585055a83aeca5d5faf1866a2c158f0ada570c41f82a224ba00301b8564317"}, {"name":"gitlab-security_report_schemas","version":"0.1.2.min15.0.0.max15.2.1","platform":"ruby","checksum":"300037487ec9d51a814f648514ff521cb82b94fc51d9fe53389175b36ac680ae"}, {"name":"gitlab-styles","version":"13.1.0","platform":"ruby","checksum":"46c7c5729616355868b7b40a4ffcd052b36346076042abe8cafaee1688cbf2c1"}, {"name":"gitlab_chronic_duration","version":"0.12.0","platform":"ruby","checksum":"0d766944d415b5c831f176871ee8625783fc0c5bfbef2d79a3a616f207ffc16d"}, @@ -294,16 +294,17 @@ {"name":"graphlyte","version":"1.0.0","platform":"ruby","checksum":"b5af4ab67dde6e961f00ea1c18f159f73b52ed11395bb4ece297fe628fa1804d"}, {"name":"graphql","version":"2.4.13","platform":"ruby","checksum":"fb1db6e9e24c93c995f8083d66ec65ea70991aa2b68da1b15a360b418af5aa9d"}, {"name":"graphql-docs","version":"5.0.0","platform":"ruby","checksum":"76baca6e5a803a4b6a9fbbbfdbf16742b7c4c546c8592b6e1a7aa4e79e562d04"}, -{"name":"grpc","version":"1.63.0","platform":"aarch64-linux","checksum":"dc75c5fd570b819470781d9512105dddfdd11d984f38b8e60bb946f92d1f79ee"}, -{"name":"grpc","version":"1.63.0","platform":"arm64-darwin","checksum":"91b93a354508a9d1772f095554f2e4c04358c2b32d7a670e3705b7fc4695c996"}, -{"name":"grpc","version":"1.63.0","platform":"ruby","checksum":"5f4383c4ee2886e92c31b90422261b7527f26e3baa585d877e9804e715983686"}, -{"name":"grpc","version":"1.63.0","platform":"x64-mingw-ucrt","checksum":"bbca63f19b45cca5a485f5c5eb363a8684d23a6d0c3421bde5e72e6227291488"}, -{"name":"grpc","version":"1.63.0","platform":"x64-mingw32","checksum":"fb6251f497c8327eda92c4af293ec07fcaec4ffaa2514d3942a7c31406bfaf5b"}, -{"name":"grpc","version":"1.63.0","platform":"x86-linux","checksum":"152140fa2c28e384d3c1ded454a66d5e22fb2ff1d2920c2ef2530b2d707de6fd"}, -{"name":"grpc","version":"1.63.0","platform":"x86-mingw32","checksum":"eed13225b08e705421fef9d986de6c2310ec692df1d80f7a4d407de7c1f98525"}, -{"name":"grpc","version":"1.63.0","platform":"x86_64-darwin","checksum":"a814414ff178e89ee3ad0cc2a826ce1ca96c68063effb81affe3e5ceff7b44cc"}, -{"name":"grpc","version":"1.63.0","platform":"x86_64-linux","checksum":"41a90a597f44959c8dbb94619db2b0c0939a768569a5dfad41fffa227eb1287d"}, +{"name":"grpc","version":"1.72.0","platform":"aarch64-linux","checksum":"4c739fcd66f446d2eb3816a405da0f27c6004902f3a7d46d0de378da1d242009"}, +{"name":"grpc","version":"1.72.0","platform":"arm64-darwin","checksum":"91d5d5b8fa19f8f8053b0eceb43985134b40a1f18c56798a00c438d2d70f652a"}, +{"name":"grpc","version":"1.72.0","platform":"ruby","checksum":"56fa0da2f4f96471f59430a9ef08a612cc77649e8fa118c83ae7d0bb619bea09"}, +{"name":"grpc","version":"1.72.0","platform":"x64-mingw-ucrt","checksum":"ba538fa075b9564a61b153e2ad65c5d3ef506854688ccc73b05701bfb1aabf1d"}, +{"name":"grpc","version":"1.72.0","platform":"x64-mingw32","checksum":"68be646a6ddadc4372e1e36b67d910a5ae3582c0103e0a086fe9b0344e3f57c5"}, +{"name":"grpc","version":"1.72.0","platform":"x86-linux","checksum":"865d16bef67b61cf0c51a77421c6659cff16ed4641a46342ea5c058f041e8127"}, +{"name":"grpc","version":"1.72.0","platform":"x86-mingw32","checksum":"92669eae272d78749351e61405e057dbfff2abddd3e2a25f1689e9ff230efad4"}, +{"name":"grpc","version":"1.72.0","platform":"x86_64-darwin","checksum":"198b5e3eecea88f29e41415db9168bcd1a821763967adc6299bf4946c5137a36"}, +{"name":"grpc","version":"1.72.0","platform":"x86_64-linux","checksum":"3662b40cb1cddce5fb33ae61016138d8dd905523db7d65ad664e6f5ea5354360"}, {"name":"grpc-google-iam-v1","version":"1.5.0","platform":"ruby","checksum":"cea356d150dac69751f6a4c71f1571c8022c69d9f4ce9c18139200932c19374e"}, +{"name":"grpc-tools","version":"1.72.0","platform":"ruby","checksum":"ebd5dc203fae45dad55046baa6654e1e786683b86db972adbeb2cfdbfcf56ab6"}, {"name":"grpc_reflection","version":"0.1.1","platform":"ruby","checksum":"bc47df12f794a407633b5a9eb27fd95118a78d701c325256fff3c9e50819097b"}, {"name":"gssapi","version":"1.3.1","platform":"ruby","checksum":"c51cf30842ee39bd93ce7fc33e20405ff8a04cda9dec6092071b61258284aee1"}, {"name":"guard","version":"2.16.2","platform":"ruby","checksum":"71ba7abaddecc8be91ab77bbaf78f767246603652ebbc7b976fda497ebdc8fbb"}, diff --git a/Gemfile.lock b/Gemfile.lock index c67413d5aac..77a0fe2f45e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -48,7 +48,7 @@ PATH google-cloud-storage_transfer (~> 1.2.0) google-protobuf (~> 3.25, >= 3.25.3) googleauth (~> 1.8.1) - grpc (= 1.63.0) + grpc (~> 1.72.0) json (~> 2.7) jwt (~> 2.5) logger (~> 1.5) @@ -792,8 +792,9 @@ GEM activesupport (>= 5.2.0) rake (~> 13.0) snowplow-tracker (~> 0.8.0) - gitlab-secret_detection (0.29.0) - grpc (~> 1.63.0) + gitlab-secret_detection (0.21.1) + grpc (~> 1.63) + grpc-tools (~> 1.63) grpc_reflection (~> 0.1) parallel (~> 1) re2 (~> 2.7) @@ -966,13 +967,14 @@ GEM graphql (~> 2.0) html-pipeline (~> 2.14, >= 2.14.3) sass-embedded (~> 1.58) - grpc (1.63.0) - google-protobuf (~> 3.25) + grpc (1.72.0) + google-protobuf (>= 3.25, < 5.0) googleapis-common-protos-types (~> 1.0) grpc-google-iam-v1 (1.5.0) google-protobuf (~> 3.18) googleapis-common-protos (~> 1.4) grpc (~> 1.41) + grpc-tools (1.72.0) grpc_reflection (0.1.1) grpc gssapi (1.3.1) @@ -2213,7 +2215,7 @@ DEPENDENCIES graphlyte (~> 1.0.0) graphql (= 2.4.13) graphql-docs (~> 5.0.0) - grpc (= 1.63.0) + grpc (~> 1.72.0) gssapi (~> 1.3.1) guard-rspec haml_lint (~> 0.58) diff --git a/Gemfile.next.checksum b/Gemfile.next.checksum index 45f7d46d882..f89126e0be5 100644 --- a/Gemfile.next.checksum +++ b/Gemfile.next.checksum @@ -237,7 +237,7 @@ {"name":"gitlab-markup","version":"2.0.0","platform":"ruby","checksum":"951a1c871463a8f329e6c002b2da337cd547febcc1e33d84df4a212419fba02e"}, {"name":"gitlab-net-dns","version":"0.12.0","platform":"ruby","checksum":"b64afbb0a5d4d1a77306933cac23f3b507667d54a6968dab6ffe91b1ebc6b5a7"}, {"name":"gitlab-sdk","version":"0.3.1","platform":"ruby","checksum":"48ba49084f4ab92df7c7ef9f347020d9dfdf6ed9c1e782b67264e98ffe6ea710"}, -{"name":"gitlab-secret_detection","version":"0.29.0","platform":"ruby","checksum":"50fe8740933e4266ceed427c708dd7cef1429fc51ba9880fa5009b20db60f557"}, +{"name":"gitlab-secret_detection","version":"0.21.1","platform":"ruby","checksum":"0a585055a83aeca5d5faf1866a2c158f0ada570c41f82a224ba00301b8564317"}, {"name":"gitlab-security_report_schemas","version":"0.1.2.min15.0.0.max15.2.1","platform":"ruby","checksum":"300037487ec9d51a814f648514ff521cb82b94fc51d9fe53389175b36ac680ae"}, {"name":"gitlab-styles","version":"13.1.0","platform":"ruby","checksum":"46c7c5729616355868b7b40a4ffcd052b36346076042abe8cafaee1688cbf2c1"}, {"name":"gitlab_chronic_duration","version":"0.12.0","platform":"ruby","checksum":"0d766944d415b5c831f176871ee8625783fc0c5bfbef2d79a3a616f207ffc16d"}, @@ -294,16 +294,17 @@ {"name":"graphlyte","version":"1.0.0","platform":"ruby","checksum":"b5af4ab67dde6e961f00ea1c18f159f73b52ed11395bb4ece297fe628fa1804d"}, {"name":"graphql","version":"2.4.13","platform":"ruby","checksum":"fb1db6e9e24c93c995f8083d66ec65ea70991aa2b68da1b15a360b418af5aa9d"}, {"name":"graphql-docs","version":"5.0.0","platform":"ruby","checksum":"76baca6e5a803a4b6a9fbbbfdbf16742b7c4c546c8592b6e1a7aa4e79e562d04"}, -{"name":"grpc","version":"1.63.0","platform":"aarch64-linux","checksum":"dc75c5fd570b819470781d9512105dddfdd11d984f38b8e60bb946f92d1f79ee"}, -{"name":"grpc","version":"1.63.0","platform":"arm64-darwin","checksum":"91b93a354508a9d1772f095554f2e4c04358c2b32d7a670e3705b7fc4695c996"}, -{"name":"grpc","version":"1.63.0","platform":"ruby","checksum":"5f4383c4ee2886e92c31b90422261b7527f26e3baa585d877e9804e715983686"}, -{"name":"grpc","version":"1.63.0","platform":"x64-mingw-ucrt","checksum":"bbca63f19b45cca5a485f5c5eb363a8684d23a6d0c3421bde5e72e6227291488"}, -{"name":"grpc","version":"1.63.0","platform":"x64-mingw32","checksum":"fb6251f497c8327eda92c4af293ec07fcaec4ffaa2514d3942a7c31406bfaf5b"}, -{"name":"grpc","version":"1.63.0","platform":"x86-linux","checksum":"152140fa2c28e384d3c1ded454a66d5e22fb2ff1d2920c2ef2530b2d707de6fd"}, -{"name":"grpc","version":"1.63.0","platform":"x86-mingw32","checksum":"eed13225b08e705421fef9d986de6c2310ec692df1d80f7a4d407de7c1f98525"}, -{"name":"grpc","version":"1.63.0","platform":"x86_64-darwin","checksum":"a814414ff178e89ee3ad0cc2a826ce1ca96c68063effb81affe3e5ceff7b44cc"}, -{"name":"grpc","version":"1.63.0","platform":"x86_64-linux","checksum":"41a90a597f44959c8dbb94619db2b0c0939a768569a5dfad41fffa227eb1287d"}, +{"name":"grpc","version":"1.72.0","platform":"aarch64-linux","checksum":"4c739fcd66f446d2eb3816a405da0f27c6004902f3a7d46d0de378da1d242009"}, +{"name":"grpc","version":"1.72.0","platform":"arm64-darwin","checksum":"91d5d5b8fa19f8f8053b0eceb43985134b40a1f18c56798a00c438d2d70f652a"}, +{"name":"grpc","version":"1.72.0","platform":"ruby","checksum":"56fa0da2f4f96471f59430a9ef08a612cc77649e8fa118c83ae7d0bb619bea09"}, +{"name":"grpc","version":"1.72.0","platform":"x64-mingw-ucrt","checksum":"ba538fa075b9564a61b153e2ad65c5d3ef506854688ccc73b05701bfb1aabf1d"}, +{"name":"grpc","version":"1.72.0","platform":"x64-mingw32","checksum":"68be646a6ddadc4372e1e36b67d910a5ae3582c0103e0a086fe9b0344e3f57c5"}, +{"name":"grpc","version":"1.72.0","platform":"x86-linux","checksum":"865d16bef67b61cf0c51a77421c6659cff16ed4641a46342ea5c058f041e8127"}, +{"name":"grpc","version":"1.72.0","platform":"x86-mingw32","checksum":"92669eae272d78749351e61405e057dbfff2abddd3e2a25f1689e9ff230efad4"}, +{"name":"grpc","version":"1.72.0","platform":"x86_64-darwin","checksum":"198b5e3eecea88f29e41415db9168bcd1a821763967adc6299bf4946c5137a36"}, +{"name":"grpc","version":"1.72.0","platform":"x86_64-linux","checksum":"3662b40cb1cddce5fb33ae61016138d8dd905523db7d65ad664e6f5ea5354360"}, {"name":"grpc-google-iam-v1","version":"1.5.0","platform":"ruby","checksum":"cea356d150dac69751f6a4c71f1571c8022c69d9f4ce9c18139200932c19374e"}, +{"name":"grpc-tools","version":"1.72.0","platform":"ruby","checksum":"ebd5dc203fae45dad55046baa6654e1e786683b86db972adbeb2cfdbfcf56ab6"}, {"name":"grpc_reflection","version":"0.1.1","platform":"ruby","checksum":"bc47df12f794a407633b5a9eb27fd95118a78d701c325256fff3c9e50819097b"}, {"name":"gssapi","version":"1.3.1","platform":"ruby","checksum":"c51cf30842ee39bd93ce7fc33e20405ff8a04cda9dec6092071b61258284aee1"}, {"name":"guard","version":"2.16.2","platform":"ruby","checksum":"71ba7abaddecc8be91ab77bbaf78f767246603652ebbc7b976fda497ebdc8fbb"}, diff --git a/Gemfile.next.lock b/Gemfile.next.lock index cd2b10607fe..7466ceeaa6b 100644 --- a/Gemfile.next.lock +++ b/Gemfile.next.lock @@ -48,7 +48,7 @@ PATH google-cloud-storage_transfer (~> 1.2.0) google-protobuf (~> 3.25, >= 3.25.3) googleauth (~> 1.8.1) - grpc (= 1.63.0) + grpc (~> 1.72.0) json (~> 2.7) jwt (~> 2.5) logger (~> 1.5) @@ -786,8 +786,9 @@ GEM activesupport (>= 5.2.0) rake (~> 13.0) snowplow-tracker (~> 0.8.0) - gitlab-secret_detection (0.29.0) - grpc (~> 1.63.0) + gitlab-secret_detection (0.21.1) + grpc (~> 1.63) + grpc-tools (~> 1.63) grpc_reflection (~> 0.1) parallel (~> 1) re2 (~> 2.7) @@ -960,13 +961,14 @@ GEM graphql (~> 2.0) html-pipeline (~> 2.14, >= 2.14.3) sass-embedded (~> 1.58) - grpc (1.63.0) - google-protobuf (~> 3.25) + grpc (1.72.0) + google-protobuf (>= 3.25, < 5.0) googleapis-common-protos-types (~> 1.0) grpc-google-iam-v1 (1.5.0) google-protobuf (~> 3.18) googleapis-common-protos (~> 1.4) grpc (~> 1.41) + grpc-tools (1.72.0) grpc_reflection (0.1.1) grpc gssapi (1.3.1) @@ -2208,7 +2210,7 @@ DEPENDENCIES graphlyte (~> 1.0.0) graphql (= 2.4.13) graphql-docs (~> 5.0.0) - grpc (= 1.63.0) + grpc (~> 1.72.0) gssapi (~> 1.3.1) guard-rspec haml_lint (~> 0.58) diff --git a/app/models/projects/deletion_schedule.rb b/app/models/projects/deletion_schedule.rb deleted file mode 100644 index c5e682f47f6..00000000000 --- a/app/models/projects/deletion_schedule.rb +++ /dev/null @@ -1,12 +0,0 @@ -# frozen_string_literal: true - -module Projects - class DeletionSchedule < ApplicationRecord - self.table_name = 'project_deletion_schedules' - - belongs_to :project - belongs_to :deleting_user, foreign_key: 'user_id', class_name: 'User', inverse_of: :project_deletion_schedules - - validates :marked_for_deletion_at, presence: true - end -end diff --git a/app/models/user.rb b/app/models/user.rb index d43318a355d..fd05f8d7046 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -214,7 +214,6 @@ class User < ApplicationRecord has_many :personal_projects, through: :namespace, source: :projects has_many :project_members, -> { where(requested_at: nil) } has_many :projects, through: :project_members - has_many :project_deletion_schedules, class_name: '::Projects::DeletionSchedule', inverse_of: :deleting_user has_many :created_projects, foreign_key: :creator_id, class_name: 'Project', dependent: :nullify # rubocop:disable Cop/ActiveRecordDependent has_many :created_namespace_details, foreign_key: :creator_id, class_name: 'Namespace::Detail' has_many :projects_with_active_memberships, -> { where(members: { state: ::Member::STATE_ACTIVE }) }, through: :project_members, source: :project diff --git a/config/events/schema.json b/config/events/schema.json index 7f2dcfa9fd2..a8f54034a00 100644 --- a/config/events/schema.json +++ b/config/events/schema.json @@ -197,10 +197,29 @@ ] } }, - "extra_tracking_classes": { - "type": "array", + "extra_trackers": { + "type": [ + "array", + "null" + ], "items": { - "type": "string" + "type": "object", + "properties": { + "tracking_class": { + "type": "string" + }, + "protected_properties": { + "type": [ + "object", + "null" + ], + "properties": { + "description": { + "type": "string" + } + } + } + } } } }, diff --git a/db/docs/project_deletion_schedules.yml b/db/docs/deleted_tables/project_deletion_schedules.yml similarity index 77% rename from db/docs/project_deletion_schedules.yml rename to db/docs/deleted_tables/project_deletion_schedules.yml index f97157430b3..0c5adce76b2 100644 --- a/db/docs/project_deletion_schedules.yml +++ b/db/docs/deleted_tables/project_deletion_schedules.yml @@ -11,3 +11,5 @@ gitlab_schema: gitlab_main_cell sharding_key: project_id: projects table_size: small +removed_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/192872 +removed_in_milestone: 18.1 diff --git a/db/post_migrate/20250529065243_remove_project_deletion_schedules_user_id_fk.rb b/db/post_migrate/20250529065243_remove_project_deletion_schedules_user_id_fk.rb new file mode 100644 index 00000000000..c1860aa3bbe --- /dev/null +++ b/db/post_migrate/20250529065243_remove_project_deletion_schedules_user_id_fk.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class RemoveProjectDeletionSchedulesUserIdFk < Gitlab::Database::Migration[2.3] + disable_ddl_transaction! + milestone '18.1' + + def up + with_lock_retries do + remove_foreign_key :project_deletion_schedules, :users + end + end + + def down + add_concurrent_foreign_key :project_deletion_schedules, :users, column: :user_id + end +end diff --git a/db/post_migrate/20250529065317_remove_project_deletion_schedules_project_id_fk.rb b/db/post_migrate/20250529065317_remove_project_deletion_schedules_project_id_fk.rb new file mode 100644 index 00000000000..e5392315f04 --- /dev/null +++ b/db/post_migrate/20250529065317_remove_project_deletion_schedules_project_id_fk.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class RemoveProjectDeletionSchedulesProjectIdFk < Gitlab::Database::Migration[2.3] + disable_ddl_transaction! + milestone '18.1' + + def up + with_lock_retries do + remove_foreign_key :project_deletion_schedules, :projects + end + end + + def down + add_concurrent_foreign_key :project_deletion_schedules, :projects, column: :project_id + end +end diff --git a/db/post_migrate/20250529065345_drop_project_deletion_schedules.rb b/db/post_migrate/20250529065345_drop_project_deletion_schedules.rb new file mode 100644 index 00000000000..1d8a05bd612 --- /dev/null +++ b/db/post_migrate/20250529065345_drop_project_deletion_schedules.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +class DropProjectDeletionSchedules < Gitlab::Database::Migration[2.3] + milestone '18.1' + + def up + drop_table :project_deletion_schedules + end + + def down + create_table :project_deletion_schedules, id: false do |t| # rubocop:disable Migration/EnsureFactoryForTable, Lint/RedundantCopDisableDirective -- Factory created in EE + t.bigint :project_id, null: false, default: nil, primary_key: true + t.bigint :user_id, null: false + t.datetime_with_timezone :marked_for_deletion_at, null: false + + t.index :user_id + t.index [:marked_for_deletion_at, :user_id], name: :index_project_deletions_on_marked_for_deletion_at_and_user_id + end + end +end diff --git a/db/schema_migrations/20250529065243 b/db/schema_migrations/20250529065243 new file mode 100644 index 00000000000..b369a0f0f0b --- /dev/null +++ b/db/schema_migrations/20250529065243 @@ -0,0 +1 @@ +ab3b0c7ef67d5272a892fc30b0656ffbf6cffec342a959ec9c2b96e2d1fb522e \ No newline at end of file diff --git a/db/schema_migrations/20250529065317 b/db/schema_migrations/20250529065317 new file mode 100644 index 00000000000..7e03600c970 --- /dev/null +++ b/db/schema_migrations/20250529065317 @@ -0,0 +1 @@ +e7aa145a88272cdc71b0021b2a7461fd47bbc9d60c7eabd8e78022003610cab8 \ No newline at end of file diff --git a/db/schema_migrations/20250529065345 b/db/schema_migrations/20250529065345 new file mode 100644 index 00000000000..765c199d0f4 --- /dev/null +++ b/db/schema_migrations/20250529065345 @@ -0,0 +1 @@ +ceeb6a58ba6ea972b9fefb5cbc5f23a470994e56e4a64a1a9ca58712afcaa8bd \ No newline at end of file diff --git a/db/structure.sql b/db/structure.sql index 48934b7283d..4b123545088 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -20997,12 +20997,6 @@ CREATE SEQUENCE project_data_transfers_id_seq ALTER SEQUENCE project_data_transfers_id_seq OWNED BY project_data_transfers.id; -CREATE TABLE project_deletion_schedules ( - project_id bigint NOT NULL, - user_id bigint NOT NULL, - marked_for_deletion_at timestamp with time zone NOT NULL -); - CREATE TABLE project_deploy_tokens ( id bigint NOT NULL, project_id bigint NOT NULL, @@ -30804,9 +30798,6 @@ ALTER TABLE ONLY project_daily_statistics ALTER TABLE ONLY project_data_transfers ADD CONSTRAINT project_data_transfers_pkey PRIMARY KEY (id); -ALTER TABLE ONLY project_deletion_schedules - ADD CONSTRAINT project_deletion_schedules_pkey PRIMARY KEY (project_id); - ALTER TABLE ONLY project_deploy_tokens ADD CONSTRAINT project_deploy_tokens_pkey PRIMARY KEY (id); @@ -36876,10 +36867,6 @@ CREATE INDEX index_project_data_transfers_on_namespace_id ON project_data_transf CREATE UNIQUE INDEX index_project_data_transfers_on_project_and_namespace_and_date ON project_data_transfers USING btree (project_id, namespace_id, date); -CREATE INDEX index_project_deletion_schedules_on_user_id ON project_deletion_schedules USING btree (user_id); - -CREATE INDEX index_project_deletions_on_marked_for_deletion_at_and_user_id ON project_deletion_schedules USING btree (marked_for_deletion_at, user_id); - CREATE INDEX index_project_deploy_tokens_on_deploy_token_id ON project_deploy_tokens USING btree (deploy_token_id); CREATE UNIQUE INDEX index_project_deploy_tokens_on_project_id_and_deploy_token_id ON project_deploy_tokens USING btree (project_id, deploy_token_id); @@ -43467,12 +43454,6 @@ ALTER TABLE ONLY ml_candidate_metadata ALTER TABLE ONLY design_management_designs_versions ADD CONSTRAINT fk_b054e8aa82 FOREIGN KEY (namespace_id) REFERENCES namespaces(id) ON DELETE CASCADE; -ALTER TABLE ONLY project_deletion_schedules - ADD CONSTRAINT fk_b11f7e2219 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE; - -ALTER TABLE ONLY project_deletion_schedules - ADD CONSTRAINT fk_b140171ca8 FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE; - ALTER TABLE ONLY custom_field_select_options ADD CONSTRAINT fk_b16c0bad2c FOREIGN KEY (custom_field_id) REFERENCES custom_fields(id) ON DELETE CASCADE; diff --git a/doc/administration/internal_users.md b/doc/administration/internal_users.md index d96cb64d77d..dc4b77c7f9e 100644 --- a/doc/administration/internal_users.md +++ b/doc/administration/internal_users.md @@ -54,7 +54,7 @@ Other examples of internal users: [GitLab Admin Bot](https://gitlab.com/gitlab-org/gitlab/-/blob/1d38cfdbed081f8b3fa14b69dd743440fe85081b/lib/users/internal.rb#L104) is an internal user that cannot be accessed or modified by regular users and is responsible for many tasks including: -- Applying [default compliance frameworks](../user/compliance/compliance_frameworks.md#default-compliance-frameworks) to +- Applying [default compliance frameworks](../user/compliance/compliance_frameworks/_index.md#default-compliance-frameworks) to projects. - [Automatically deactivating dormant users](moderate_users.md#automatically-deactivate-dormant-users). - [Automatically deleting unconfirmed users](moderate_users.md#automatically-delete-unconfirmed-users). diff --git a/doc/administration/package_information/supported_os.md b/doc/administration/package_information/supported_os.md index b3053fcc251..aa7174a7617 100644 --- a/doc/administration/package_information/supported_os.md +++ b/doc/administration/package_information/supported_os.md @@ -1,157 +1,13 @@ --- -stage: GitLab Delivery -group: Build -info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments -title: Supported operating systems +redirect_to: '../../install/package/_index.md' +remove_date: '2025-09-02' --- -{{< details >}} + -- Tier: Free, Premium, Ultimate -- Offering: GitLab Self-Managed +This document was moved to [another location](../../install/package/_index.md). -{{< /details >}} - -GitLab officially supports long term support (LTS) versions of operating systems. Some operating systems, such as Ubuntu, -have a clear distinction between LTS and non-LTS versions. However, there are other operating systems, openSUSE for -example, that don't follow the LTS concept. - -To avoid confusion, all the operating systems supported by GitLab are listed on the -[installation page](https://about.gitlab.com/install/). - -{{< alert type="note" >}} - -`amd64` and `x86_64` refer to the same 64-bit architecture. The names `arm64` and `aarch64` are also interchangeable -and refer to the same architecture. - -{{< /alert >}} - -## AlmaLinux - -These versions of AlmaLinux are supported. - -| Operating system | First supported GitLab version | Architecture | Installation documentation | Operating system EOL | Details | -|:-----------------|:-------------------------------|:--------------------|:------------------------------------------------------------------------------------|:---------------------|:--------| -| AlmaLinux 8 | GitLab CE / GitLab EE 14.5.0 | `x86_64`, `aarch64` | [AlmaLinux installation documentation](https://about.gitlab.com/install/#almalinux) | 2029 | [AlmaLinux details](https://almalinux.org/) | -| AlmaLinux 9 | GitLab CE / GitLab EE 16.0.0 | `x86_64`, `aarch64` | [AlmaLinux installation documentation](https://about.gitlab.com/install/#almalinux) | 2032 | [AlmaLinux details](https://almalinux.org/) | - -## Amazon Linux - -These versions of Amazon Linux are supported. - -| Operating system | First supported GitLab version | Architecture | Installation documentation | Operating system EOL | Details | -|:------------------|:-------------------------------|:-----------------|:---------------------------------------------------------------------------------------------------|:---------------------|:--------| -| Amazon Linux 2 | GitLab CE / GitLab EE 14.9.0 | `amd64`, `arm64` | [Amazon Linux 2 installation documentation](https://about.gitlab.com/install/#amazonlinux-2) | June 2026 | [Amazon Linux details](https://aws.amazon.com/amazon-linux-2/faqs/) | -| Amazon Linux 2023 | GitLab CE / GitLab EE 16.3.0 | `amd64`, `arm64` | [Amazon Linux 2023 installation documentation](https://about.gitlab.com/install/#amazonlinux-2023) | 2028 | [Amazon Linux details](https://docs.aws.amazon.com/linux/al2023/ug/release-cadence.html) | - -## Debian - -These versions of Debian are supported. - -| Operating system | First supported GitLab version | Architecture | Installation documentation | Operating system EOL | Details | -|:-----------------|:-------------------------------|:-----------------|:------------------------------------------------------------------------------|:---------------------|:--------| -| Debian 11 | GitLab CE / GitLab EE 14.6.0 | `amd64`, `arm64` | [Debian installation documentation](https://about.gitlab.com/install/#debian) | 2026 | [Debian Linux details](https://wiki.debian.org/LTS) | -| Debian 12 | GitLab CE / GitLab EE 16.1.0 | `amd64`, `arm64` | [Debian installation documentation](https://about.gitlab.com/install/#debian) | TBD | [Debian Linux details](https://wiki.debian.org/LTS) | - -## openSUSE Leap and SUSE Linux Enterprise Server - -These versions of openSUSE Leap and SUSE Linux Enterprise Server are supported. - -| Operating system version | First supported GitLab version | Architecture | Installation documentation | Operating system EOL | Details | -|:--------------------------------|:-------------------------------|:--------------------|:-------------------------------------------------------------------------------------------|:---------------------|:--------| -| openSUSE Leap 15.6 | GitLab CE / GitLab EE 17.6.0 | `x86_64`, `aarch64` | [openSUSE installation documentation](https://about.gitlab.com/install/#opensuse-leap) | Dec 2025 | [openSUSE details](https://en.opensuse.org/Lifetime) | -| SUSE Linux Enterprise Server 12 | GitLab EE 9.0.0 | `x86_64` | [Use OpenSUSE installation documentation](https://about.gitlab.com/install/#opensuse-leap) | Oct 2027 | [SUSE Linux Enterprise Server details](https://www.suse.com/lifecycle/) | -| SUSE Linux Enterprise Server 15 | GitLab EE 14.8.0 | `x86_64` | [Use OpenSUSE installation documentation](https://about.gitlab.com/install/#opensuse-leap) | Dec 2024 | [SUSE Linux Enterprise Server details](https://www.suse.com/lifecycle/) | - -## Oracle Linux - -These versions of Oracle Linux are supported. - -| Operating system | First supported GitLab version | Architecture | Installation documentation | Operating system EOL | Details | -|:-----------------|:-------------------------------|:-------------|:----------------------------------------------------------------------------------------|:---------------------|:--------| -| Oracle Linux 8 | GitLab CE / GitLab EE 12.8.1 | `x86_64` | [Use AlmaLinux installation documentation](https://about.gitlab.com/install/#almalinux) | July 2029 | [Oracle Linux details](https://www.oracle.com/a/ocom/docs/elsp-lifetime-069338.pdf) | -| Oracle Linux 9 | GitLab CE / GitLab EE 16.2.0 | `x86_64` | [Use AlmaLinux installation documentation](https://about.gitlab.com/install/#almalinux) | June 2032 | [Oracle Linux details](https://www.oracle.com/a/ocom/docs/elsp-lifetime-069338.pdf) | - -## Red Hat Enterprise Linux - -These versions of Red Hat Enterprise Linux are supported. - -| Operating system version | First supported GitLab version | Architecture | Installation documentation | Operating system EOL | Details | -|:---------------------------|:-------------------------------|:------------------|:------------------------------------------------------------------------------------|:---------------------|:--------| -| Red Hat Enterprise Linux 8 | GitLab CE / GitLab EE 12.8.1 | `x86_64`, `arm64` | [Use AlmaLinux installation documentation](https://about.gitlab.com/install/#almalinux) | May 2029 | [Red Hat Enterprise Linux details](https://access.redhat.com/support/policy/updates/errata/#Life_Cycle_Dates) | -| Red Hat Enterprise Linux 9 | GitLab CE / GitLab EE 16.0.0 | `x86_64`, `arm64` | [Use AlmaLinux installation documentation](https://about.gitlab.com/install/#almalinux) | May 2032 | [Red Hat Enterprise Linux details](https://access.redhat.com/support/policy/updates/errata/#Life_Cycle_Dates) | - -## Ubuntu - -These versions of Ubuntu are supported. - -| Operating system | First supported GitLab version | Architecture | Installation documentation | Operating system EOL | Details | -|:-----------------|:-------------------------------|:-----------------|:------------------------------------------------------------------------------|:---------------------|:--------| -| Ubuntu 20.04 | GitLab CE / GitLab EE 13.2.0 | `amd64`, `arm64` | [Ubuntu installation documentation](https://about.gitlab.com/install/#ubuntu) | April 2025 | [Ubuntu details](https://wiki.ubuntu.com/Releases) | -| Ubuntu 22.04 | GitLab CE / GitLab EE 15.5.0 | `amd64`, `arm64` | [Ubuntu installation documentation](https://about.gitlab.com/install/#ubuntu) | April 2027 | [Ubuntu details](https://wiki.ubuntu.com/Releases) | -| Ubuntu 24.04 | GitLab CE / GitLab EE 17.1.0 | `amd64`, `arm64` | [Ubuntu installation documentation](https://about.gitlab.com/install/#ubuntu) | April 2029 | [Ubuntu details](https://wiki.ubuntu.com/Releases) | - -## Packages for ARM64 - -GitLab provides arm64/aarch64 packages for some supported operating systems. -You can see if your operating system architecture is supported in the previous table. - -{{< alert type="warning" >}} - -[Known issues](https://gitlab.com/groups/gitlab-org/-/epics/4397) exist for running GitLab on ARM. - -{{< /alert >}} - -## OS versions that are no longer supported - -GitLab provides Linux packages for operating systems only until their -end-of-life (EOL) date. After the EOL date, GitLab stops releasing -official packages. - -However, sometimes, we don't deprecate an OS even after it's EOL, -because we can't provide packages for a newer version to the users yet. -The most common reason for this is that our package repository provider, PackageCloud, -not supporting newer versions, and hence we can't upload packages to it. - -The list of deprecated operating systems and the final GitLab -release for them can be found below: - -| OS version | End of life | Last supported GitLab version | -|:-----------------|:------------------------------------------------------------------------------------|:------------------------------| -| CentOS 6 and RHEL 6 | [November 2020](https://www.centos.org/about/) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=13.6&filter=all&filter=all&dist=el%2F6) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=13.6&filter=all&filter=all&dist=el%2F6) 13.6 | -| CentOS 7 and RHEL 7 | [June 2024](https://www.centos.org/about/) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=17.7&filter=all&filter=all&dist=el%2F7) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=17.7&filter=all&filter=all&dist=el%2F7) 17.7 | -| CentOS 8 | [December 2021](https://www.centos.org/about/) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=14.6&filter=all&filter=all&dist=el%2F8) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=14.6&filter=all&filter=all&dist=el%2F8) 14.6 | -| Oracle Linux 7 | [December 2024](https://endoflife.date/oracle-linux) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=17.7&filter=all&filter=all&dist=ol%2F7) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=17.7&filter=all&filter=all&dist=ol%2F7) 17.7 | -| Scientific Linux 7 | [June 2024](https://scientificlinux.org/downloads/sl-versions/sl7/) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=17.7&filter=all&filter=all&dist=scientific%2F7) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=17.7&filter=all&filter=all&dist=scientific%2F7) 17.7 | -| Debian 7 Wheezy | [May 2018](https://www.debian.org/News/2018/20180601) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce_11.6&dist=debian%2Fwheezy) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee_11.6&dist=debian%2Fwheezy) 11.6 | -| Debian 8 Jessie | [June 2020](https://www.debian.org/News/2020/20200709) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce_13.2&dist=debian%2Fjessie) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee_13.2&dist=debian%2Fjessie) 13.3 | -| Debian 9 Stretch | [June 2022](https://lists.debian.org/debian-lts-announce/2022/07/msg00002.html) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce_15.2&dist=debian%2Fstretch) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee_15.2&dist=debian%2Fstretch) 15.2 | -| Debian 10 Buster | [June 2024](https://www.debian.org/News/2024/20240615) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce_17.5&dist=debian%2Fbuster) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee_17.5&dist=debian%2Fbuster) 17.5 | -| OpenSUSE 42.1 | [May 2017](https://en.opensuse.org/Lifetime#Discontinued_distributions) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce-9.3&dist=opensuse%2F42.1) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee-9.3&dist=opensuse%2F42.1) 9.3 | -| OpenSUSE 42.2 | [January 2018](https://en.opensuse.org/Lifetime#Discontinued_distributions) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce-10.4&dist=opensuse%2F42.2) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee-10.4&dist=opensuse%2F42.2) 10.4 | -| OpenSUSE 42.3 | [July 2019](https://en.opensuse.org/Lifetime#Discontinued_distributions) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce-12.1&dist=opensuse%2F42.3) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee-12.1&dist=opensuse%2F42.3) 12.1 | -| OpenSUSE 13.2 | [January 2017](https://en.opensuse.org/Lifetime#Discontinued_distributions) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce-9.1&dist=opensuse%2F13.2) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee-9.1&dist=opensuse%2F13.2) 9.1 | -| OpenSUSE 15.0 | [December 2019](https://en.opensuse.org/Lifetime#Discontinued_distributions) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce-12.5&dist=opensuse%2F15.0) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee-12.5&dist=opensuse%2F15.0) 12.5 | -| OpenSUSE 15.1 | [November 2020](https://en.opensuse.org/Lifetime#Discontinued_distributions) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce-13.12&dist=opensuse%2F15.1) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee-13.12&dist=opensuse%2F15.1) 13.12 | -| OpenSUSE 15.2 | [December 2021](https://en.opensuse.org/Lifetime#Discontinued_distributions) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce-14.7&dist=opensuse%2F15.2) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee-14.7&dist=opensuse%2F15.2) 14.7 | -| OpenSUSE 15.3 | [December 2022](https://en.opensuse.org/Lifetime#Discontinued_distributions) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce-15.10&dist=opensuse%2F15.3) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee-15.10&dist=opensuse%2F15.3) 15.10 | -| OpenSUSE 15.4 | [December 2023](https://en.opensuse.org/Lifetime#Discontinued_distributions) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce-16.7&dist=opensuse%2F15.4) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee-16.7&dist=opensuse%2F15.4) 16.7 | -| OpenSUSE 15.5 | [December 2024](https://en.opensuse.org/Lifetime#Discontinued_distributions) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce-17.8&dist=opensuse%2F15.5) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee-17.8&dist=opensuse%2F15.5) 17.8 | -| Raspbian Wheezy | [May 2015](https://downloads.raspberrypi.org/raspbian/images/raspbian-2015-05-07/) | [GitLab CE](https://packages.gitlab.com/app/gitlab/raspberry-pi2/search?q=gitlab-ce_8.17&dist=debian%2Fwheezy) 8.17 | -| Raspbian Jessie | [May 2017](https://downloads.raspberrypi.org/raspbian/images/raspbian-2017-07-05/) | [GitLab CE](https://packages.gitlab.com/app/gitlab/raspberry-pi2/search?q=gitlab-ce_11.7&dist=debian%2Fjessie) 11.7 | -| Raspbian Stretch | [June 2020](https://downloads.raspberrypi.org/raspbian/images/raspbian-2019-04-09/) | [GitLab CE](https://packages.gitlab.com/app/gitlab/raspberry-pi2/search?q=gitlab-ce_13.3&dist=raspbian%2Fstretch) 13.3 | -| Raspberry Pi OS Buster | [June 2024](https://www.debian.org/News/2024/20240615) | [GitLab CE](https://packages.gitlab.com/app/gitlab/raspberry-pi2/search?q=gitlab-ce_17.7&dist=raspbian%2Fbuster) 17.7 | -| Ubuntu 12.04 | [April 2017](https://ubuntu.com/info/release-end-of-life) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce_9.1&dist=ubuntu%2Fprecise) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee_9.1&dist=ubuntu%2Fprecise) 9.1 | -| Ubuntu 14.04 | [April 2019](https://ubuntu.com/info/release-end-of-life) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce_11.10&dist=ubuntu%2Ftrusty) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee_11.10&dist=ubuntu%2Ftrusty) 11.10 | -| Ubuntu 16.04 | [April 2021](https://ubuntu.com/info/release-end-of-life) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce_13.12&dist=ubuntu%2Fxenial) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee_13.12&dist=ubuntu%2Fxenial) 13.12 | -| Ubuntu 18.04 | [June 2023](https://ubuntu.com/info/release-end-of-life) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce_16.11&dist=ubuntu%2Fbionic) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=ggitlab-ee_16.11&dist=ubuntu%2Fbionic) 16.11 | - -### Raspberry Pi OS (32-bit - Raspbian) - -GitLab dropped support for Raspberry Pi OS (32 bit - Raspbian) with GitLab -17.11 being the last version available for the 32-bit platform. Starting with -GitLab 18.0, users should move to Raspberry Pi OS (64 bit) and use the -[Debian arm64 package](https://about.gitlab.com/install/#debian). - -For information on backing up data on a 32-bit OS and restoring it to a 64-bit -OS, see [Upgrading operating systems for PostgreSQL](../postgresql/upgrading_os.md). + + + + diff --git a/doc/administration/pages/troubleshooting.md b/doc/administration/pages/troubleshooting.md index fbd4661df0a..f0cf239ef5b 100644 --- a/doc/administration/pages/troubleshooting.md +++ b/doc/administration/pages/troubleshooting.md @@ -317,10 +317,10 @@ container. ## 500 error with `securecookie: failed to generate random iv` and `Failed to save the session` -This problem most likely results from an [out-dated operating system](../package_information/supported_os.md#os-versions-that-are-no-longer-supported). +This problem most likely results from an out-dated operating system. The [Pages daemon uses the `securecookie` library](https://gitlab.com/search?group_id=9970&project_id=734943&repository_ref=master&scope=blobs&search=securecookie&snippets=false) to get random strings via [`crypto/rand` in Go](https://pkg.go.dev/crypto/rand#pkg-variables). This requires the `getrandom` system call or `/dev/urandom` to be available on the host OS. -Upgrading to an [officially supported operating system](https://about.gitlab.com/install/) is recommended. +Upgrading to an [officially supported operating system](../../install/package/_index.md#supported-platforms) is recommended. ## The requested scope is invalid, malformed, or unknown diff --git a/doc/api/external_controls.md b/doc/api/external_controls.md index a94d68fbbaf..65ec613f6ce 100644 --- a/doc/api/external_controls.md +++ b/doc/api/external_controls.md @@ -80,4 +80,4 @@ Example response: ## Related topics -- [External controls](../user/compliance/compliance_frameworks.md) +- [External controls](../user/compliance/compliance_frameworks/_index.md) diff --git a/doc/ci/runners/configure_runners.md b/doc/ci/runners/configure_runners.md index 8490fa8082a..e98106abed1 100644 --- a/doc/ci/runners/configure_runners.md +++ b/doc/ci/runners/configure_runners.md @@ -685,7 +685,7 @@ script: The previous configuration results in `git fetch` being called this way: ```shell -git fetch origin $REFSPECS --depth 50 --prune +git fetch origin $REFSPECS --depth 20 --prune ``` Where `$REFSPECS` is a value provided to the runner internally by GitLab. @@ -756,7 +756,7 @@ script: The previous configuration results in `git submodule update` being called this way: ```shell -git submodule update --init --depth 50 --recursive --remote --jobs 4 +git submodule update --init --depth 20 --recursive --remote --jobs 4 ``` {{< alert type="warning" >}} @@ -819,7 +819,7 @@ It can be helpful for repositories with a large number of commits or old, large passed to `git fetch` and `git clone`. Newly-created projects automatically have a -[default `git depth` value of `50`](../pipelines/settings.md#limit-the-number-of-changes-fetched-during-clone). +[default `git depth` value of `20`](../pipelines/settings.md#limit-the-number-of-changes-fetched-during-clone). If you use a depth of `1` and have a queue of jobs or retry jobs, jobs may fail. diff --git a/doc/development/internal_analytics/instrumentation_layer.md b/doc/development/internal_analytics/instrumentation_layer.md index e2d539bb35a..c03867fdf98 100644 --- a/doc/development/internal_analytics/instrumentation_layer.md +++ b/doc/development/internal_analytics/instrumentation_layer.md @@ -51,20 +51,25 @@ To implement it for your tracking system, you need to: end ``` -1. Extend the event definition with the new tracking class added in `extra_tracking_classes:` property +1. Extend the event definition with the new tracking class added in `extra_trackers:` property ```yaml - extra_tracking_classes: - - Gitlab::Tracking::NewTrackingSystemProcessor + extra_trackers: + - tracking_class: Gitlab::Tracking::NewTrackingSystemProcessor + protected_properties: + processor_type: + description: The type of the processor ``` + `protected_properties` contains properties to be sent exclusively to the specified tracking class. + 1. [Trigger the event](internal_event_instrumentation/quick_start.md#trigger-events) in your code using Internal Events framework `**kwargs` is used to pass additional parameters to the tracking class from the Internal Events framework. The actual parameters depend on the tracking parameters passed to the event invocation above. -Usually, it includes `user`, `namespace` and `project` along with `additional_properties` that can be used to pass any additional data. +Usually, it includes `user`, `namespace` and `project` along with `protected_properties` that can be used to pass any additional data. -The tracking systems will be triggered by the order of the `extra_tracking_classes:` property. +The tracking systems are triggered by the order of the `extra_trackers:` property. ## Systems that use the Single Instrumentation Layer diff --git a/doc/install/install_methods.md b/doc/install/install_methods.md index 9dbafc57e66..59da1929a5a 100644 --- a/doc/install/install_methods.md +++ b/doc/install/install_methods.md @@ -24,10 +24,9 @@ Use if you want the most mature, scalable method. This version is also used on G For more information, see: -- [Linux package](https://docs.gitlab.com/omnibus/installation/) +- [Linux package](package/_index.md) - [Reference architectures](../administration/reference_architectures/_index.md) - [System requirements](requirements.md) -- [Supported Linux operating systems](../administration/package_information/supported_os.md) ## Helm chart @@ -65,13 +64,13 @@ Use if you're familiar with Docker. For more information, see [Docker](docker/_index.md). -## Source +## Self-compiled Installs GitLab and its components from scratch. Use if none of the previous methods are available for your platform. Can use for unsupported systems like \*BSD. -For more information, see [Source](installation.md). +For more information, see [self-compiled installation](installation.md). ## GitLab Environment Toolkit (GET) @@ -81,31 +80,15 @@ Use to deploy a [reference architecture](../administration/reference_architectur This installation methods has some [limitations](https://gitlab.com/gitlab-org/gitlab-environment-toolkit#missing-features-to-be-aware-of), and requires manual setup for production environments. -## Unofficial and community-supported distributions - -- [Debian Native](https://wiki.debian.org/gitlab/) -- [FreeBSD](http://www.freshports.org/www/gitlab-ce) -- [Arch Linux](https://archlinux.org/packages/extra/x86_64/gitlab/) -- [Puppet Module](https://forge.puppet.com/puppet/gitlab) -- [Ansible Playbook](https://github.com/geerlingguy/ansible-role-gitlab) -- [GitLab Virtual Appliance (KVM)](https://marketplace.opennebula.io/appliance/6b54a412-03a5-11e9-8652-f0def1753696) -- [GitLab on Cloudron](https://cloudron.io/store/com.gitlab.cloudronapp.html) - ## Unsupported Linux distributions and Unix-like operating systems +[Self-compiled installation](installation.md) of GitLab on the following operating systems is possible, but not supported: + - Arch Linux -- Fedora - FreeBSD - Gentoo - macOS -Installation of GitLab on these operating systems is possible, but not supported. - -For more information, see: - -- [Installation guides](https://about.gitlab.com/install/) -- [Supported and unsupported OS versions for Linux package installations](../administration/package_information/supported_os.md#os-versions-that-are-no-longer-supported) - ## Microsoft Windows GitLab is developed for Linux-based operating systems. diff --git a/doc/install/package/_index.md b/doc/install/package/_index.md new file mode 100644 index 00000000000..bd34f66910c --- /dev/null +++ b/doc/install/package/_index.md @@ -0,0 +1,134 @@ +--- +stage: GitLab Delivery +group: Build +info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments +title: Install GitLab using the Linux package +--- + +{{< details >}} + +- Tier: Free, Premium, Ultimate +- Offering: GitLab Self-Managed + +{{< /details >}} + +The Linux packages are mature, scalable, and are used on GitLab.com. If you need additional +flexibility and resilience, we recommend deploying GitLab as described in the +[reference architecture documentation](../../administration/reference_architectures/_index.md). + +The Linux package is quicker to install, easier to upgrade, and contains +features to enhance reliability not found in other installation methods. Install through a +single package (also known as Omnibus GitLab) that bundles all the different services +and tools required to run GitLab. You should have at least 4 GiB of RAM. For more information, +see [minimum requirements](../requirements.md). + +Linux packages are available in our packages repository for: + +- [GitLab Enterprise Edition](https://packages.gitlab.com/gitlab/gitlab-ee). +- [GitLab Community Edition](https://packages.gitlab.com/gitlab/gitlab-ce). + +Check that the required GitLab version is available for your host operating system. + +## Supported platforms + +GitLab officially supports long term support (LTS) versions of operating +systems. Some operating systems, such as Ubuntu, have a clear distinction +between LTS and non-LTS versions. However, there are other operating systems, +openSUSE for example, that don't follow the LTS concept. + +{{< alert type="note" >}} + +`amd64` and `x86_64` refer to the same 64-bit architecture. The names `arm64` and `aarch64` are also interchangeable +and refer to the same architecture. + +{{< /alert >}} + +| Operating system | First supported GitLab version | Architecture | Operating system EOL | Upstream release notes | +|:-----------------|:-------------------------------|:--------------------|:---------------------|:--------| +| [AlmaLinux 8](https://about.gitlab.com/install/#almalinux) | GitLab CE / GitLab EE 14.5.0 | `x86_64`, `aarch64` 1 | 2029 | [AlmaLinux details](https://almalinux.org/) | +| [AlmaLinux 9](https://about.gitlab.com/install/#almalinux) | GitLab CE / GitLab EE 16.0.0 | `x86_64`, `aarch64` 1 | 2032 | [AlmaLinux details](https://almalinux.org/) | +| [Amazon Linux 2](https://about.gitlab.com/install/#amazonlinux-2) | GitLab CE / GitLab EE 14.9.0 | `amd64`, `arm64` 1 | June 2026 | [Amazon Linux details](https://aws.amazon.com/amazon-linux-2/faqs/) | +| [Amazon Linux 2023](https://about.gitlab.com/install/#amazonlinux-2023) | GitLab CE / GitLab EE 16.3.0 | `amd64`, `arm64` 1 | 2028 | [Amazon Linux details](https://docs.aws.amazon.com/linux/al2023/ug/release-cadence.html) | +| [Debian 11](https://about.gitlab.com/install/#debian) | GitLab CE / GitLab EE 14.6.0 | `amd64`, `arm64` 1 | 2026 | [Debian Linux details](https://wiki.debian.org/LTS) | +| [Debian 12](https://about.gitlab.com/install/#debian) | GitLab CE / GitLab EE 16.1.0 | `amd64`, `arm64` 1 | TBD | [Debian Linux details](https://wiki.debian.org/LTS) | +| [openSUSE Leap 15.6](https://about.gitlab.com/install/#opensuse-leap) | GitLab CE / GitLab EE 17.6.0 | `x86_64`, `aarch64` 1 | Dec 2025 | [openSUSE details](https://en.opensuse.org/Lifetime) | +| [SUSE Linux Enterprise Server 12](https://about.gitlab.com/install/#opensuse-leap) | GitLab EE 9.0.0 | `x86_64` | Oct 2027 | [SUSE Linux Enterprise Server details](https://www.suse.com/lifecycle/) | +| [SUSE Linux Enterprise Server 15](https://about.gitlab.com/install/#opensuse-leap) | GitLab EE 14.8.0 | `x86_64` | Dec 2024 | [SUSE Linux Enterprise Server details](https://www.suse.com/lifecycle/) | +| [Oracle Linux 8](https://about.gitlab.com/install/#almalinux) | GitLab CE / GitLab EE 12.8.1 | `x86_64` | July 2029 | [Oracle Linux details](https://www.oracle.com/a/ocom/docs/elsp-lifetime-069338.pdf) | +| [Oracle Linux 9](https://about.gitlab.com/install/#almalinux) | GitLab CE / GitLab EE 16.2.0 | `x86_64` | June 2032 | [Oracle Linux details](https://www.oracle.com/a/ocom/docs/elsp-lifetime-069338.pdf) | +| [Red Hat Enterprise Linux 8](https://about.gitlab.com/install/#almalinux) | GitLab CE / GitLab EE 12.8.1 | `x86_64`, `arm64` 1 | May 2029 | [Red Hat Enterprise Linux details](https://access.redhat.com/support/policy/updates/errata/#Life_Cycle_Dates) | +| [Red Hat Enterprise Linux 9](https://about.gitlab.com/install/#almalinux) | GitLab CE / GitLab EE 16.0.0 | `x86_64`, `arm64` 1 | May 2032 | [Red Hat Enterprise Linux details](https://access.redhat.com/support/policy/updates/errata/#Life_Cycle_Dates) | +| [Ubuntu 20.04](https://about.gitlab.com/install/#ubuntu) | GitLab CE / GitLab EE 13.2.0 | `amd64`, `arm64` 1 | April 2025 | [Ubuntu details](https://wiki.ubuntu.com/Releases) | +| [Ubuntu 22.04](https://about.gitlab.com/install/#ubuntu) | GitLab CE / GitLab EE 15.5.0 | `amd64`, `arm64` 1 | April 2027 | [Ubuntu details](https://wiki.ubuntu.com/Releases) | +| [Ubuntu 24.04](https://about.gitlab.com/install/#ubuntu) | GitLab CE / GitLab EE 17.1.0 | `amd64`, `arm64` 1 | April 2029 | [Ubuntu details](https://wiki.ubuntu.com/Releases) | + +**Footnotes**: + +1. [Known issues](https://gitlab.com/groups/gitlab-org/-/epics/4397) exist for running GitLab on ARM. + +### Unofficial, unsupported installation methods + +The following installation methods are provided as-is by the wider GitLab +community and are not supported by GitLab: + +- [Debian native package](https://wiki.debian.org/gitlab/) (by Pirate Praveen) +- [FreeBSD package](http://www.freshports.org/www/gitlab-ce) (by Torsten Zühlsdorff) +- [Arch Linux package](https://archlinux.org/packages/extra/x86_64/gitlab/) (by the Arch Linux community) +- [Puppet module](https://forge.puppet.com/puppet/gitlab) (by Vox Pupuli) +- [Ansible playbook](https://github.com/geerlingguy/ansible-role-gitlab) (by Jeff Geerling) +- [GitLab virtual appliance (KVM)](https://marketplace.opennebula.io/appliance/6b54a412-03a5-11e9-8652-f0def1753696) (by OpenNebula) +- [GitLab on Cloudron](https://cloudron.io/store/com.gitlab.cloudronapp.html) (via Cloudron App Library) + +## End-of-life versions + +GitLab provides Linux packages for operating systems only until their +end-of-life (EOL) date. After the EOL date, GitLab stops releasing +official packages. + +However, sometimes we don't deprecate an operating system even after it's EOL +because we can't provide packages for a newer version. +The most common reason for this is PackageCloud, our package repository provider, +not supporting newer versions and so we can't upload packages to it. + +The list of deprecated operating systems and the final GitLab +release for them can be found below: + +| OS version | End of life | Last supported GitLab version | +|:-----------------|:------------------------------------------------------------------------------------|:------------------------------| +| CentOS 6 and RHEL 6 | [November 2020](https://www.centos.org/about/) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=13.6&filter=all&filter=all&dist=el%2F6) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=13.6&filter=all&filter=all&dist=el%2F6) 13.6 | +| CentOS 7 and RHEL 7 | [June 2024](https://www.centos.org/about/) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=17.7&filter=all&filter=all&dist=el%2F7) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=17.7&filter=all&filter=all&dist=el%2F7) 17.7 | +| CentOS 8 | [December 2021](https://www.centos.org/about/) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=14.6&filter=all&filter=all&dist=el%2F8) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=14.6&filter=all&filter=all&dist=el%2F8) 14.6 | +| Oracle Linux 7 | [December 2024](https://endoflife.date/oracle-linux) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=17.7&filter=all&filter=all&dist=ol%2F7) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=17.7&filter=all&filter=all&dist=ol%2F7) 17.7 | +| Scientific Linux 7 | [June 2024](https://scientificlinux.org/downloads/sl-versions/sl7/) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=17.7&filter=all&filter=all&dist=scientific%2F7) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=17.7&filter=all&filter=all&dist=scientific%2F7) 17.7 | +| Debian 7 Wheezy | [May 2018](https://www.debian.org/News/2018/20180601) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce_11.6&dist=debian%2Fwheezy) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee_11.6&dist=debian%2Fwheezy) 11.6 | +| Debian 8 Jessie | [June 2020](https://www.debian.org/News/2020/20200709) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce_13.2&dist=debian%2Fjessie) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee_13.2&dist=debian%2Fjessie) 13.3 | +| Debian 9 Stretch | [June 2022](https://lists.debian.org/debian-lts-announce/2022/07/msg00002.html) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce_15.2&dist=debian%2Fstretch) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee_15.2&dist=debian%2Fstretch) 15.2 | +| Debian 10 Buster | [June 2024](https://www.debian.org/News/2024/20240615) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce_17.5&dist=debian%2Fbuster) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee_17.5&dist=debian%2Fbuster) 17.5 | +| OpenSUSE 42.1 | [May 2017](https://en.opensuse.org/Lifetime#Discontinued_distributions) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce-9.3&dist=opensuse%2F42.1) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee-9.3&dist=opensuse%2F42.1) 9.3 | +| OpenSUSE 42.2 | [January 2018](https://en.opensuse.org/Lifetime#Discontinued_distributions) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce-10.4&dist=opensuse%2F42.2) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee-10.4&dist=opensuse%2F42.2) 10.4 | +| OpenSUSE 42.3 | [July 2019](https://en.opensuse.org/Lifetime#Discontinued_distributions) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce-12.1&dist=opensuse%2F42.3) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee-12.1&dist=opensuse%2F42.3) 12.1 | +| OpenSUSE 13.2 | [January 2017](https://en.opensuse.org/Lifetime#Discontinued_distributions) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce-9.1&dist=opensuse%2F13.2) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee-9.1&dist=opensuse%2F13.2) 9.1 | +| OpenSUSE 15.0 | [December 2019](https://en.opensuse.org/Lifetime#Discontinued_distributions) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce-12.5&dist=opensuse%2F15.0) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee-12.5&dist=opensuse%2F15.0) 12.5 | +| OpenSUSE 15.1 | [November 2020](https://en.opensuse.org/Lifetime#Discontinued_distributions) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce-13.12&dist=opensuse%2F15.1) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee-13.12&dist=opensuse%2F15.1) 13.12 | +| OpenSUSE 15.2 | [December 2021](https://en.opensuse.org/Lifetime#Discontinued_distributions) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce-14.7&dist=opensuse%2F15.2) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee-14.7&dist=opensuse%2F15.2) 14.7 | +| OpenSUSE 15.3 | [December 2022](https://en.opensuse.org/Lifetime#Discontinued_distributions) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce-15.10&dist=opensuse%2F15.3) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee-15.10&dist=opensuse%2F15.3) 15.10 | +| OpenSUSE 15.4 | [December 2023](https://en.opensuse.org/Lifetime#Discontinued_distributions) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce-16.7&dist=opensuse%2F15.4) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee-16.7&dist=opensuse%2F15.4) 16.7 | +| OpenSUSE 15.5 | [December 2024](https://en.opensuse.org/Lifetime#Discontinued_distributions) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce-17.8&dist=opensuse%2F15.5) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee-17.8&dist=opensuse%2F15.5) 17.8 | +| Raspbian Wheezy | [May 2015](https://downloads.raspberrypi.org/raspbian/images/raspbian-2015-05-07/) | [GitLab CE](https://packages.gitlab.com/app/gitlab/raspberry-pi2/search?q=gitlab-ce_8.17&dist=debian%2Fwheezy) 8.17 | +| Raspbian Jessie | [May 2017](https://downloads.raspberrypi.org/raspbian/images/raspbian-2017-07-05/) | [GitLab CE](https://packages.gitlab.com/app/gitlab/raspberry-pi2/search?q=gitlab-ce_11.7&dist=debian%2Fjessie) 11.7 | +| Raspbian Stretch | [June 2020](https://downloads.raspberrypi.org/raspbian/images/raspbian-2019-04-09/) | [GitLab CE](https://packages.gitlab.com/app/gitlab/raspberry-pi2/search?q=gitlab-ce_13.3&dist=raspbian%2Fstretch) 13.3 | +| Raspberry Pi OS Buster | [June 2024](https://www.debian.org/News/2024/20240615) | [GitLab CE](https://packages.gitlab.com/app/gitlab/raspberry-pi2/search?q=gitlab-ce_17.7&dist=raspbian%2Fbuster) 17.7 | +| Ubuntu 12.04 | [April 2017](https://ubuntu.com/info/release-end-of-life) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce_9.1&dist=ubuntu%2Fprecise) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee_9.1&dist=ubuntu%2Fprecise) 9.1 | +| Ubuntu 14.04 | [April 2019](https://ubuntu.com/info/release-end-of-life) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce_11.10&dist=ubuntu%2Ftrusty) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee_11.10&dist=ubuntu%2Ftrusty) 11.10 | +| Ubuntu 16.04 | [April 2021](https://ubuntu.com/info/release-end-of-life) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce_13.12&dist=ubuntu%2Fxenial) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=gitlab-ee_13.12&dist=ubuntu%2Fxenial) 13.12 | +| Ubuntu 18.04 | [June 2023](https://ubuntu.com/info/release-end-of-life) | [GitLab CE](https://packages.gitlab.com/app/gitlab/gitlab-ce/search?q=gitlab-ce_16.11&dist=ubuntu%2Fbionic) / [GitLab EE](https://packages.gitlab.com/app/gitlab/gitlab-ee/search?q=ggitlab-ee_16.11&dist=ubuntu%2Fbionic) 16.11 | + +### Raspberry Pi OS (32-bit - Raspbian) + +GitLab dropped support for Raspberry Pi OS (32 bit - Raspbian) with GitLab +17.11 being the last version available for the 32-bit platform. Starting with +GitLab 18.0, you should move to Raspberry Pi OS (64 bit) and use the +[Debian arm64 package](https://about.gitlab.com/install/#debian). + +For information on backing up data on a 32-bit OS and restoring it to a 64-bit +OS, see [Upgrading operating systems for PostgreSQL](../../administration/postgresql/upgrading_os.md). diff --git a/doc/tutorials/compliance_pipeline/_index.md b/doc/tutorials/compliance_pipeline/_index.md index 43fa58774f1..3c6f270aa4f 100644 --- a/doc/tutorials/compliance_pipeline/_index.md +++ b/doc/tutorials/compliance_pipeline/_index.md @@ -26,7 +26,7 @@ This change is a breaking change. For more information, see the [migration guide You can use [compliance pipelines](../../user/compliance/compliance_pipelines.md) to ensure specific compliance-related jobs are run on pipelines for all projects in a group. Compliance pipelines are applied -to projects through [compliance frameworks](../../user/compliance/compliance_frameworks.md). +to projects through [compliance frameworks](../../user/compliance/compliance_frameworks/_index.md). In this tutorial, you: diff --git a/doc/update/plan_your_upgrade.md b/doc/update/plan_your_upgrade.md index b3dbd78143d..45131dcdaa1 100644 --- a/doc/update/plan_your_upgrade.md +++ b/doc/update/plan_your_upgrade.md @@ -28,7 +28,7 @@ If you are [working with Support](https://about.gitlab.com/support/scheduling-up upgrade plan, document and share it with the answers to the following questions: - How is GitLab installed? -- What is the operating system of the node? Check [OS versions that are no longer supported](../administration/package_information/supported_os.md#os-versions-that-are-no-longer-supported) +- What is the operating system of the node? Check [OS versions that are no longer supported](../install/package/_index.md#supported-platforms) to confirm that later updates are available. - Is it a single-node or a multi-node setup? If multi-node, document and share any architectural details about each node. Which external components are used? For example, Gitaly, PostgreSQL, or Redis? diff --git a/doc/user/application_security/detect/roll_out_security_scanning.md b/doc/user/application_security/detect/roll_out_security_scanning.md index 09eb2d0f339..4c9d9b359b3 100644 --- a/doc/user/application_security/detect/roll_out_security_scanning.md +++ b/doc/user/application_security/detect/roll_out_security_scanning.md @@ -19,4 +19,4 @@ methods: - [Scan execution policy](../policies/scan_execution_policies.md) - [Pipeline execution policy](../policies/pipeline_execution_policies.md) -- [Compliance framework](../../compliance/compliance_frameworks.md) +- [Compliance framework](../../compliance/compliance_frameworks/_index.md) diff --git a/doc/user/compliance/_index.md b/doc/user/compliance/_index.md index ce29e8ead33..e184eb7ea82 100644 --- a/doc/user/compliance/_index.md +++ b/doc/user/compliance/_index.md @@ -27,7 +27,7 @@ compliance: | Feature | Instances | Groups | Projects | Description | |:-----------------------------------------------------------------------------------------------------------------------------------------|:-------------------------------------|:-------------------------------------|:-------------------------------------|:------------| -| [Compliance frameworks](compliance_frameworks.md) | {{< icon name="dotted-circle" >}} No | {{< icon name="check-circle" >}} Yes | {{< icon name="dotted-circle" >}} No | Describe the type of compliance requirements projects must follow. | +| [Compliance frameworks](compliance_frameworks/_index.md) | {{< icon name="dotted-circle" >}} No | {{< icon name="check-circle" >}} Yes | {{< icon name="dotted-circle" >}} No | Describe the type of compliance requirements projects must follow. | | [Compliance pipelines](compliance_pipelines.md) | {{< icon name="dotted-circle" >}} No | {{< icon name="check-circle" >}} Yes | {{< icon name="dotted-circle" >}} No | Define a pipeline configuration to run for any projects with a given compliance framework. | | [Merge request approval policy approval settings](../application_security/policies/merge_request_approval_policies.md#approval_settings) | {{< icon name="check-circle" >}} Yes | {{< icon name="check-circle" >}} Yes | {{< icon name="check-circle" >}} Yes | Enforce a merge request approval policy enforcing multiple approvers and override various project settings in all enforced groups or projects across your GitLab instance or group. | diff --git a/doc/user/compliance/compliance_center/compliance_frameworks_report.md b/doc/user/compliance/compliance_center/compliance_frameworks_report.md index f971c27f09a..01d7fc318cd 100644 --- a/doc/user/compliance/compliance_center/compliance_frameworks_report.md +++ b/doc/user/compliance/compliance_center/compliance_frameworks_report.md @@ -91,7 +91,7 @@ Prerequisites: - You must be an administrator or have the Owner role for the group. -To set a compliance framework as [default](../compliance_frameworks.md#default-compliance-frameworks)] from the compliance frameworks report: +To set a compliance framework as [default](../compliance_frameworks/_index.md#default-compliance-frameworks)] from the compliance frameworks report: 1. On the left sidebar, select **Search or go to** and find your group. 1. Select **Secure > Compliance center**. diff --git a/doc/user/compliance/compliance_center/compliance_status_report.md b/doc/user/compliance/compliance_center/compliance_status_report.md index f90ee67c05a..e7a16ddfde7 100644 --- a/doc/user/compliance/compliance_center/compliance_status_report.md +++ b/doc/user/compliance/compliance_center/compliance_status_report.md @@ -18,7 +18,7 @@ title: Compliance status report {{< /history >}} -The compliance status report displays the most recent instances where projects do not adhere to [compliance framework requirements](../compliance_frameworks.md#requirements). It is part of the +The compliance status report displays the most recent instances where projects do not adhere to [compliance framework requirements](../compliance_frameworks/_index.md#requirements). It is part of the Compliance Center, and helps you quickly identify and remediate gaps in control implementation across your projects. ## Scan timing and triggers @@ -31,7 +31,7 @@ Compliance scans that update the status report are automatically triggered in th After a scan is triggered, results can take 5 to 10 minutes to appear in the compliance status report. -To learn more about how requirements and controls are defined in a compliance framework, see [Create and manage compliance framework requirements](../compliance_frameworks.md#add-requirements). +To learn more about how requirements and controls are defined in a compliance framework, see [Create and manage compliance framework requirements](../compliance_frameworks/_index.md#add-requirements). ## View the compliance status report diff --git a/doc/user/compliance/compliance_frameworks.md b/doc/user/compliance/compliance_frameworks/_index.md similarity index 69% rename from doc/user/compliance/compliance_frameworks.md rename to doc/user/compliance/compliance_frameworks/_index.md index 33b10448463..f3456f13436 100644 --- a/doc/user/compliance/compliance_frameworks.md +++ b/doc/user/compliance/compliance_frameworks/_index.md @@ -16,8 +16,8 @@ You can create a compliance framework that is a label to identify that your proj requirements or needs additional oversight. In the Ultimate tier, the compliance framework can optionally enforce -[compliance pipeline configuration](compliance_pipelines.md) and -[security policies](../application_security/policies/_index.md#scope) to the projects on which it is applied. +[compliance pipeline configuration](../compliance_pipelines.md) and +[security policies](../../application_security/policies/_index.md#scope) to the projects on which it is applied. Compliance frameworks are created on top-level groups. If a project is moved outside of its existing top-level group, its frameworks are removed. @@ -31,8 +31,8 @@ For a click-through demo, see [Compliance frameworks](https://gitlab.navattic.co - To create, edit, and delete compliance frameworks, users must have either: - The Owner role for the top-level group. - - Be assigned a [custom role](../custom_roles/_index.md) with the `admin_compliance_framework` - [custom permission](../custom_roles/abilities.md#compliance-management). + - Be assigned a [custom role](../../custom_roles/_index.md) with the `admin_compliance_framework` + [custom permission](../../custom_roles/abilities.md#compliance-management). - To add or remove a compliance framework to or from a project, the group to which the project belongs must have a compliance framework. @@ -42,15 +42,15 @@ You can create, edit, or delete a compliance framework by using either a complia For more information on using a compliance frameworks report, see: -- [Create a new compliance framework](compliance_center/compliance_frameworks_report.md#create-a-new-compliance-framework). -- [Edit a compliance framework](compliance_center/compliance_frameworks_report.md#edit-a-compliance-framework). -- [Delete a compliance framework](compliance_center/compliance_frameworks_report.md#delete-a-compliance-framework). +- [Create a new compliance framework](../compliance_center/compliance_frameworks_report.md#create-a-new-compliance-framework). +- [Edit a compliance framework](../compliance_center/compliance_frameworks_report.md#edit-a-compliance-framework). +- [Delete a compliance framework](../compliance_center/compliance_frameworks_report.md#delete-a-compliance-framework). For more information on using a compliance projects report, see: -- [Create a new compliance framework](compliance_center/compliance_projects_report.md#create-a-new-compliance-framework). -- [Edit a compliance framework](compliance_center/compliance_projects_report.md#edit-a-compliance-framework). -- [Delete a compliance framework](compliance_center/compliance_projects_report.md#delete-a-compliance-framework). +- [Create a new compliance framework](../compliance_center/compliance_projects_report.md#create-a-new-compliance-framework). +- [Edit a compliance framework](../compliance_center/compliance_projects_report.md#edit-a-compliance-framework). +- [Delete a compliance framework](../compliance_center/compliance_projects_report.md#delete-a-compliance-framework). Subgroups and projects have access to all compliance frameworks created on their top-level group. However, compliance frameworks cannot be created, edited, or deleted by using subgroups or projects. Project owners can choose a framework to apply to their projects. @@ -66,9 +66,9 @@ or deleted by using subgroups or projects. Project owners can choose a framework You can apply multiple compliance frameworks to a project but cannot apply compliance frameworks to projects in personal namespaces. To apply a compliance framework to a project, apply the compliance framework through the -[Compliance projects report](compliance_center/compliance_projects_report.md#apply-a-compliance-framework-to-projects-in-a-group). +[Compliance projects report](../compliance_center/compliance_projects_report.md#apply-a-compliance-framework-to-projects-in-a-group). -You can use the [GraphQL API](../../api/graphql/reference/_index.md#mutationprojectupdatecomplianceframeworks) to apply one or many +You can use the [GraphQL API](../../../api/graphql/reference/_index.md#mutationprojectupdatecomplianceframeworks) to apply one or many compliance frameworks to a project. If you create compliance frameworks on subgroups with GraphQL, the framework is created on the root ancestor if the user @@ -100,7 +100,7 @@ A compliance framework that is set to default has a **default** label. ### Set and remove a default by using the compliance center -To set as default (or remove the default) from [compliance projects report](compliance_center/compliance_projects_report.md): +To set as default (or remove the default) from [compliance projects report](../compliance_center/compliance_projects_report.md): 1. On the left sidebar, select **Search or go to** and find your group. 1. Select **Secure > Compliance center**. @@ -109,7 +109,7 @@ To set as default (or remove the default) from [compliance projects report](comp 1. Select **Set as default**. 1. Select **Save changes**. -To set as default (or remove the default) from [compliance framework report](compliance_center/compliance_frameworks_report.md): +To set as default (or remove the default) from [compliance framework report](../compliance_center/compliance_frameworks_report.md): 1. On the left sidebar, select **Search or go to** and find your group. 1. Select **Secure > Compliance center**. @@ -121,7 +121,7 @@ To set as default (or remove the default) from [compliance framework report](com ## Remove a compliance framework from a project To remove a compliance framework from one or multiple project in a group, remove the compliance framework through the -[Compliance projects report](compliance_center/compliance_projects_report.md#remove-a-compliance-framework-from-projects-in-a-group). +[Compliance projects report](../compliance_center/compliance_projects_report.md#remove-a-compliance-framework-from-projects-in-a-group). ## Import and export compliance frameworks @@ -178,7 +178,7 @@ If the import is successful, the new compliance framework appears in the list. A {{< history >}} -- [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/186525) in GitLab 17.11 [with a flag](../../administration/feature_flags.md) named `enable_standards_adherence_dashboard_v2`. Disabled by default. +- [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/186525) in GitLab 17.11 [with a flag](../../../administration/feature_flags.md) named `enable_standards_adherence_dashboard_v2`. Disabled by default. {{< /history >}} @@ -186,7 +186,7 @@ In GitLab Ultimate, you can define specific **requirements** for a compliance fr or more **controls**, which are checks against the configuration or behavior of projects that are assigned the framework. There is maximum of 5 controls per requirement. Each control includes logic that GitLab uses during scheduled or triggered scans to evaluate a project's adherence. For -more details on how adherence is tracked, see [Compliance status report](compliance_center/compliance_status_report.md). +more details on how adherence is tracked, see [Compliance status report](../compliance_center/compliance_status_report.md). You can use GitLab compliance controls or external controls for framework requirements. @@ -196,74 +196,74 @@ GitLab compliance controls can be used in GitLab compliance frameworks. Controls behavior of projects that are assigned to a compliance framework. Combine GitLab compliance controls to help you meet -[compliance standards](compliance_frameworks/compliance_standards.md). +[compliance standards](compliance_standards.md). - + | Control name | Control ID | Description | |:---------------------------------------------------------|:-----------------------------------------------------------|:------------| -| API security running | `scanner_api_security_running` | Ensures that [API security scanning](../application_security/api_security/_index.md) is configured and running in the project pipelines. | -| At least one approval | `minimum_approvals_required_1` | Ensures that merge requests [require at least one approvals](../project/merge_requests/approvals/_index.md) before merging. | -| At least two approvals | `minimum_approvals_required_2` | Ensures that merge requests [require at least two approvals](../project/merge_requests/approvals/_index.md) before merging. | -| Auth SSO enabled | `auth_sso_enabled` | Ensures that [Single Sign-On (SSO) authentication](../group/saml_sso/_index.md) is enabled for the project. | -| Author approved merge request is forbidden | `merge_request_prevent_author_approval` | Ensures that the author of a merge request [cannot approve their own changes](../project/merge_requests/approvals/_index.md). | -| Branch deletion disabled | `branch_deletion_disabled` | Ensures that [branches can't be deleted](../project/repository/branches/protected.md). | -| CI/CD job token scope enabled | `cicd_job_token_scope_enabled` | Ensures that [CI/CD job token](../../ci/jobs/ci_job_token.md) scope restrictions are enabled. | -| Code changes requires code owners | `code_changes_requires_code_owners` | Ensures that code changes require approval from [code owners](../project/codeowners/_index.md). | -| Code owner approval required | `code_owner_approval_required` | Ensures that [code owners file](../project/codeowners/_index.md) is configured. | -| Code quality running | `scanner_code_quality_running` | Ensures that [code quality scanning](../../ci/testing/code_quality.md) is configured and running in the project pipelines. | -| Committers approved merge request is forbidden | `merge_request_prevent_committers_approval` | Ensures that users who have [committed to a merge request cannot approve it](../project/merge_requests/approvals/_index.md). | -| Container scanning running | `scanner_container_scanning_running` | Ensures that [container scanning](../application_security/container_scanning/_index.md) is configured and running in the project pipelines. | -| DAST running | `scanner_dast_running` | Ensures that [Dynamic Application Security Testing](../application_security/dast/_index.md) (DAST) is configured and running in the project pipelines. | -| Default branch protected | `default_branch_protected` | Ensures that the default branch has [protection rules](../project/repository/branches/protected.md) enabled. | -| Default branch protected from direct push | `default_branch_protected_from_direct_push` | [Prevents direct pushes to the default branch](../project/repository/branches/protected.md). | -| Default branch users can merge | `default_branch_users_can_merge` | Controls [whether users can merge changes to the default branch](../project/repository/branches/protected.md). | -| Default branch users can push | `default_branch_users_can_push` | Controls [whether users can push directly to the default branch](../project/repository/branches/protected.md). | -| Dependency scanning running | `scanner_dep_scanning_running` | Ensures that [dependency scanning](../application_security/dependency_scanning/_index.md) is configured and running in the project pipelines. | -| Ensure two administrators per repository | `ensure_2_admins_per_repo` | Ensures that [at least two administrators](../project/members/_index.md) are assigned to each repository. | -| Error tracking enabled | `error_tracking_enabled` | Ensures that [error tracking](../../operations/error_tracking.md) is enabled for the project. | -| Force push disabled | `force_push_disabled` | Prevents [force pushing](../project/repository/branches/protected.md) to repositories. | -| Forks exist for the project | `has_forks` | Ensures that the project has been [forked](../project/repository/forking_workflow.md) | -| Fuzz testing running | `scanner_fuzz_testing_running` | Ensures that [fuzz testing](../application_security/coverage_fuzzing/_index.md) is configured and running in the project pipelines. | +| API security running | `scanner_api_security_running` | Ensures that [API security scanning](../../application_security/api_security/_index.md) is configured and running in the project pipelines. | +| At least one approval | `minimum_approvals_required_1` | Ensures that merge requests [require at least one approvals](../../project/merge_requests/approvals/_index.md) before merging. | +| At least two approvals | `minimum_approvals_required_2` | Ensures that merge requests [require at least two approvals](../../project/merge_requests/approvals/_index.md) before merging. | +| Auth SSO enabled | `auth_sso_enabled` | Ensures that [Single Sign-On (SSO) authentication](../../group/saml_sso/_index.md) is enabled for the project. | +| Author approved merge request is forbidden | `merge_request_prevent_author_approval` | Ensures that the author of a merge request [cannot approve their own changes](../../project/merge_requests/approvals/_index.md). | +| Branch deletion disabled | `branch_deletion_disabled` | Ensures that [branches can't be deleted](../../project/repository/branches/protected.md). | +| CI/CD job token scope enabled | `cicd_job_token_scope_enabled` | Ensures that [CI/CD job token](../../../ci/jobs/ci_job_token.md) scope restrictions are enabled. | +| Code changes requires code owners | `code_changes_requires_code_owners` | Ensures that code changes require approval from [code owners](../../project/codeowners/_index.md). | +| Code owner approval required | `code_owner_approval_required` | Ensures that [code owners file](../../project/codeowners/_index.md) is configured. | +| Code quality running | `scanner_code_quality_running` | Ensures that [code quality scanning](../../../ci/testing/code_quality.md) is configured and running in the project pipelines. | +| Committers approved merge request is forbidden | `merge_request_prevent_committers_approval` | Ensures that users who have [committed to a merge request cannot approve it](../../project/merge_requests/approvals/_index.md). | +| Container scanning running | `scanner_container_scanning_running` | Ensures that [container scanning](../../application_security/container_scanning/_index.md) is configured and running in the project pipelines. | +| DAST running | `scanner_dast_running` | Ensures that [Dynamic Application Security Testing](../../application_security/dast/_index.md) (DAST) is configured and running in the project pipelines. | +| Default branch protected | `default_branch_protected` | Ensures that the default branch has [protection rules](../../project/repository/branches/protected.md) enabled. | +| Default branch protected from direct push | `default_branch_protected_from_direct_push` | [Prevents direct pushes to the default branch](../../project/repository/branches/protected.md). | +| Default branch users can merge | `default_branch_users_can_merge` | Controls [whether users can merge changes to the default branch](../../project/repository/branches/protected.md). | +| Default branch users can push | `default_branch_users_can_push` | Controls [whether users can push directly to the default branch](../../project/repository/branches/protected.md). | +| Dependency scanning running | `scanner_dep_scanning_running` | Ensures that [dependency scanning](../../application_security/dependency_scanning/_index.md) is configured and running in the project pipelines. | +| Ensure two administrators per repository | `ensure_2_admins_per_repo` | Ensures that [at least two administrators](../../project/members/_index.md) are assigned to each repository. | +| Error tracking enabled | `error_tracking_enabled` | Ensures that [error tracking](../../../operations/error_tracking.md) is enabled for the project. | +| Force push disabled | `force_push_disabled` | Prevents [force pushing](../../project/repository/branches/protected.md) to repositories. | +| Forks exist for the project | `has_forks` | Ensures that the project has been [forked](../../project/repository/forking_workflow.md) | +| Fuzz testing running | `scanner_fuzz_testing_running` | Ensures that [fuzz testing](../../application_security/coverage_fuzzing/_index.md) is configured and running in the project pipelines. | | GitLab license level Ultimate | `gitlab_license_level_ultimate` | Ensures that the GitLab instance is using an [Ultimate license](https://about.gitlab.com/pricing/feature-comparison/). | -| Has valid CI/CD configuration | `has_valid_ci_config` | Ensures that the project has a [valid CI/CD configuration](../../ci/yaml/_index.md). | -| IaC scanning running | `scanner_iac_running` | Ensures [Infrastructure as Code (IaC) scanning](../application_security/iac_scanning/_index.md) is configured and running in the project pipelines. | -| Internal visibility is forbidden | `project_visibility_not_internal` | Ensures that projects are not set to [internal visibility](../public_access.md). | -| Issue tracking enabled | `issue_tracking_enabled` | Ensures that [issue tracking](../project/issues/_index.md) is enabled for the project. | -| License compliance running | `scanner_license_compliance_running` | Ensures that [license compliance scanning](license_approval_policies.md) is configured and running in the project pipelines. | -| Merge request commit reset approvals | `merge_request_commit_reset_approvals` | Ensures that [new commits to merge requests reset approvals](../project/merge_requests/approvals/settings.md). | -| Merge requests approval rules prevent editing | `merge_requests_approval_rules_prevent_editing` | Ensures that [merge request approval rules](../project/merge_requests/approvals/settings.md) can't be edited. | -| Merge requests require code owner approval | `merge_requests_require_code_owner_approval` | Ensures that merge requests require approval from [code owners](../project/codeowners/_index.md). | -| More members than admins | `more_members_than_admins` | Ensures fewer [administrators](../project/members/_index.md) are assigned to the project than total members. | -| Package Hunter no findings untriaged | `package_hunter_no_findings_untriaged` | Ensures that all [Package Hunter](../application_security/triage/_index.md) findings are triaged. | -| Project not archived | `project_archived` | Checks whether the [project is archived](../project/settings/_index.md). Typically `false` is compliant. | -| Project not marked for deletion | `project_marked_for_deletion` | Checks whether the [project is marked for deletion](../project/settings/_index.md). `false` is compliant. | -| Project pipelines not public | `project_pipelines_not_public` | Ensures that [project pipelines are not publicly visible](../../ci/pipelines/settings.md). | -| Project repository exists | `project_repo_exists` | Ensures that a [Git repository](../../topics/git/_index.md) exists for the project. | -| Project visibility not public | `project_visibility_not_public` | Ensures that projects are not set to [public visibility](../public_access.md). | -| Protected branches exist | `protected_branches_set` | Ensures that project contains [protected branches](../project/repository/branches/protected.md). | -| Push protection enabled | `push_protection_enabled` | Ensures that [push protection](../project/repository/push_rules.md) is enabled for sensitive files. | -| Require branch up to date | `require_branch_up_to_date` | Ensures that the [source branch is up to date with the target branch before merging](../project/merge_requests/methods/_index.md). | -| Require linear history | `require_linear_history` | Ensures a [linear commit history](../project/merge_requests/methods/_index.md#fast-forward-merge) by forbidding merge commits. | -| Require MFA at organization level | `require_mfa_at_org_level` | Ensures that [multi-factor authentication](../profile/account/two_factor_authentication.md) is required at the organization level. | -| Require MFA for contributors | `require_mfa_for_contributors` | Ensures that [contributors have multi-factor authentication enabled](../profile/account/two_factor_authentication.md). | -| Requires signed commits | `require_signed_commits` | Ensures that [signed commits](../project/repository/signed_commits) are required. | -| Reset approvals on push | `reset_approvals_on_push` | Ensures that [approvals are reset when new commits are pushed](../project/merge_requests/approvals/settings.md) to the merge request. | -| Resolve discussions required | `resolve_discussions_required` | Ensures that all [discussions must be resolved](../discussions/_index.md) before merging is allowed. | -| Restrict push/merge access | `restrict_push_merge_access` | Restricts who can push to or merge into [protected branches](../project/repository/branches/protected.md). | -| Restricted build access | `restricted_build_access` | Ensures [restricted access to build artifacts and pipeline outputs](../../ci/pipelines/settings.md). | -| Review and archive stale repositories | `review_and_archive_stale_repos` | Ensures that stale repositories are reviewed and [archived](../project/settings/_index.md). | -| Review and remove inactive users | `review_and_remove_inactive_users` | Ensures that [inactive users](../../administration/admin_area.md) are reviewed and removed. | -| SAST running | `scanner_sast_running` | Ensures that [Static Application Security Testing](../application_security/sast/_index.md) (SAST) is configured and running in the project pipelines. | -| Secret detection running | `scanner_secret_detection_running` | Ensures that [secret detection scanning](../application_security/secret_detection/_index.md) is configured and running in the project pipelines. | -| Secure webhooks | `secure_webhooks` | Ensures that [webhooks](../project/integrations/webhooks.md) are securely configured. | -| Stale branch cleanup enabled | `stale_branch_cleanup_enabled` | Ensures that [automatic cleanup of stale branches](../project/repository/branches/_index.md) is enabled. | -| Status checks required | `status_checks_required` | Ensures that [status checks](../project/merge_requests/status_checks.md) must pass before merging is allowed. | -| Status page configured | `status_page_configured` | Ensures that a [status page](../../operations/incident_management/status_page.md) is configured for the project. | -| Strict Permission for Repository | `strict_permissions_for_repo` | Ensures that [strict permissions](../permissions.md) are set for repository access. | -| Terraform enabled | `terraform_enabled` | Ensures that the [Terraform integration](../../administration/terraform_state.md) is enabled for the project. | -| User-defined CI/CD variables restricted to maintainers | `project_user_defined_variables_restricted_to_maintainers` | Ensures that only users with the maintainer role or higher can pass [user-defined variables when triggering pipelines](../../ci/variables/_index.md). | -| Vulnerabilities SLO days over threshold | `vulnerabilities_slo_days_over_threshold` | Ensures that [vulnerabilities are addressed](../application_security/vulnerabilities/_index.md) inside SLO thresholds (180 days). | +| Has valid CI/CD configuration | `has_valid_ci_config` | Ensures that the project has a [valid CI/CD configuration](../../../ci/yaml/_index.md). | +| IaC scanning running | `scanner_iac_running` | Ensures [Infrastructure as Code (IaC) scanning](../../application_security/iac_scanning/_index.md) is configured and running in the project pipelines. | +| Internal visibility is forbidden | `project_visibility_not_internal` | Ensures that projects are not set to [internal visibility](../../public_access.md). | +| Issue tracking enabled | `issue_tracking_enabled` | Ensures that [issue tracking](../../project/issues/_index.md) is enabled for the project. | +| License compliance running | `scanner_license_compliance_running` | Ensures that [license compliance scanning](../license_approval_policies.md) is configured and running in the project pipelines. | +| Merge request commit reset approvals | `merge_request_commit_reset_approvals` | Ensures that [new commits to merge requests reset approvals](../../project/merge_requests/approvals/settings.md). | +| Merge requests approval rules prevent editing | `merge_requests_approval_rules_prevent_editing` | Ensures that [merge request approval rules](../../project/merge_requests/approvals/settings.md) can't be edited. | +| Merge requests require code owner approval | `merge_requests_require_code_owner_approval` | Ensures that merge requests require approval from [code owners](../../project/codeowners/_index.md). | +| More members than admins | `more_members_than_admins` | Ensures fewer [administrators](../../project/members/_index.md) are assigned to the project than total members. | +| Package Hunter no findings untriaged | `package_hunter_no_findings_untriaged` | Ensures that all [Package Hunter](../../application_security/triage/_index.md) findings are triaged. | +| Project not archived | `project_archived` | Checks whether the [project is archived](../../project/settings/_index.md). Typically `false` is compliant. | +| Project not marked for deletion | `project_marked_for_deletion` | Checks whether the [project is marked for deletion](../../project/settings/_index.md). `false` is compliant. | +| Project pipelines not public | `project_pipelines_not_public` | Ensures that [project pipelines are not publicly visible](../../../ci/pipelines/settings.md). | +| Project repository exists | `project_repo_exists` | Ensures that a [Git repository](../../../topics/git/_index.md) exists for the project. | +| Project visibility not public | `project_visibility_not_public` | Ensures that projects are not set to [public visibility](../../public_access.md). | +| Protected branches exist | `protected_branches_set` | Ensures that project contains [protected branches](../../project/repository/branches/protected.md). | +| Push protection enabled | `push_protection_enabled` | Ensures that [push protection](../../project/repository/push_rules.md) is enabled for sensitive files. | +| Require branch up to date | `require_branch_up_to_date` | Ensures that the [source branch is up to date with the target branch before merging](../../project/merge_requests/methods/_index.md). | +| Require linear history | `require_linear_history` | Ensures a [linear commit history](../../project/merge_requests/methods/_index.md#fast-forward-merge) by forbidding merge commits. | +| Require MFA at organization level | `require_mfa_at_org_level` | Ensures that [multi-factor authentication](../../profile/account/two_factor_authentication.md) is required at the organization level. | +| Require MFA for contributors | `require_mfa_for_contributors` | Ensures that [contributors have multi-factor authentication enabled](../../profile/account/two_factor_authentication.md). | +| Requires signed commits | `require_signed_commits` | Ensures that [signed commits](../../project/repository/signed_commits) are required. | +| Reset approvals on push | `reset_approvals_on_push` | Ensures that [approvals are reset when new commits are pushed](../../project/merge_requests/approvals/settings.md) to the merge request. | +| Resolve discussions required | `resolve_discussions_required` | Ensures that all [discussions must be resolved](../../discussions/_index.md) before merging is allowed. | +| Restrict push/merge access | `restrict_push_merge_access` | Restricts who can push to or merge into [protected branches](../../project/repository/branches/protected.md). | +| Restricted build access | `restricted_build_access` | Ensures [restricted access to build artifacts and pipeline outputs](../../../ci/pipelines/settings.md). | +| Review and archive stale repositories | `review_and_archive_stale_repos` | Ensures that stale repositories are reviewed and [archived](../../project/settings/_index.md). | +| Review and remove inactive users | `review_and_remove_inactive_users` | Ensures that [inactive users](../../../administration/admin_area.md) are reviewed and removed. | +| SAST running | `scanner_sast_running` | Ensures that [Static Application Security Testing](../../application_security/sast/_index.md) (SAST) is configured and running in the project pipelines. | +| Secret detection running | `scanner_secret_detection_running` | Ensures that [secret detection scanning](../../application_security/secret_detection/_index.md) is configured and running in the project pipelines. | +| Secure webhooks | `secure_webhooks` | Ensures that [webhooks](../../project/integrations/webhooks.md) are securely configured. | +| Stale branch cleanup enabled | `stale_branch_cleanup_enabled` | Ensures that [automatic cleanup of stale branches](../../project/repository/branches/_index.md) is enabled. | +| Status checks required | `status_checks_required` | Ensures that [status checks](../../project/merge_requests/status_checks.md) must pass before merging is allowed. | +| Status page configured | `status_page_configured` | Ensures that a [status page](../../../operations/incident_management/status_page.md) is configured for the project. | +| Strict Permission for Repository | `strict_permissions_for_repo` | Ensures that [strict permissions](../../permissions.md) are set for repository access. | +| Terraform enabled | `terraform_enabled` | Ensures that the [Terraform integration](../../../administration/terraform_state.md) is enabled for the project. | +| User-defined CI/CD variables restricted to maintainers | `project_user_defined_variables_restricted_to_maintainers` | Ensures that only users with the maintainer role or higher can pass [user-defined variables when triggering pipelines](../../../ci/variables/_index.md). | +| Vulnerabilities SLO days over threshold | `vulnerabilities_slo_days_over_threshold` | Ensures that [vulnerabilities are addressed](../../application_security/vulnerabilities/_index.md) inside SLO thresholds (180 days). | ### External controls @@ -271,10 +271,10 @@ External controls are API calls to external systems that request the status of a You can create a external control that sends data to third-party tools. -When the [compliance scans](compliance_center/compliance_status_report.md#scan-timing-and-triggers) are run, GitLab sends a notification. The users or automated workflows can then update the status of control from outside of GitLab. +When the [compliance scans](../compliance_center/compliance_status_report.md#scan-timing-and-triggers) are run, GitLab sends a notification. The users or automated workflows can then update the status of control from outside of GitLab. With this integration, you can integrate with third-party workflow tools, like ServiceNow, or the custom tool of your choice. The third-party tool -responds with an associated status. This status is then displayed in the [Compliance status report](compliance_center/compliance_status_report.md). +responds with an associated status. This status is then displayed in the [Compliance status report](../compliance_center/compliance_status_report.md). You can configure external controls for each individual project. External controls are not shared between projects. Status checks fail if an external control stays in the pending state for more than six hours. @@ -294,7 +294,7 @@ To add an external control when creating or editing a framework: #### External control lifecycle -External controls have an **asynchronous** workflow. [Compliance scans](compliance_center/compliance_status_report.md#scan-timing-and-triggers) emit a payload to an external service whenever. +External controls have an **asynchronous** workflow. [Compliance scans](../compliance_center/compliance_status_report.md#scan-timing-and-triggers) emit a payload to an external service whenever. ```mermaid sequenceDiagram @@ -314,7 +314,7 @@ External controls can have one of three statuses. | `pass` | Response received from the external service and the external control was approved by the external service. | | `fail` | Response received from the external service and the external control was denied by the external service. | -If something changes outside of GitLab, you can set the [status of an external control by using the API](../../api/external_controls.md). You don't need to wait for a payload to be sent first. +If something changes outside of GitLab, you can set the [status of an external control by using the API](../../../api/external_controls.md). You don't need to wait for a payload to be sent first. ### Add requirements diff --git a/doc/user/compliance/compliance_frameworks/compliance_standards.md b/doc/user/compliance/compliance_frameworks/compliance_standards.md index 3dd06d941ff..de9eef67913 100644 --- a/doc/user/compliance/compliance_frameworks/compliance_standards.md +++ b/doc/user/compliance/compliance_frameworks/compliance_standards.md @@ -5,8 +5,8 @@ info: To determine the technical writer assigned to the Stage/Group associated w title: Compliance standards --- -You can use [GitLab compliance controls](../compliance_frameworks.md#gitlab-compliance-controls) to help meet the -requirements of many compliance standards. +You can use [GitLab compliance controls](_index.md#gitlab-compliance-controls) to help meet the requirements of many +compliance standards. ## ISO 27001 compliance requirements diff --git a/doc/user/compliance/compliance_pipelines.md b/doc/user/compliance/compliance_pipelines.md index 14791f2858c..f61c9fdfa7b 100644 --- a/doc/user/compliance/compliance_pipelines.md +++ b/doc/user/compliance/compliance_pipelines.md @@ -66,7 +66,7 @@ To migrate an existing compliance framework to use the pipeline execution policy 1. On the left sidebar, select **Search or go to** and find your group. 1. Select **Secure > Compliance center**. -1. [Edit](compliance_frameworks.md#create-edit-or-delete-a-compliance-framework) the existing compliance framework. +1. [Edit](compliance_frameworks/_index.md#create-edit-or-delete-a-compliance-framework) the existing compliance framework. 1. In the banner than appears, select **Migrate pipeline to a policy** to create a new policy in the security policies. 1. Edit the compliance framework again to remove the compliance pipeline. @@ -88,7 +88,7 @@ Therefore, communicate with project users about compliance pipeline configuratio ### Multiple compliance frameworks -You can [apply to a single project](compliance_frameworks.md#apply-a-compliance-framework-to-a-project) multiple compliance frameworks with compliance pipelines configured. +You can [apply to a single project](compliance_frameworks/_index.md#apply-a-compliance-framework-to-a-project) multiple compliance frameworks with compliance pipelines configured. In this case, only the first compliance framework applied to a project has its compliance pipeline included in the project pipeline. To ensure that the correct compliance pipeline is included in a project: diff --git a/doc/user/group/compliance_frameworks.md b/doc/user/group/compliance_frameworks.md index b6d6df66700..227c377d7b6 100644 --- a/doc/user/group/compliance_frameworks.md +++ b/doc/user/group/compliance_frameworks.md @@ -1,13 +1,13 @@ --- -redirect_to: '../compliance/compliance_frameworks.md' +redirect_to: '../compliance/compliance_frameworks/_index.md' remove_date: '2025-05-25' --- -This document was moved to [another location](../compliance/compliance_frameworks.md). +This document was moved to [another location](../compliance/compliance_frameworks/_index.md). - \ No newline at end of file + diff --git a/doc/user/permissions.md b/doc/user/permissions.md index ca1392aeb76..0b2dd89c700 100644 --- a/doc/user/permissions.md +++ b/doc/user/permissions.md @@ -113,8 +113,8 @@ Group permissions for [compliance](compliance/_index.md) features including comp | View [audit events](compliance/audit_events.md) | | | | ✓ | ✓ | ✓ | Users can view only events based on their individual actions. For more details, see the [prerequisites](compliance/audit_events.md#prerequisites). | | View licenses in the [dependency list](application_security/dependency_list/_index.md) | | | | ✓ | ✓ | ✓ | | | View the [compliance center](compliance/compliance_center/_index.md) | | | | | | ✓ | | -| Manage [compliance frameworks](compliance/compliance_frameworks.md) | | | | | | ✓ | | -| Assign [compliance frameworks](compliance/compliance_frameworks.md) to projects | | | | | | ✓ | | +| Manage [compliance frameworks](compliance/compliance_frameworks/_index.md) | | | | | | ✓ | | +| Assign [compliance frameworks](compliance/compliance_frameworks/_index.md) to projects | | | | | | ✓ | | | Manage [audit streams](compliance/audit_event_streaming.md) | | | | | | ✓ | | ### GitLab Duo group permissions diff --git a/doc/user/project/working_with_projects.md b/doc/user/project/working_with_projects.md index b786d15844b..bdf4e5347a0 100644 --- a/doc/user/project/working_with_projects.md +++ b/doc/user/project/working_with_projects.md @@ -523,7 +523,7 @@ To leave a project: {{< /details >}} -You can add compliance frameworks to projects in a group that has a [compliance framework](../compliance/compliance_frameworks.md). +You can add compliance frameworks to projects in a group that has a [compliance framework](../compliance/compliance_frameworks/_index.md). ## Manage project access through LDAP groups diff --git a/gems/gitlab-backup-cli/Gemfile.lock b/gems/gitlab-backup-cli/Gemfile.lock index 3c9cb8529f6..2eab9dbba6f 100644 --- a/gems/gitlab-backup-cli/Gemfile.lock +++ b/gems/gitlab-backup-cli/Gemfile.lock @@ -19,7 +19,7 @@ PATH google-cloud-storage_transfer (~> 1.2.0) google-protobuf (~> 3.25, >= 3.25.3) googleauth (~> 1.8.1) - grpc (= 1.63.0) + grpc (~> 1.72.0) json (~> 2.7) jwt (~> 2.5) logger (~> 1.5) @@ -106,23 +106,23 @@ GEM multi_json (~> 1.11) os (>= 0.9, < 2.0) signet (>= 0.16, < 2.a) - grpc (1.63.0) - google-protobuf (~> 3.25) + grpc (1.72.0) + google-protobuf (>= 3.25, < 5.0) googleapis-common-protos-types (~> 1.0) - grpc (1.63.0-aarch64-linux) - google-protobuf (~> 3.25) + grpc (1.72.0-aarch64-linux) + google-protobuf (>= 3.25, < 5.0) googleapis-common-protos-types (~> 1.0) - grpc (1.63.0-arm64-darwin) - google-protobuf (~> 3.25) + grpc (1.72.0-arm64-darwin) + google-protobuf (>= 3.25, < 5.0) googleapis-common-protos-types (~> 1.0) - grpc (1.63.0-x86-linux) - google-protobuf (~> 3.25) + grpc (1.72.0-x86-linux) + google-protobuf (>= 3.25, < 5.0) googleapis-common-protos-types (~> 1.0) - grpc (1.63.0-x86_64-darwin) - google-protobuf (~> 3.25) + grpc (1.72.0-x86_64-darwin) + google-protobuf (>= 3.25, < 5.0) googleapis-common-protos-types (~> 1.0) - grpc (1.63.0-x86_64-linux) - google-protobuf (~> 3.25) + grpc (1.72.0-x86_64-linux) + google-protobuf (>= 3.25, < 5.0) googleapis-common-protos-types (~> 1.0) i18n (1.14.5) concurrent-ruby (~> 1.0) @@ -236,7 +236,7 @@ CHECKSUMS addressable (2.8.7) sha256=462986537cf3735ab5f3c0f557f14155d778f4b43ea4f485a9deb9c8f7c58232 ast (2.4.2) sha256=1e280232e6a33754cde542bc5ef85520b74db2aac73ec14acef453784447cc12 base64 (0.2.0) sha256=0f25e9b21a02a0cc0cea8ef92b2041035d39350946e8789c562b2d1a3da01507 - bigdecimal (3.1.9) + bigdecimal (3.1.9) sha256=2ffc742031521ad69c2dfc815a98e426a230a3d22aeac1995826a75dabfad8cc coderay (1.1.3) sha256=dc530018a4684512f8f38143cd2a096c9f02a1fc2459edcfe534787a7fc77d4b concurrent-ruby (1.3.4) sha256=d4aa926339b0a86b5b5054a0a8c580163e6f5dcbdfd0f4bb916b1a2570731c32 diff-lcs (1.5.1) sha256=273223dfb40685548436d32b4733aa67351769c7dea621da7d9dd4813e63ddfe @@ -262,12 +262,12 @@ CHECKSUMS googleapis-common-protos (1.6.0) sha256=d540114a75fd4b34fee936495d28ff7e331d546b7d7ac7898f3b4bb9f13a8d79 googleapis-common-protos-types (1.15.0) sha256=57b1600c271fa3312096e55a3040d20d2c0f9a5d65d0fde1f16e5cd99bab156b googleauth (1.8.1) sha256=814adadaaa1221dce72a67131e3ecbd6d23491a161ec84fb15fd353b87d8c9e7 - grpc (1.63.0) sha256=5f4383c4ee2886e92c31b90422261b7527f26e3baa585d877e9804e715983686 - grpc (1.63.0-aarch64-linux) sha256=dc75c5fd570b819470781d9512105dddfdd11d984f38b8e60bb946f92d1f79ee - grpc (1.63.0-arm64-darwin) sha256=91b93a354508a9d1772f095554f2e4c04358c2b32d7a670e3705b7fc4695c996 - grpc (1.63.0-x86-linux) sha256=152140fa2c28e384d3c1ded454a66d5e22fb2ff1d2920c2ef2530b2d707de6fd - grpc (1.63.0-x86_64-darwin) sha256=a814414ff178e89ee3ad0cc2a826ce1ca96c68063effb81affe3e5ceff7b44cc - grpc (1.63.0-x86_64-linux) sha256=41a90a597f44959c8dbb94619db2b0c0939a768569a5dfad41fffa227eb1287d + grpc (1.72.0) sha256=56fa0da2f4f96471f59430a9ef08a612cc77649e8fa118c83ae7d0bb619bea09 + grpc (1.72.0-aarch64-linux) sha256=4c739fcd66f446d2eb3816a405da0f27c6004902f3a7d46d0de378da1d242009 + grpc (1.72.0-arm64-darwin) sha256=91d5d5b8fa19f8f8053b0eceb43985134b40a1f18c56798a00c438d2d70f652a + grpc (1.72.0-x86-linux) sha256=865d16bef67b61cf0c51a77421c6659cff16ed4641a46342ea5c058f041e8127 + grpc (1.72.0-x86_64-darwin) sha256=198b5e3eecea88f29e41415db9168bcd1a821763967adc6299bf4946c5137a36 + grpc (1.72.0-x86_64-linux) sha256=3662b40cb1cddce5fb33ae61016138d8dd905523db7d65ad664e6f5ea5354360 i18n (1.14.5) sha256=26dcbc05e364b57e27ab430148b3377bc413987d34cc042336271d8f42e9d1b9 json (2.10.1) sha256=ddc88ad91a1baf3f0038c174f253af3b086d30dc74db17ca4259bbde982f94dc jwt (2.8.2) sha256=5a9877315e224d551785560870287267088eedfec02d5239664def148d18bc12 @@ -276,7 +276,7 @@ CHECKSUMS method_source (1.1.0) sha256=181301c9c45b731b4769bc81e8860e72f9161ad7d66dd99103c9ab84f560f5c5 minitest (5.11.3) sha256=78e18aa2c49c58e9bc53c54a0b900e87ad0a96394e92fbbfa58d3ff860a68f45 multi_json (1.15.0) sha256=1fd04138b6e4a90017e8d1b804c039031399866ff3fbabb7822aea367c78615d - mutex_m (0.3.0) + mutex_m (0.3.0) sha256=cfcb04ac16b69c4813777022fdceda24e9f798e48092a2b817eb4c0a782b0751 net-http (0.4.1) sha256=a96efc5ea18bcb9715e24dda4159d10f67ff0345c8a980d04630028055b2c282 os (1.1.4) sha256=57816d6a334e7bd6aed048f4b0308226c5fb027433b67d90a9ab435f35108d3f parallel (1.26.3) sha256=d86babb7a2b814be9f4b81587bf0b6ce2da7d45969fab24d8ae4bf2bb4d4c7ef diff --git a/gems/gitlab-backup-cli/gitlab-backup-cli.gemspec b/gems/gitlab-backup-cli/gitlab-backup-cli.gemspec index bf4311713f6..3ed9ee42eb7 100644 --- a/gems/gitlab-backup-cli/gitlab-backup-cli.gemspec +++ b/gems/gitlab-backup-cli/gitlab-backup-cli.gemspec @@ -40,7 +40,7 @@ Gem::Specification.new do |spec| spec.add_dependency "concurrent-ruby", "~> 1.1" spec.add_dependency "faraday", "~> 2" spec.add_dependency "google-protobuf", "~> 3.25", ">= 3.25.3" - spec.add_dependency "grpc", "= 1.63.0" + spec.add_dependency "grpc", "~> 1.72.0" spec.add_dependency "json", "~> 2.7" spec.add_dependency "jwt", "~> 2.5" spec.add_dependency "logger", "~> 1.5" diff --git a/lib/api/usage_data.rb b/lib/api/usage_data.rb index 81892b2b784..eed9b576701 100644 --- a/lib/api/usage_data.rb +++ b/lib/api/usage_data.rb @@ -6,9 +6,6 @@ module API MAXIMUM_TRACKED_EVENTS = 50 - # Insert fields that shouldn't saved on internal telemetry - FIELDS_BLOCKED_FOR_INTERNAL_EVENTS = %i[branch_name].freeze - before { authenticate_non_get! } feature_category :service_ping @@ -45,7 +42,7 @@ module API user: current_user, namespace_id: namespace_id, project_id: project_id, - additional_properties: additional_properties.except(*FIELDS_BLOCKED_FOR_INTERNAL_EVENTS) + additional_properties: additional_properties ) end end diff --git a/lib/gitlab/internal_events.rb b/lib/gitlab/internal_events.rb index c2e9b18b788..184919ef60f 100644 --- a/lib/gitlab/internal_events.rb +++ b/lib/gitlab/internal_events.rb @@ -14,25 +14,18 @@ module Gitlab include Gitlab::UsageDataCounters::RedisHashCounter def track_event(event_name, category: nil, additional_properties: {}, **kwargs) - unless Gitlab::Tracking::EventDefinition.internal_event_exists?(event_name) - Gitlab::AppJsonLogger.warn("InternalEvents.track_event called with undefined event: #{event_name}") - end - Gitlab::Tracking::EventValidator.new(event_name, additional_properties, kwargs).validate! - event_definition = Gitlab::Tracking::EventDefinition.find(event_name) - send_snowplow_event = kwargs.fetch(:send_snowplow_event, true) - + send_snowplow_event = kwargs.key?(:send_snowplow_event) ? kwargs.delete(:send_snowplow_event) : true + event_router = Gitlab::InternalEvents::EventsRouter.new(event_name, additional_properties, kwargs) track_analytics_event(event_name, send_snowplow_event, category: category, - additional_properties: additional_properties, **kwargs) + additional_properties: event_router.public_additional_properties, **kwargs) - return unless event_definition + event_router.event_definition.extra_trackers.each do |tracking_class, properties| + next unless tracking_class - kwargs[:additional_properties] = additional_properties - event_definition.extra_tracking_classes.each do |tracking_class| - tracking_class.track_event(event_name, **kwargs) + tracking_class.track_event(event_name, **event_router.extra_tracking_data(properties)) end - rescue StandardError => e extra = {} kwargs.each_key do |k| diff --git a/lib/gitlab/internal_events/events_router.rb b/lib/gitlab/internal_events/events_router.rb new file mode 100644 index 00000000000..9dd957041ce --- /dev/null +++ b/lib/gitlab/internal_events/events_router.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +module Gitlab + module InternalEvents + class EventsRouter + include Gitlab::Utils::StrongMemoize + + def initialize(event_name, additional_properties, kwargs) + @event_name = event_name + @additional_properties = additional_properties + @kwargs = kwargs + end + + def public_additional_properties + public_properties = event_definition.additional_properties.keys + additional_properties.slice(*public_properties) + end + + def event_definition + Gitlab::Tracking::EventDefinition.find(event_name) + end + strong_memoize_attr :event_definition + + def extra_tracking_data(properties) + additional_properties.slice(*properties[:protected_properties]) + .merge(public_additional_properties) + .merge(kwargs) + end + + private + + attr_accessor :event_name, :additional_properties, :kwargs + end + end +end diff --git a/lib/gitlab/tracking/ai_tracking.rb b/lib/gitlab/tracking/ai_tracking.rb index fbcd42acae8..00834a2b194 100644 --- a/lib/gitlab/tracking/ai_tracking.rb +++ b/lib/gitlab/tracking/ai_tracking.rb @@ -4,7 +4,7 @@ module Gitlab module Tracking class AiTracking # events getting taken care of by instrumentation layer - EVENTS_MIGRATED_TO_INSTRUMENTATION_LAYER = ['request_duo_chat_response'].freeze + EVENTS_MIGRATED_TO_INSTRUMENTATION_LAYER = %w[request_duo_chat_response code_suggestion_shown_in_ide].freeze def self.track_event(*args, **kwargs) new.track_event(*args, **kwargs) diff --git a/lib/gitlab/tracking/event_definition.rb b/lib/gitlab/tracking/event_definition.rb index a0b43275702..ff5607815e2 100644 --- a/lib/gitlab/tracking/event_definition.rb +++ b/lib/gitlab/tracking/event_definition.rb @@ -80,8 +80,15 @@ module Gitlab @attributes[:action] end - def extra_tracking_classes - @attributes[:extra_tracking_classes]&.map(&:constantize) || [] + def extra_trackers + return [] unless @attributes[:extra_trackers] + + @attributes[:extra_trackers].to_h do |item| + [ + item[:tracking_class].constantize, + { protected_properties: item[:protected_properties]&.keys || [] } + ] + end end def duo_event? diff --git a/lib/gitlab/tracking/event_validator.rb b/lib/gitlab/tracking/event_validator.rb index 76d8d3adb66..138ebc8abc6 100644 --- a/lib/gitlab/tracking/event_validator.rb +++ b/lib/gitlab/tracking/event_validator.rb @@ -53,9 +53,13 @@ module Gitlab def validate_additional_properties! event_definition = Gitlab::Tracking::EventDefinition.find(event_name) + extra_tracking_properties = event_definition.extra_trackers.flat_map do |_, properties| + properties[:protected_properties] + end + declared_properties = event_definition.additional_properties.keys.concat(extra_tracking_properties) additional_properties.each_key do |property| - unless event_definition.additional_properties.has_key?(property) + unless declared_properties.include?(property) Gitlab::AppJsonLogger.warn("Tracking event: #{event_name}, undocumented property: #{property}") end @@ -70,12 +74,12 @@ module Gitlab allowed_types = CUSTOM_PROPERTIES_CLASSES custom_properties.each_key do |key| - unless event_definition.additional_properties.has_key?(key) + unless declared_properties.include?(key) error = InvalidPropertyError.new("Unknown additional property: #{key} for event_name: #{event_name}") log_invalid_property(error) end - validate_property!(custom_properties, key, *allowed_types) + validate_property!(custom_properties, key, *allowed_types) unless extra_tracking_properties.include?(key) end end diff --git a/spec/controllers/concerns/product_analytics_tracking_spec.rb b/spec/controllers/concerns/product_analytics_tracking_spec.rb index 45fc66b2801..b3047473a12 100644 --- a/spec/controllers/concerns/product_analytics_tracking_spec.rb +++ b/spec/controllers/concerns/product_analytics_tracking_spec.rb @@ -70,7 +70,7 @@ RSpec.describe ProductAnalyticsTracking, :snowplow, feature_category: :product_a additional_properties: {} ) allow(Gitlab::Tracking::EventDefinition).to receive(:find).with(event_name).and_return(event_definition) - allow(event_definition).to receive(:extra_tracking_classes).and_return([]) + allow(event_definition).to receive(:extra_trackers).and_return({}) end context 'when user is logged in' do diff --git a/spec/factories/projects/deletion_schedules.rb b/spec/factories/projects/deletion_schedules.rb deleted file mode 100644 index 64aa59037c7..00000000000 --- a/spec/factories/projects/deletion_schedules.rb +++ /dev/null @@ -1,9 +0,0 @@ -# frozen_string_literal: true - -FactoryBot.define do - factory :project_deletion_schedule, class: 'Projects::DeletionSchedule' do - association :project, factory: :project - association :deleting_user, factory: :user - marked_for_deletion_at { Time.current } - end -end diff --git a/spec/lib/gitlab/internal_events/events_router_spec.rb b/spec/lib/gitlab/internal_events/events_router_spec.rb new file mode 100644 index 00000000000..efaba3b6a15 --- /dev/null +++ b/spec/lib/gitlab/internal_events/events_router_spec.rb @@ -0,0 +1,51 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Gitlab::InternalEvents::EventsRouter, feature_category: :product_analytics do + let(:event_name) { 'test_event' } + let(:additional_properties) { { foo: 'bar', baz: 'qux', public1: 1, public2: 2 } } + let(:kwargs) { { extra: 'value' } } + let(:event_definition) { instance_double(Gitlab::Tracking::EventDefinition) } + + subject(:router) { described_class.new(event_name, additional_properties, kwargs) } + + before do + allow(Gitlab::Tracking::EventDefinition).to receive(:find).with(event_name).and_return(event_definition) + end + + describe '#public_additional_properties' do + before do + allow(event_definition).to receive(:additional_properties).and_return({ public1: {}, public2: {} }) + end + + it 'returns only public additional properties' do + expect(router.public_additional_properties).to eq({ public1: 1, public2: 2 }) + end + end + + describe '#event_definition' do + it 'returns the event definition for the event name' do + expect(router.event_definition).to eq(event_definition) + end + end + + describe '#extra_tracking_data' do + let(:properties) { { protected_properties: [:foo, :baz] } } + + before do + allow(event_definition).to receive(:additional_properties).and_return({ public1: {}, public2: {} }) + allow(router).to receive(:public_additional_properties).and_return({ public1: 1, public2: 2 }) + end + + it 'merges extra properties, public properties, and kwargs' do + expect(router.extra_tracking_data(properties)).to eq({ + foo: 'bar', + baz: 'qux', + public1: 1, + public2: 2, + extra: 'value' + }) + end + end +end diff --git a/spec/lib/gitlab/internal_events_spec.rb b/spec/lib/gitlab/internal_events_spec.rb index a4df90ebd14..9c8a1c33016 100644 --- a/spec/lib/gitlab/internal_events_spec.rb +++ b/spec/lib/gitlab/internal_events_spec.rb @@ -24,8 +24,12 @@ RSpec.describe Gitlab::InternalEvents, :snowplow, feature_category: :product_ana allow_next_instance_of(Gitlab::Tracking::EventValidator) do |instance| allow(instance).to receive(:validate!) end - allow(event_definition).to receive_messages(event_selection_rules: event_selection_rules, raw_attributes: {}) - allow(event_definition).to receive(:extra_tracking_classes).and_return([]) + allow(event_definition).to receive_messages( + event_selection_rules: event_selection_rules, + raw_attributes: {}, + additional_properties: additional_properties, + extra_trackers: {} + ) allow(fake_snowplow).to receive(:event) end @@ -225,6 +229,10 @@ RSpec.describe Gitlab::InternalEvents, :snowplow, feature_category: :product_ana additional_properties.merge(custom: 'custom_property') end + before do + allow(event_definition).to receive(:additional_properties).and_return(properties) + end + it 'is sent to Snowplow' do track_event @@ -290,6 +298,11 @@ RSpec.describe Gitlab::InternalEvents, :snowplow, feature_category: :product_ana ] end + before do + allow(event_definition).to receive(:additional_properties) + .and_return(additional_properties.merge(custom_properties)) + end + it 'updates the correct redis keys' do described_class.track_event( event_name, @@ -378,6 +391,16 @@ RSpec.describe Gitlab::InternalEvents, :snowplow, feature_category: :product_ana end end end + + context 'when additional properties are not defined in the event definition' do + let(:properties) { additional_properties.merge(unknown: 'unknown') } + + it 'does not send the additional properties to Snowplow' do + track_event + + expect_snowplow_tracking(nil, additional_properties, extra: {}) + end + end end context 'when feature_enabled_by_namespace_ids is passed' do @@ -565,21 +588,6 @@ RSpec.describe Gitlab::InternalEvents, :snowplow, feature_category: :product_ana end end - context 'when event is not defined' do - let(:event_name) { 'an_event_that_does_not_exist' } - - before do - allow(Gitlab::Tracking::EventDefinition).to receive(:internal_event_exists?).with(event_name).and_return(false) - end - - it 'logs a warning' do - expect(Gitlab::AppJsonLogger).to receive(:warn) - .with("InternalEvents.track_event called with undefined event: an_event_that_does_not_exist") - - described_class.track_event(event_name) - end - end - describe 'Product Analytics tracking' do let(:app_id) { 'foobar' } let(:url) { 'http://localhost:4000' } @@ -733,7 +741,6 @@ RSpec.describe Gitlab::InternalEvents, :snowplow, feature_category: :product_ana context 'when namespace is early access program participant' do let(:namespace_participating) { true } let(:event_name) { 'g_edit_by_snippet_ide' } - let(:additional_properties) { { label: 'label_name' } } let(:user) { create(:user) } before do @@ -756,7 +763,7 @@ RSpec.describe Gitlab::InternalEvents, :snowplow, feature_category: :product_ana expect(user.early_access_program_tracking_events.size).to eq 1 expect(user.early_access_program_tracking_events.first) .to have_attributes( - event_name: 'g_edit_by_snippet_ide', event_label: 'label_name', category: 'InternalEventTracking' + event_name: 'g_edit_by_snippet_ide', category: 'InternalEventTracking' ) end end @@ -774,7 +781,11 @@ RSpec.describe Gitlab::InternalEvents, :snowplow, feature_category: :product_ana end describe 'custom tracking classes' do - let(:event_kwargs) { { additional_properties: additional_properties, user: user, project: project } } + let(:extra_properties) { { private_property: 'private_prop' } } + let(:event_kwargs) do + additional_properties.merge(extra_properties).merge({ user: user, project: project }) + end + let(:custom_tracking_class) do Class.new do def self.track_event(event_name, **kwargs); end @@ -783,7 +794,8 @@ RSpec.describe Gitlab::InternalEvents, :snowplow, feature_category: :product_ana context 'when custom classes are defined' do before do - allow(event_definition).to receive(:extra_tracking_classes).and_return([custom_tracking_class]) + custom_tracking = { custom_tracking_class => { extra_properties: [:private_property] } } + allow(event_definition).to receive(:extra_trackers).and_return(custom_tracking) end context 'when event is not defined' do @@ -800,10 +812,11 @@ RSpec.describe Gitlab::InternalEvents, :snowplow, feature_category: :product_ana end end - it 'calls the custom classes' do + it 'calls the custom classes with extra tracking properties' do expect(custom_tracking_class).to receive(:track_event).with(event_name, **event_kwargs) - described_class.track_event(event_name, additional_properties: additional_properties, **event_kwargs) + # expected_kwags= event_kwargs.merge(private_property: 'private_prop') + described_class.track_event(event_name, **event_kwargs) end end end diff --git a/spec/lib/gitlab/tracking/event_definition_spec.rb b/spec/lib/gitlab/tracking/event_definition_spec.rb index 5a9de25addd..5ea2f5a3c77 100644 --- a/spec/lib/gitlab/tracking/event_definition_spec.rb +++ b/spec/lib/gitlab/tracking/event_definition_spec.rb @@ -143,15 +143,40 @@ RSpec.describe Gitlab::Tracking::EventDefinition, feature_category: :service_pin end end - describe '.extra_tracking_classes' do - it 'returns an empty array when no extra tracking classes are set' do - expect(described_class.new(nil, {}).extra_tracking_classes).to eq([]) + describe '.extra_trackers' do + it 'returns an empty hash when no extra tracking classes are set' do + expect(described_class.new(nil, {}).extra_trackers).to eq([]) end - it 'returns the extra tracking classes when they are set' do - config = attributes.merge({ extra_tracking_classes: ['Gitlab::Tracking::AiTracking'] }) + it 'returns the hash with extra tracking class and props when they are set' do + extra_trackers = { + extra_trackers: + [ + { + tracking_class: 'Gitlab::Tracking::AiTracking', + protected_properties: { prop: { description: 'description' } } + } + ] + } + config = attributes.merge(extra_trackers) - expect(described_class.new(nil, config).extra_tracking_classes).to eq([Gitlab::Tracking::AiTracking]) + expect(described_class.new(nil, config).extra_trackers) + .to eq({ Gitlab::Tracking::AiTracking => { protected_properties: [:prop] } }) + end + + it 'returns the hash with extra tracking class with empty array when props are not set' do + extra_trackers = { + extra_trackers: + [ + { + tracking_class: 'Gitlab::Tracking::AiTracking' + } + ] + } + config = attributes.merge(extra_trackers) + + expect(described_class.new(nil, config).extra_trackers) + .to eq({ Gitlab::Tracking::AiTracking => { protected_properties: [] } }) end end diff --git a/spec/lib/gitlab/tracking/event_validator_spec.rb b/spec/lib/gitlab/tracking/event_validator_spec.rb index 34ef5724fcd..a6fc88cf89a 100644 --- a/spec/lib/gitlab/tracking/event_validator_spec.rb +++ b/spec/lib/gitlab/tracking/event_validator_spec.rb @@ -14,6 +14,7 @@ RSpec.describe Gitlab::Tracking::EventValidator, feature_category: :service_ping allow(Gitlab::Tracking::EventDefinition).to receive(:internal_event_exists?).and_return(true) allow(Gitlab::Tracking::EventDefinition).to receive(:find).and_return(event_definition) allow(event_definition).to receive(:additional_properties).and_return({ lang: { description: 'Language' } }) + allow(event_definition).to receive(:extra_trackers).and_return({}) end describe '#validate!' do @@ -115,6 +116,18 @@ RSpec.describe Gitlab::Tracking::EventValidator, feature_category: :service_ping expect { validate }.to raise_error(Gitlab::Tracking::EventValidator::InvalidPropertyError, 'Unknown additional property: custom_property for event_name: test_event') end + + context 'when defined in extra trackers' do + before do + allow(event_definition).to receive(:extra_trackers).and_return({ + 'Test::ExtraTracker' => { protected_properties: [:custom_property] } + }) + end + + it 'does not raise an error' do + expect { validate }.not_to raise_error + end + end end end end diff --git a/spec/lib/gitlab/usage/metrics/instrumentations/total_count_metric_spec.rb b/spec/lib/gitlab/usage/metrics/instrumentations/total_count_metric_spec.rb index 4ee572356b8..b95b064e522 100644 --- a/spec/lib/gitlab/usage/metrics/instrumentations/total_count_metric_spec.rb +++ b/spec/lib/gitlab/usage/metrics/instrumentations/total_count_metric_spec.rb @@ -28,9 +28,9 @@ RSpec.describe Gitlab::Usage::Metrics::Instrumentations::TotalCountMetric, :clea ) allow(Gitlab::Tracking::EventDefinition).to receive(:find).with('my_event2').and_return(event_definition2) - allow(event_definition).to receive(:extra_tracking_classes).and_return([]) - allow(event_definition1).to receive(:extra_tracking_classes).and_return([]) - allow(event_definition2).to receive(:extra_tracking_classes).and_return([]) + allow(event_definition).to receive(:extra_trackers).and_return({}) + allow(event_definition1).to receive(:extra_trackers).and_return({}) + allow(event_definition2).to receive(:extra_trackers).and_return({}) end context 'with multiple similar events' do diff --git a/spec/models/projects/deletion_schedule_spec.rb b/spec/models/projects/deletion_schedule_spec.rb deleted file mode 100644 index f5af6baafcd..00000000000 --- a/spec/models/projects/deletion_schedule_spec.rb +++ /dev/null @@ -1,20 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe Projects::DeletionSchedule, type: :model, feature_category: :groups_and_projects do - subject(:project_deletion_schedule) { build(:project_deletion_schedule) } - - describe 'validations' do - it { is_expected.to validate_presence_of(:marked_for_deletion_at) } - end - - describe 'associations' do - it { is_expected.to belong_to(:project) } - - specify do - expect(project_deletion_schedule).to belong_to(:deleting_user).class_name('User').with_foreign_key('user_id') - .inverse_of(:project_deletion_schedules) - end - end -end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index b267723423e..005642e93f6 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -236,7 +236,6 @@ RSpec.describe User, feature_category: :user_profile do it { is_expected.to have_many(:merge_request_assignment_events).class_name('ResourceEvents::MergeRequestAssignmentEvent') } it { is_expected.to have_many(:admin_abuse_report_assignees).class_name('Admin::AbuseReportAssignee') } it { is_expected.to have_many(:early_access_program_tracking_events).class_name('EarlyAccessProgram::TrackingEvent') } - it { is_expected.to have_many(:project_deletion_schedules).class_name('::Projects::DeletionSchedule').inverse_of(:deleting_user) } describe '#triggers' do let(:user) { create(:user) }