diff --git a/spec/tooling/danger/datateam_spec.rb b/spec/tooling/danger/datateam_spec.rb index 9d8aaf0852071971a62fdb56901b0eee949cbe99..30b029ec6af6086d430adb80d8a09d8925cdf315 100644 --- a/spec/tooling/danger/datateam_spec.rb +++ b/spec/tooling/danger/datateam_spec.rb @@ -106,13 +106,28 @@ mr_labels: ['type::maintenance'], impacted: false, impacted_files: %w[config/metrics/20210216182127_user_secret_detection_jobs.yml] + }, + 'with database metric files added' => { + added_files: %w[config/metrics/20210216182127_users_all.yml], + changed_lines: ['+data_source: database'], + mr_labels: ['type::maintenance'], + impacted: true, + impacted_files: %w[config/metrics/20210216182127_users_all.yml] + }, + 'with non-database metric files added' => { + added_files: %w[config/metrics/20210216182127_users_all.yml], + changed_lines: ['+data_source: internal_events'], + mr_labels: ['type::maintenance'], + impacted: false, + impacted_files: %w[config/metrics/20210216182127_users_all.yml] } } end with_them do before do - allow(fake_helper).to receive(:modified_files).and_return(modified_files) + allow(fake_helper).to receive(:modified_files).and_return(modified_files || []) + allow(fake_helper).to receive(:added_files).and_return(added_files || []) allow(fake_helper).to receive(:changed_lines).and_return(changed_lines) allow(fake_helper).to receive(:mr_labels).and_return(mr_labels) allow(fake_helper).to receive(:markdown_list).with(impacted_files).and_return(impacted_files.map { |item| "* `#{item}`" }.join("\n")) diff --git a/tooling/danger/datateam.rb b/tooling/danger/datateam.rb index 7100ac16f690ff01d32fc7028098dc980b94dbed..13aac22aa11f1516731b88172c7fae2c9f2397dd 100644 --- a/tooling/danger/datateam.rb +++ b/tooling/danger/datateam.rb @@ -17,6 +17,7 @@ module Datateam PERFORMANCE_INDICATOR_REGEX = %r{gmau|smau|paid_gmau|umau} METRIC_REMOVED = %r{\+status: removed} DATABASE_REGEX = %r{\Adb/structure\.sql} + DATABASE_METRIC_ADDED = %r{\+data_source: database} DATABASE_LINE_REMOVAL_REGEX = %r{\A-} def build_message @@ -32,13 +33,21 @@ def impacted? private def data_warehouse_impact_files - @impacted_files ||= (metrics_changed_files + database_changed_files) + @impacted_files ||= (metrics_added_files + metrics_changed_files + database_changed_files) end def labelled_as_datawarehouse? helper.mr_labels.any? { |label| label.start_with?(DATA_WAREHOUSE_SCOPE) } end + def metrics_added_files + metrics_definitions_files = helper.added_files.grep(FILE_PATH_REGEX) + + metrics_definitions_files.select do |file| + helper.changed_lines(file).any? { |change| database_metric_added?(change) } + end.compact + end + def metrics_changed_files metrics_definitions_files = helper.modified_files.grep(FILE_PATH_REGEX) @@ -65,6 +74,10 @@ def performance_indicator_changed?(change) def status_removed?(change) change =~ METRIC_REMOVED end + + def database_metric_added?(change) + change =~ DATABASE_METRIC_ADDED + end end end end