From 03ecc65c6f2944e351766f5ff553ddbb23a1c085 Mon Sep 17 00:00:00 2001 From: James Nutt Date: Tue, 16 Dec 2025 10:07:31 +0000 Subject: [PATCH] Add application setting to permit MinIO for offline transfers Introduces a new application setting `allow_minio_for_offline_transfer` to control whether MinIO can be used as an object storage location for offline transfers. This replaces the previous Rails.env.development? check with a proper configurable setting. Changes: - Add `allow_minio_for_offline_transfer` boolean to the `importers` jsonb column in ApplicationSetting model (defaults to false) - Add JSON schema validation for the new setting - Update Import::Offline::Configuration to use the new setting instead of Rails.env.development? - Update specs to use stub_application_setting --- app/models/application_setting.rb | 3 ++- app/models/import/offline/configuration.rb | 4 +--- .../json_schemas/application_setting_importers.json | 3 +++ spec/models/application_setting_spec.rb | 1 + spec/models/import/offline/configuration_spec.rb | 10 +++++----- 5 files changed, 12 insertions(+), 9 deletions(-) diff --git a/app/models/application_setting.rb b/app/models/application_setting.rb index 3861501479f2dd..5a25489e9e81b7 100644 --- a/app/models/application_setting.rb +++ b/app/models/application_setting.rb @@ -752,7 +752,8 @@ def self.ci_cd_settings_definition silent_admin_exports_enabled: [:boolean, { default: false }], allow_contribution_mapping_to_admins: [:boolean, { default: false }], allow_bypass_placeholder_confirmation: [:boolean, { default: false }], - relation_export_batch_size: [:integer, { default: 50 }] + relation_export_batch_size: [:integer, { default: 50 }], + allow_minio_for_offline_transfer: [:boolean, { default: false }] jsonb_accessor :sign_in_restrictions, disable_password_authentication_for_users_with_sso_identities: [:boolean, { default: false }], diff --git a/app/models/import/offline/configuration.rb b/app/models/import/offline/configuration.rb index 0bfd4c0441d178..85fb76ee42ddb8 100644 --- a/app/models/import/offline/configuration.rb +++ b/app/models/import/offline/configuration.rb @@ -43,10 +43,8 @@ def endpoint end def supported_providers - # MinIO will eventually be enabled by an application setting disabled by default: - # https://gitlab.com/gitlab-org/gitlab/-/issues/579705 providers = self.class.providers - providers = providers.except(:minio) unless Rails.env.development? + providers = providers.except(:minio) unless Gitlab::CurrentSettings.allow_minio_for_offline_transfer? providers.keys.map(&:to_s) end end diff --git a/app/validators/json_schemas/application_setting_importers.json b/app/validators/json_schemas/application_setting_importers.json index 0969f91e77a0f4..ffa8c709941be8 100644 --- a/app/validators/json_schemas/application_setting_importers.json +++ b/app/validators/json_schemas/application_setting_importers.json @@ -14,6 +14,9 @@ }, "relation_export_batch_size": { "type": "integer" + }, + "allow_minio_for_offline_transfer": { + "type": "boolean" } }, "additionalProperties": false diff --git a/spec/models/application_setting_spec.rb b/spec/models/application_setting_spec.rb index b56b5582a84e08..cefbe1b4ba4a5d 100644 --- a/spec/models/application_setting_spec.rb +++ b/spec/models/application_setting_spec.rb @@ -30,6 +30,7 @@ allow_contribution_mapping_to_admins: false, allow_local_requests_from_system_hooks: true, allow_local_requests_from_web_hooks_and_services: false, + allow_minio_for_offline_transfer: false, allow_possible_spam: false, allow_project_creation_for_guest_and_below: true, allow_runner_registration_token: true, diff --git a/spec/models/import/offline/configuration_spec.rb b/spec/models/import/offline/configuration_spec.rb index 900e3908a4a83e..28697ffa726ea6 100644 --- a/spec/models/import/offline/configuration_spec.rb +++ b/spec/models/import/offline/configuration_spec.rb @@ -31,17 +31,17 @@ it { is_expected.not_to allow_value('special.characters/\?<>@&=_ ').for(:bucket) } describe '#provider' do - context 'when in development environment' do + context 'when MinIO is allowed for offline transfer' do before do - allow(Rails.env).to receive(:development?).and_return(true) + stub_application_setting(allow_minio_for_offline_transfer: true) end it { is_expected.to allow_values('minio', 'aws').for(:provider) } end - context 'when not in development environment' do + context 'when MinIO is not allowed for offline transfer' do before do - allow(Rails.env).to receive(:development?).and_return(false) + stub_application_setting(allow_minio_for_offline_transfer: false) end it { is_expected.to allow_value('aws').for(:provider) } @@ -116,7 +116,7 @@ end before do - allow(Rails.env).to receive(:development?).and_return(true) + stub_application_setting(allow_minio_for_offline_transfer: true) end context 'with valid credentials' do -- GitLab