summaryrefslogtreecommitdiff
path: root/tooling/danger/datateam.rb
diff options
context:
space:
mode:
Diffstat (limited to 'tooling/danger/datateam.rb')
-rw-r--r--tooling/danger/datateam.rb58
1 files changed, 58 insertions, 0 deletions
diff --git a/tooling/danger/datateam.rb b/tooling/danger/datateam.rb
new file mode 100644
index 00000000000..b3779aa13bb
--- /dev/null
+++ b/tooling/danger/datateam.rb
@@ -0,0 +1,58 @@
+# frozen_string_literal: true
+
+module Tooling
+ module Danger
+ module Datateam
+ CHANGED_SCHEMA_MESSAGE = <<~MSG
+ Notification to the Data Team about changes to files with possible impact on Data Warehouse, add label `Data Warehouse::Impact Check`.
+
+ /label ~"Data Warehouse::Impact Check"
+
+ The following files require a review:
+
+ MSG
+
+ DATA_WAREHOUSE_SCOPE = 'Data Warehouse::'
+ FILE_PATH_REGEX = %r{((ee|jh)/)?config/metrics(/.+\.yml)}.freeze
+ PERFORMANCE_INDICATOR_REGEX = %r{gmau|smau|paid_gmau|umau}.freeze
+ DATABASE_REGEX = %r{\Adb/structure\.sql}.freeze
+ STRUCTURE_SQL_FILE = %w(db/structure.sql).freeze
+
+ def build_message
+ return unless impacted?
+
+ CHANGED_SCHEMA_MESSAGE + helper.markdown_list(data_warehouse_impact_files)
+ end
+
+ def impacted?
+ !labelled_as_datawarehouse? && data_warehouse_impact_files.any?
+ end
+
+ private
+
+ def data_warehouse_impact_files
+ @impacted_files ||= (performance_indicator_changed_files + database_changed_files)
+ end
+
+ def labelled_as_datawarehouse?
+ helper.mr_labels.any? { |label| label.start_with?(DATA_WAREHOUSE_SCOPE) }
+ end
+
+ def performance_indicator_changed_files
+ metrics_definitions_files = helper.modified_files.grep(FILE_PATH_REGEX)
+
+ metrics_definitions_files.select do |file|
+ helper.changed_lines(file).any? { |change| change =~ PERFORMANCE_INDICATOR_REGEX }
+ end.compact
+ end
+
+ def database_changes?
+ !helper.modified_files.grep(DATABASE_REGEX).empty?
+ end
+
+ def database_changed_files
+ helper.modified_files & STRUCTURE_SQL_FILE
+ end
+ end
+ end
+end