diff --git a/app/models/concerns/limitable.rb b/app/models/concerns/limitable.rb index 7ed7f65ca570f4687161c162feddf63e15a5e719..3de2cd7fbf0c43fd8658198ce697eb837aeb76de 100644 --- a/app/models/concerns/limitable.rb +++ b/app/models/concerns/limitable.rb @@ -40,8 +40,10 @@ def fetch_plan_limit_data def scoped_plan_limits scope_relation = self.public_send(limit_scope) # rubocop:disable GitlabSecurity/PublicSend return unless scope_relation - return if limit_feature_flag && ::Feature.disabled?(limit_feature_flag, scope_relation) - return if limit_feature_flag_for_override && ::Feature.enabled?(limit_feature_flag_for_override, scope_relation) + return if limit_feature_flag && ::Feature.disabled?(limit_feature_flag, scope_relation, type: :undefined) + + return if limit_feature_flag_for_override && + ::Feature.enabled?(limit_feature_flag_for_override, scope_relation, type: :undefined) relation = limit_relation ? self.public_send(limit_relation) : self.class.where(limit_scope => scope_relation) # rubocop:disable GitlabSecurity/PublicSend limits = scope_relation.actual_limits diff --git a/app/models/concerns/routable.rb b/app/models/concerns/routable.rb index 43874d0211c79ad5897a95d598dde12803ec948c..c78d0665b42c2a59f0a48427a2310999b1d5bce7 100644 --- a/app/models/concerns/routable.rb +++ b/app/models/concerns/routable.rb @@ -155,7 +155,7 @@ def full_attribute(attribute) route&.public_send(attribute) || send("build_full_#{attribute}") end - unless persisted? && Feature.enabled?(:cached_route_lookups, self, type: :ops) + unless persisted? && Feature.enabled?(:cached_route_lookups, self) return attribute_from_route_or_self.call(attribute) end diff --git a/app/workers/concerns/worker_attributes.rb b/app/workers/concerns/worker_attributes.rb index a1c5039dc22e8fae3362ba83ca1371b72ee1aa77..03f0c39d801d4cf2cfd44c53db1ae6e8841902d6 100644 --- a/app/workers/concerns/worker_attributes.rb +++ b/app/workers/concerns/worker_attributes.rb @@ -111,7 +111,7 @@ def get_data_consistency def get_data_consistency_feature_flag_enabled? return true unless get_class_attribute(:data_consistency_feature_flag) - Feature.enabled?(get_class_attribute(:data_consistency_feature_flag)) + Feature.enabled?(get_class_attribute(:data_consistency_feature_flag), type: :worker) end # Set this attribute on a job when it will call to services outside of the @@ -197,7 +197,7 @@ def get_deduplication_options def deduplication_enabled? return true unless get_deduplication_options[:feature_flag] - Feature.enabled?(get_deduplication_options[:feature_flag]) + Feature.enabled?(get_deduplication_options[:feature_flag], type: :worker) end def big_payload! diff --git a/config/feature_flags/development/deduplicate_process_commit_worker.yml b/config/feature_flags/worker/deduplicate_process_commit_worker.yml similarity index 93% rename from config/feature_flags/development/deduplicate_process_commit_worker.yml rename to config/feature_flags/worker/deduplicate_process_commit_worker.yml index 6c70b53c25c50c4c73019f72699c31cf7f78a3b9..e92086557a575b55adfca3dd06830d444309d7ef 100644 --- a/config/feature_flags/development/deduplicate_process_commit_worker.yml +++ b/config/feature_flags/worker/deduplicate_process_commit_worker.yml @@ -3,6 +3,6 @@ name: deduplicate_process_commit_worker introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/128233 rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/420750 milestone: '16.3' -type: development +type: worker group: group::source code default_enabled: false diff --git a/ee/spec/lib/ee/feature_spec.rb b/ee/spec/lib/ee/feature_spec.rb index 8f164a820da183ebd0890bd04cc130049d08c006..82049c0812dd3e4b02de889e502d7e099d6b5a7a 100644 --- a/ee/spec/lib/ee/feature_spec.rb +++ b/ee/spec/lib/ee/feature_spec.rb @@ -19,7 +19,6 @@ describe '.enabled?' do before do described_class.reset - skip_feature_flags_yaml_validation allow(described_class).to receive(:log_feature_flag_states?).and_return(false) stub_feature_flag_definition(:disabled_feature_flag) diff --git a/ee/spec/requests/api/features_spec.rb b/ee/spec/requests/api/features_spec.rb index f3dfe624f70ec452849052ad6df5c1a6f5ca7582..e45379821fe910672ef0d8859cb9831b0e3f84dc 100644 --- a/ee/spec/requests/api/features_spec.rb +++ b/ee/spec/requests/api/features_spec.rb @@ -15,8 +15,6 @@ Flipper.register(:perf_team) do |actor| actor.respond_to?(:admin) && actor.admin? end - - skip_feature_flags_yaml_validation end describe 'POST /feature' do diff --git a/lib/feature.rb b/lib/feature.rb index 4b3ebab6dce3dafed9d475a5828d8f79f2cac1fa..528d70355b23c2ea10825c60338b67f261fe2ed0 100644 --- a/lib/feature.rb +++ b/lib/feature.rb @@ -121,7 +121,7 @@ def persisted_name?(feature_name) # in production environment, but raise exception in development or tests. # 2. The `default_enabled_if_undefined:` is tech debt related to Gitaly flags # and should not be used outside of Gitaly's `lib/feature/gitaly.rb` - def enabled?(key, thing = nil, type: :development, default_enabled_if_undefined: nil) + def enabled?(key, thing = nil, type: nil, default_enabled_if_undefined: nil) thing = sanitized_thing(thing) check_feature_flags_definition!(key, thing, type) @@ -138,7 +138,7 @@ def enabled?(key, thing = nil, type: :development, default_enabled_if_undefined: feature_value end - def disabled?(key, thing = nil, type: :development, default_enabled_if_undefined: nil) + def disabled?(key, thing = nil, type: nil, default_enabled_if_undefined: nil) thing = sanitized_thing(thing) # we need to make different method calls to make it easy to mock / define expectations in test mode diff --git a/lib/feature/definition.rb b/lib/feature/definition.rb index 14848f22f833749b5f0ceee148939eb94ca7fd61..d48d4f45ebb6774458df8c6ef5258066585e9541 100644 --- a/lib/feature/definition.rb +++ b/lib/feature/definition.rb @@ -74,10 +74,13 @@ def validate_default_enabled! end def valid_usage!(type_in_code:) - unless Array(type).include?(type_in_code.to_s) + return if type_in_code.nil? + + if type != type_in_code.to_s # Raise exception in test and dev - raise Feature::InvalidFeatureFlagError, "The `type:` of `#{key}` is not equal to config: " \ - "#{type_in_code} vs #{type}. Ensure to use valid type in #{path} or ensure that you use " \ + raise Feature::InvalidFeatureFlagError, + "The given `type: :#{type_in_code}` for `#{key}` is not equal to the " \ + ":#{type} set in its definition file. Ensure to use a valid type in #{path} or ensure that you use " \ "a valid syntax: #{TYPES.dig(type, :example)}" end end @@ -122,7 +125,7 @@ def has_definition?(key) def log_states?(key) return false if key == :feature_flag_state_logs - return false if Feature.disabled?(:feature_flag_state_logs, type: :ops) + return false if Feature.disabled?(:feature_flag_state_logs) return false unless (feature = get(key)) feature.force_log_state_changes? || feature.for_upcoming_milestone? @@ -131,6 +134,8 @@ def log_states?(key) def valid_usage!(key, type:) if definition = get(key) definition.valid_usage!(type_in_code: type) + elsif type.nil? + raise InvalidFeatureFlagError, "Missing type for undefined feature `#{key}`" elsif type_definition = self::TYPES[type] raise InvalidFeatureFlagError, "Missing feature definition for `#{key}`" unless type_definition[:optional] else diff --git a/lib/gitlab/lograge/custom_options.rb b/lib/gitlab/lograge/custom_options.rb index 6f180f89db046ad7d9bd0c1177753b480e109ff0..c52228c9455ac31fff44fe5f6456391b35c210fb 100644 --- a/lib/gitlab/lograge/custom_options.rb +++ b/lib/gitlab/lograge/custom_options.rb @@ -32,7 +32,7 @@ def self.call(event) ::Gitlab::ExceptionLogFormatter.format!(exception, payload) - if Feature.enabled?(:feature_flag_state_logs, type: :ops) + if Feature.enabled?(:feature_flag_state_logs) payload[:feature_flag_states] = Feature.logged_states.map { |key, state| "#{key}:#{state ? 1 : 0}" } end diff --git a/lib/gitlab/redis/multi_store.rb b/lib/gitlab/redis/multi_store.rb index 6d8ccf718b4e767098d3c6c9826aed846567d5b6..e6262f7f61b516ec17e3f25316d47c8d6d97d42b 100644 --- a/lib/gitlab/redis/multi_store.rb +++ b/lib/gitlab/redis/multi_store.rb @@ -252,17 +252,28 @@ def to_s end def use_primary_and_secondary_stores? + feature_flag = "use_primary_and_secondary_stores_for_#{instance_name.underscore}" + feature_table_exists? && - Feature.enabled?("use_primary_and_secondary_stores_for_#{instance_name.underscore}") && # rubocop:disable Cop/FeatureFlagUsage + Feature.enabled?(feature_flag, type: feature_flag_type(feature_flag)) && # rubocop:disable Cop/FeatureFlagUsage -- The flags are dynamic !same_redis_store? end def use_primary_store_as_default? + feature_flag = "use_primary_store_as_default_for_#{instance_name.underscore}" + feature_table_exists? && - Feature.enabled?("use_primary_store_as_default_for_#{instance_name.underscore}") && # rubocop:disable Cop/FeatureFlagUsage + Feature.enabled?(feature_flag, type: feature_flag_type(feature_flag)) && # rubocop:disable Cop/FeatureFlagUsage -- The flags are dynamic !same_redis_store? end + def feature_flag_type(feature_flag) + feature_definition = Feature::Definition.get(feature_flag) + return if feature_definition + + :undefined + end + def increment_pipelined_command_error_count(command_name) @pipelined_command_error ||= Gitlab::Metrics.counter(:gitlab_redis_multi_store_pipelined_diff_error_total, 'Redis MultiStore pipelined command diff between stores') diff --git a/spec/lib/feature/definition_spec.rb b/spec/lib/feature/definition_spec.rb index b75c780a33e2d07c23daf24f4f5ce346434dd84b..c68b37ce4f3aa81e2960a57e92363a382fafacd0 100644 --- a/spec/lib/feature/definition_spec.rb +++ b/spec/lib/feature/definition_spec.rb @@ -55,11 +55,11 @@ end describe '#valid_usage!' do - context 'validates type' do - it 'raises exception for invalid type' do - expect { definition.valid_usage!(type_in_code: :invalid) } - .to raise_error(/The `type:` of `feature_flag` is not equal to config/) - end + it 'raises exception for invalid type' do + expect { definition.valid_usage!(type_in_code: :invalid) } + .to raise_error( + /The given `type: :invalid` for `feature_flag` is not equal to the :development set in its definition file./ + ) end end diff --git a/spec/lib/feature/gitaly_spec.rb b/spec/lib/feature/gitaly_spec.rb index 336962904832d5117f756a3ca9e95bb1b64480c1..dacd1fcb212b1f2be8128e07e053d1a57e1cbc21 100644 --- a/spec/lib/feature/gitaly_spec.rb +++ b/spec/lib/feature/gitaly_spec.rb @@ -10,9 +10,9 @@ let_it_be(:repository_2) { project_2.repository.raw } before do - skip_feature_flags_yaml_validation - allow(Feature::Definition).to receive(:get).with(any_args).and_return( - Feature::Definition.new('flag.yml', name: :flag, type: :development) + allow(Feature::Definition).to receive(:get).and_call_original + allow(Feature::Definition).to receive(:get).with(:flag).and_return( + Feature::Definition.new('flag.yml', name: :flag, type: :undefined) ) end diff --git a/spec/lib/feature_spec.rb b/spec/lib/feature_spec.rb index 64c249770b7a168abffaf1e672269d3df452142c..36856403d5dd9d92397dfdb3f6fe1ee86194b9c0 100644 --- a/spec/lib/feature_spec.rb +++ b/spec/lib/feature_spec.rb @@ -27,7 +27,6 @@ def wrap_all_methods_with_flag_check(lb, flag) # reset Flipper AR-engine Feature.reset - skip_feature_flags_yaml_validation end describe '.current_request' do @@ -253,15 +252,15 @@ def wrap_all_methods_with_flag_check(lb, flag) it 'returns false (and tracks / raises exception for dev) for undefined feature' do expect(Gitlab::ErrorTracking).to receive(:track_and_raise_for_dev_exception) - expect(described_class.enabled?(:some_random_feature_flag)).to be_falsey + expect(described_class.enabled?(:some_random_feature_fla, type: :undefined)).to be_falsey end it 'returns false for undefined feature with default_enabled_if_undefined: false' do - expect(described_class.enabled?(:some_random_feature_flag, default_enabled_if_undefined: false)).to be_falsey + expect(described_class.enabled?(:some_random_feature_flag, type: :undefined, default_enabled_if_undefined: false)).to be_falsey end it 'returns true for undefined feature with default_enabled_if_undefined: true' do - expect(described_class.enabled?(:some_random_feature_flag, default_enabled_if_undefined: true)).to be_truthy + expect(described_class.enabled?(:some_random_feature_flag, type: :undefined, default_enabled_if_undefined: true)).to be_truthy end it 'returns false for existing disabled feature in the database' do @@ -307,7 +306,7 @@ def wrap_all_methods_with_flag_check(lb, flag) base_class = Feature::BypassLoadBalancer.enabled? ? Feature::BypassLoadBalancer::FlipperRecord : ActiveRecord::Base expect(base_class).to receive(:connection) { raise ActiveRecord::NoDatabaseError, "No database" } - expect(described_class.enabled?(:a_feature, default_enabled_if_undefined: fake_default)).to eq(fake_default) + expect(described_class.enabled?(:a_feature, type: :undefined, default_enabled_if_undefined: fake_default)).to eq(fake_default) end context 'logging is enabled', :request_store do @@ -497,7 +496,7 @@ def wrap_all_methods_with_flag_check(lb, flag) it 'when invalid type is used' do expect { described_class.enabled?(:my_feature_flag, type: :ops) } - .to raise_error(/The `type:` of/) + .to raise_error(/The given `type: :ops`/) end context 'when default_enabled: is false in the YAML definition' do @@ -581,19 +580,19 @@ def wrap_all_methods_with_flag_check(lb, flag) end end - describe '.disable?' do + describe '.disabled?' do it 'returns true (and tracks / raises exception for dev) for undefined feature' do expect(Gitlab::ErrorTracking).to receive(:track_and_raise_for_dev_exception) - expect(described_class.disabled?(:some_random_feature_flag)).to be_truthy + expect(described_class.disabled?(:some_random_feature_flag, type: :undefined)).to be_truthy end it 'returns true for undefined feature with default_enabled_if_undefined: false' do - expect(described_class.disabled?(:some_random_feature_flag, default_enabled_if_undefined: false)).to be_truthy + expect(described_class.disabled?(:some_random_feature_flag, type: :undefined, default_enabled_if_undefined: false)).to be_truthy end it 'returns false for undefined feature with default_enabled_if_undefined: true' do - expect(described_class.disabled?(:some_random_feature_flag, default_enabled_if_undefined: true)).to be_falsey + expect(described_class.disabled?(:some_random_feature_flag, type: :undefined, default_enabled_if_undefined: true)).to be_falsey end it 'returns true for existing disabled feature in the database' do diff --git a/spec/lib/gitlab/database/load_balancing/sidekiq_client_middleware_spec.rb b/spec/lib/gitlab/database/load_balancing/sidekiq_client_middleware_spec.rb index 5a52394742f430383a7e78555650b9825b818ffe..397db793d9ca4f6f86ccf49ce4ca1fbd9548d4f7 100644 --- a/spec/lib/gitlab/database/load_balancing/sidekiq_client_middleware_spec.rb +++ b/spec/lib/gitlab/database/load_balancing/sidekiq_client_middleware_spec.rb @@ -9,7 +9,6 @@ let(:job) { { "job_id" => "a180b47c-3fd6-41b8-81e9-34da61c3400e" } } before do - skip_feature_flags_yaml_validation skip_default_enabled_yaml_check end diff --git a/spec/lib/gitlab/database/load_balancing/sidekiq_server_middleware_spec.rb b/spec/lib/gitlab/database/load_balancing/sidekiq_server_middleware_spec.rb index aaca544ef8051389a346df897770a7a452d5e4fd..e25149217d6ea94f4a6af84c9946dc0dd847fbd6 100644 --- a/spec/lib/gitlab/database/load_balancing/sidekiq_server_middleware_spec.rb +++ b/spec/lib/gitlab/database/load_balancing/sidekiq_server_middleware_spec.rb @@ -13,7 +13,6 @@ let(:none_caught_up) { Gitlab::Database::LoadBalancing::LoadBalancer::NONE_CAUGHT_UP } before do - skip_feature_flags_yaml_validation skip_default_enabled_yaml_check replication_lag!(false) diff --git a/spec/lib/gitlab/gon_helper_spec.rb b/spec/lib/gitlab/gon_helper_spec.rb index e167699e1d0861142e48dec53525652697d918ae..ba250c499a31ccd5b0dac59f38f6c04c4622e869 100644 --- a/spec/lib/gitlab/gon_helper_spec.rb +++ b/spec/lib/gitlab/gon_helper_spec.rb @@ -125,7 +125,6 @@ describe '#push_frontend_feature_flag' do before do - skip_feature_flags_yaml_validation skip_default_enabled_yaml_check end @@ -152,8 +151,6 @@ let(:gon) { class_double('Gon') } before do - skip_feature_flags_yaml_validation - allow(helper) .to receive(:gon) .and_return(gon) diff --git a/spec/lib/gitlab/redis/cluster_util_spec.rb b/spec/lib/gitlab/redis/cluster_util_spec.rb index f167065fd3f74b4f6a628e3b550701a6d00596e4..a517545014508012798a37abb3df9013367ff9ad 100644 --- a/spec/lib/gitlab/redis/cluster_util_spec.rb +++ b/spec/lib/gitlab/redis/cluster_util_spec.rb @@ -23,7 +23,6 @@ allow(redis_cluster).to receive(:id).and_return(1) allow(Gitlab::Redis::MultiStore).to receive(:same_redis_store?).and_return(false) - skip_feature_flags_yaml_validation skip_default_enabled_yaml_check end diff --git a/spec/lib/gitlab/redis/cross_slot_spec.rb b/spec/lib/gitlab/redis/cross_slot_spec.rb index ccf2de1f28f5f2652273049eaaa8fa127f60ccc6..4e9830f4110a2bcc6bfb9e2dd8e314725c7071c3 100644 --- a/spec/lib/gitlab/redis/cross_slot_spec.rb +++ b/spec/lib/gitlab/redis/cross_slot_spec.rb @@ -45,7 +45,6 @@ before do primary_store.set('a', 1) secondary_store.set('a', 1) - skip_feature_flags_yaml_validation skip_default_enabled_yaml_check end diff --git a/spec/lib/gitlab/redis/multi_store_spec.rb b/spec/lib/gitlab/redis/multi_store_spec.rb index c3705f6bb54d3745eeea19e9c7d22648591f1fdd..348215d553c03e1b141c75396e0026fc1131fb64 100644 --- a/spec/lib/gitlab/redis/multi_store_spec.rb +++ b/spec/lib/gitlab/redis/multi_store_spec.rb @@ -22,7 +22,6 @@ end before do - skip_feature_flags_yaml_validation skip_default_enabled_yaml_check end diff --git a/spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/duplicate_job_spec.rb b/spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/duplicate_job_spec.rb index 5724c58f1a4cb00a20e8ad4455cdcef747ceafb5..a1421a46490315c3c1cf091d184dc0711b56ae25 100644 --- a/spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/duplicate_job_spec.rb +++ b/spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/duplicate_job_spec.rb @@ -42,7 +42,6 @@ context 'when the deduplication depends on a FF' do before do - skip_feature_flags_yaml_validation skip_default_enabled_yaml_check allow(AuthorizedProjectsWorker).to receive(:get_deduplication_options).and_return(feature_flag: :my_feature_flag) diff --git a/spec/lib/gitlab/usage_data_counters/hll_redis_counter_spec.rb b/spec/lib/gitlab/usage_data_counters/hll_redis_counter_spec.rb index 74b6a4e9c88c8fc9af49efbaf15ad8ee92beaf80..9b039ef1c344018f24c3fdb7d3a44d2e71e80971 100644 --- a/spec/lib/gitlab/usage_data_counters/hll_redis_counter_spec.rb +++ b/spec/lib/gitlab/usage_data_counters/hll_redis_counter_spec.rb @@ -90,7 +90,6 @@ end before do - skip_feature_flags_yaml_validation skip_default_enabled_yaml_check allow(described_class).to receive(:known_events).and_return(known_events) end diff --git a/spec/models/concerns/limitable_spec.rb b/spec/models/concerns/limitable_spec.rb index c0a6aea2075c931c0e27f0f102351c11e4bb160d..1a28c23158080c627f88301c5bba7ba129956128 100644 --- a/spec/models/concerns/limitable_spec.rb +++ b/spec/models/concerns/limitable_spec.rb @@ -59,7 +59,6 @@ def instance.project stub_feature_flags("#{limit_feature_flag}": limit_feature_flag_value ? [instance.project] : false) if limit_feature_flag stub_feature_flags("#{limit_feature_flag_for_override}": limit_feature_flag_override_value ? [instance.project] : false) if limit_feature_flag_for_override - skip_feature_flags_yaml_validation skip_default_enabled_yaml_check MinimalTestClass.limit_relation = :custom_relation diff --git a/spec/requests/api/features_spec.rb b/spec/requests/api/features_spec.rb index d922947f3e949def6cb253e38f1f61073c4a2ec1..3fb05aed6ccaac4cc1ecbacedc84f4a463ac2719 100644 --- a/spec/requests/api/features_spec.rb +++ b/spec/requests/api/features_spec.rb @@ -26,7 +26,6 @@ actor.respond_to?(:admin) && actor.admin? end - skip_feature_flags_yaml_validation skip_default_enabled_yaml_check end @@ -748,7 +747,7 @@ delete api("/features/#{feature_name}", admin, admin_mode: true) Feature.reset end.to change { Feature.persisted_name?(feature_name) } - .and change { Feature.enabled?(feature_name) } + .and change { Feature.enabled?(feature_name, type: :undefined) } expect(response).to have_gitlab_http_status(:no_content) end diff --git a/spec/requests/api/usage_data_spec.rb b/spec/requests/api/usage_data_spec.rb index a2b2b0c6f4a2213629e98a307c934b3ac7cfc612..ecade80c2fa218e478a4d82fb98935b9ad64804e 100644 --- a/spec/requests/api/usage_data_spec.rb +++ b/spec/requests/api/usage_data_spec.rb @@ -137,7 +137,6 @@ context 'with unknown event' do before do - skip_feature_flags_yaml_validation skip_default_enabled_yaml_check end @@ -214,10 +213,6 @@ end context 'with unknown event' do - before do - skip_feature_flags_yaml_validation - end - it 'returns status ok' do expect(Gitlab::Redis::HLL).not_to receive(:add) diff --git a/spec/support/helpers/stub_feature_flags.rb b/spec/support/helpers/stub_feature_flags.rb index 76fc8ebf84dd1570cf146813f426fbdce0c18580..ded475daabd916d0a5d31836a88da07e97a30609 100644 --- a/spec/support/helpers/stub_feature_flags.rb +++ b/spec/support/helpers/stub_feature_flags.rb @@ -77,10 +77,6 @@ def stub_feature_flag_gate(object) StubFeatureGate.new(object) end - def skip_feature_flags_yaml_validation - allow(Feature::Definition).to receive(:valid_usage!) - end - def skip_default_enabled_yaml_check allow(Feature::Definition).to receive(:default_enabled?).and_return(false) end diff --git a/spec/workers/concerns/worker_attributes_spec.rb b/spec/workers/concerns/worker_attributes_spec.rb index 1c9d9a5a1ad4fe903dc99e2dcd84d336cf62d055..33ff724d3f6494d295851f001e88cf63ace239fe 100644 --- a/spec/workers/concerns/worker_attributes_spec.rb +++ b/spec/workers/concerns/worker_attributes_spec.rb @@ -84,7 +84,6 @@ def self.name context 'when feature_flag is provided' do before do stub_feature_flags(test_feature_flag: false) - skip_feature_flags_yaml_validation skip_default_enabled_yaml_check end @@ -113,7 +112,6 @@ def self.name context 'when feature flag is set' do before do - skip_feature_flags_yaml_validation skip_default_enabled_yaml_check worker.deduplicate(:until_executing, feature_flag: :my_feature_flag)