Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
f50b767a
Commit
f50b767a
authored
May 13, 2021
by
Luis Mejia
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Work in progress for product_intelligence pluging
parent
64d32586
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
117 additions
and
76 deletions
+117
-76
danger/plugins/product_intelligence.rb
danger/plugins/product_intelligence.rb
+10
-0
danger/product_intelligence/Dangerfile
danger/product_intelligence/Dangerfile
+6
-76
tooling/danger/product_intelligence.rb
tooling/danger/product_intelligence.rb
+101
-0
No files found.
danger/plugins/product_intelligence.rb
0 → 100644
View file @
f50b767a
# frozen_string_literal: true
require_relative
'../../tooling/danger/product_intelligence'
module
Danger
class
ProductIntelligence
<
::
Danger
::
Plugin
# Put the helper code somewhere it can be tested
include
Tooling
::
Danger
::
ProductIntelligence
end
end
danger/product_intelligence/Dangerfile
View file @
f50b767a
...
...
@@ -19,81 +19,11 @@ UPDATE_DICTIONARY_MESSAGE = <<~MSG
MSG
all_changed_files
=
helper
.
all_changed_files
# exit if not matching files
matching_changed_files
=
product_intelligence
.
matching_changed_files
return
unless
matching_changed_files
.
any?
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'
]
warn
format
(
CHANGED_FILES_MESSAGE
,
changed_files:
helper
.
markdown_list
(
matching_changed_files
))
fail
format
(
UPDATE_DICTIONARY_MESSAGE
)
if
product_intelligence
.
dictionary_changes_empty?
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?
return
unless
helper
.
ci?
labels
=
[]
labels
<<
'product intelligence'
unless
helper
.
mr_has_labels?
(
'product intelligence'
)
labels
<<
'product intelligence::review pending'
unless
helper
.
mr_has_labels?
([
'product intelligence::approved'
,
'product intelligence::review pending'
])
if
labels
.
any?
gitlab
.
api
.
update_merge_request
(
gitlab
.
mr_json
[
'project_id'
],
gitlab
.
mr_json
[
'iid'
],
add_labels:
labels
)
end
end
product_intelligence
.
add_missing_labels
tooling/danger/product_intelligence.rb
0 → 100644
View file @
f50b767a
# frozen_string_literal: true
# rubocop:disable Style/SignalException
module
Tooling
module
Danger
module
ProductIntelligence
WORKFLOW_LABELS
=
[
'product intelligence::approved'
,
'product intelligence::review pending'
].
freeze
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'
].
freeze
def
add_missing_labels
return
unless
helper
.
ci?
labels
=
[]
labels
<<
'product intelligence'
unless
helper
.
mr_has_labels?
(
'product intelligence'
)
labels
<<
'product intelligence::review pending'
unless
helper
.
mr_has_labels?
(
WORKFLOW_LABELS
)
return
unless
labels
.
any?
gitlab
.
api
.
update_merge_request
(
gitlab
.
mr_json
[
'project_id'
],
gitlab
.
mr_json
[
'iid'
],
add_labels:
labels
)
end
def
matching_changed_files
(
all_changed_files
)
tracking_changed_files
=
all_changed_files
&
TRACKING_FILES
usage_data_changed_files
=
all_changed_files
.
grep
(
%r{(usage_data)}
)
usage_data_changed_files
+
tracking_changed_files
+
metrics_changed_files
+
dictionary_changed_file
+
snowplow_changed_files
end
def
dictionary_changes_empty?
required_dictionary_update_changed_files
.
any?
&&
dictionary_changed_file
.
empty?
end
private
def
dictionary_changed_file
all_changed_files
.
grep
(
%r{(doc/development/usage_ping/dictionary.md)}
)
end
def
metrics_changed_files
all_changed_files
.
grep
(
%r{((ee/)?config/metrics/.*
\.
yml)}
)
end
def
matching_files?
(
file
,
extension
:,
pattern
:)
return
unless
file
.
end_with?
(
extension
)
helper
.
changed_lines
(
file
).
grep
(
pattern
).
any?
end
def
snowplow_changed_files
js_patterns
=
Regexp
.
union
(
'Tracking.event'
,
/\btrack\(/
,
'data-track-event'
,
'data-track-action'
)
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
end
def
required_dictionary_update_changed_files
dictionary_pattern
=
Regexp
.
union
(
'key_path:'
,
'description:'
,
'product_section:'
,
'product_stage:'
,
'product_group:'
,
'status:'
,
'tier:'
)
metrics_changed_files
.
select
do
|
file
|
matching_files?
(
file
,
extension:
'.yml'
,
pattern:
dictionary_pattern
)
end
end
end
end
end
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment