Welcome to mirror list, hosted at ThFree Co, Russian Federation.

Dangerfile « product_intelligence « danger - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: d2bed7629ff2f6619f249ea570ce68548cfe2262 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# frozen_string_literal: true
# rubocop:disable Style/SignalException

CHANGED_FILES_MESSAGE = <<~MSG
For the following files, a review from the [Data team and Product Intelligence team](https://gitlab.com/groups/gitlab-org/growth/product-intelligence/engineers/-/group_members?with_inherited_permissions=exclude) is recommended
Please check the ~"product intelligence" [guide](https://docs.gitlab.com/ee/development/usage_ping.html).


%<changed_files>s

MSG

UPDATE_DICTIONARY_MESSAGE = <<~MSG
  When adding, changing, or updating metrics, please update the [Metrics Dictionary](https://docs.gitlab.com/ee/development/usage_ping/dictionary.html)

  ```shell
  bundle exec rake gitlab:usage_data:generate_metrics_dictionary
  ```
MSG

all_changed_files = helper.all_changed_files

tracking_files = [
  'lib/gitlab/tracking.rb',
  'spec/lib/gitlab/tracking_spec.rb',
  'app/helpers/tracking_helper.rb',
  'spec/helpers/tracking_helper_spec.rb',
  'app/assets/javascripts/tracking.js',
  'spec/frontend/tracking_spec.js',
  'generator_templates/usage_metric_definition/metric_definition.yml',
  'lib/generators/gitlab/usage_metric_definition_generator.rb',
  'lib/generators/gitlab/usage_metric_definition/redis_hll_generator.rb',
  'spec/lib/generators/gitlab/usage_metric_definition_generator_spec.rb',
  'spec/lib/generators/gitlab/usage_metric_definition/redis_hll_generator_spec.rb',
  'config/metrics/schema.json'
]

tracking_changed_files   = all_changed_files & tracking_files
usage_data_changed_files = all_changed_files.grep(%r{(usage_data)})
dictionary_changed_file  = all_changed_files.grep(%r{(doc/development/usage_ping/dictionary.md)})
metrics_changed_files    = all_changed_files.grep(%r{((ee/)?config/metrics/.*\.yml)})

def matching_files?(file, extension:, pattern:)
  return unless file.end_with?(extension)

  helper.changed_lines(file).grep(pattern).any?
end

js_patterns = Regexp.union(
  'Tracking.event',
  /\btrack\(/,
  'data-track-event',
  'data-track-action'
)

dictionary_pattern = Regexp.union(
  'key_path:',
  'description:',
  'product_section:',
  'product_stage:',
  'product_group:',
  'status:',
  'tier:'
)

snowplow_changed_files = all_changed_files.select do |file|
  matching_files?(file, extension: '.rb', pattern: %r{Gitlab::Tracking\.event}) ||
    matching_files?(file, extension: '.js', pattern: js_patterns) ||
    matching_files?(file, extension: '.vue', pattern: js_patterns) ||
    matching_files?(file, extension: '.haml', pattern: %r{data: \{ track})
end

required_dictionary_update_changed_files = metrics_changed_files.select do |file|
  matching_files?(file, extension: '.yml', pattern: dictionary_pattern)
end

matching_changed_files = usage_data_changed_files +
                         tracking_changed_files +
                         metrics_changed_files +
                         dictionary_changed_file +
                         snowplow_changed_files

if matching_changed_files.any?

  warn format(CHANGED_FILES_MESSAGE, changed_files: helper.markdown_list(matching_changed_files))

  fail format(UPDATE_DICTIONARY_MESSAGE) if required_dictionary_update_changed_files.any? && dictionary_changed_file.empty?

  labels = ['product intelligence']
  labels << 'product intelligence::review pending' unless helper.mr_has_labels?('product intelligence::approved')

  markdown(helper.prepare_labels_for_mr(labels))
end