confiner 0.1.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/confiner/cli.rb +3 -2
- data/lib/confiner/logger.rb +13 -4
- data/lib/confiner/plugin.rb +6 -1
- data/lib/confiner/plugins/debug.rb +14 -0
- data/lib/confiner/plugins/gitlab.rb +9 -5
- data/lib/confiner/version.rb +5 -0
- data/lib/confiner.rb +1 -1
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2aec5b597e2386e03ac5df865c2a0adc622a13ec580047e9a320a5ddf80d486b
|
4
|
+
data.tar.gz: 41d27a7ae0f3e5fb86a8d19d00593a043bd08eefb9d9304d531f4ab46e81c726
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a265ca1e725d8075bdd17dfb67ffb2e74fccc171581255b71789f6491e9da2cdb7ee0737073d7dbe3cf02dc9e0cbc85ae9f05538e7021ef5d8eb2ffef53e4961
|
7
|
+
data.tar.gz: 35ba5a29c7bed14503fb81db7d791b392167630fe7f8780eb8e93277e0a4dde156d8d358abc68dfe2910eb7ee12fb4338f91d7b627ea5c86f639a2d98c56131d
|
data/lib/confiner/cli.rb
CHANGED
@@ -17,7 +17,7 @@ module Confiner
|
|
17
17
|
@rules = []
|
18
18
|
|
19
19
|
# default logging to standard out
|
20
|
-
Logger.log_to $stdout
|
20
|
+
Logger.log_to = $stdout
|
21
21
|
|
22
22
|
if options.include?('--')
|
23
23
|
@plugin_options = options[options.index('--')..]
|
@@ -65,7 +65,7 @@ module Confiner
|
|
65
65
|
end
|
66
66
|
|
67
67
|
opts.on('-o OUTPUT', '--output-to OUTPUT', 'File to output the log to') do |output_to|
|
68
|
-
log_to
|
68
|
+
Logger.log_to = output_to
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
@@ -110,6 +110,7 @@ module Confiner
|
|
110
110
|
def process_rule(rule)
|
111
111
|
log :rule, rule.keys.map { |k| "\t#{k}=#{rule[k]}" }.join(',')
|
112
112
|
|
113
|
+
rule['plugin']['args'] ||= {}
|
113
114
|
rule['plugin']['args'].transform_keys!(&:to_sym) # 2.5 compatability
|
114
115
|
|
115
116
|
plugin = Plugins.const_get(translate_plugin_name(rule['plugin']['name'])).new(**rule['plugin']['args'])
|
data/lib/confiner/logger.rb
CHANGED
@@ -4,17 +4,26 @@ module Confiner
|
|
4
4
|
module Logger
|
5
5
|
# Log something with a specific level
|
6
6
|
def log(level, message, indentation = 1)
|
7
|
+
color = "\e[0;35m" # default purple
|
8
|
+
color = "\e[0;33m" if %i[warn warning].include?(level) # yellow
|
9
|
+
color = "\e[0;31m" if %i[err error fatal].include?(level) # red
|
10
|
+
|
7
11
|
raise ArgumentError, 'Level must be less than 12 characters' if level.size > 12
|
8
12
|
|
9
|
-
output = "(#{Time.now.strftime('%F %H:%M:%S')})\t
|
13
|
+
output = "(#{Time.now.strftime('%F %H:%M:%S')})\t#{color}#{level.to_s.upcase}#{' ' * (12 - level.size)}\e[m#{"\t" * indentation}#{message}"
|
10
14
|
|
11
|
-
Logger.log_to(File.open(Logger.log_to.strip, 'a+t')) if Logger.log_to.is_a?(String)
|
12
15
|
Logger.log_to.puts(output)
|
13
16
|
end
|
14
17
|
|
15
18
|
# Where to output the log
|
16
|
-
def self.log_to
|
17
|
-
@out_file
|
19
|
+
def self.log_to
|
20
|
+
@out_file
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.log_to=(file)
|
24
|
+
file = File.open(file.strip, 'a+t') if file.is_a?(String)
|
25
|
+
|
26
|
+
@out_file = file
|
18
27
|
end
|
19
28
|
|
20
29
|
def run(action)
|
data/lib/confiner/plugin.rb
CHANGED
@@ -21,8 +21,11 @@ module Confiner
|
|
21
21
|
arg.each do |a, default_value|
|
22
22
|
attr_writer a
|
23
23
|
|
24
|
+
default = default_value
|
25
|
+
default = ENV[default_value[1..]] if default_value[0] == '$'
|
26
|
+
|
24
27
|
define_method(a) do
|
25
|
-
instance_variable_get("@#{a}") || instance_variable_set("@#{a}",
|
28
|
+
instance_variable_get("@#{a}") || instance_variable_set("@#{a}", default)
|
26
29
|
end
|
27
30
|
end
|
28
31
|
else
|
@@ -34,6 +37,8 @@ module Confiner
|
|
34
37
|
|
35
38
|
def initialize(**args)
|
36
39
|
args.each do |k, v|
|
40
|
+
v = ENV[v[1..]] if v[0] == '$' # get environment variable
|
41
|
+
|
37
42
|
self.public_send(:"#{k}=", v)
|
38
43
|
end
|
39
44
|
end
|
@@ -12,6 +12,20 @@ module Confiner
|
|
12
12
|
def action2
|
13
13
|
log :debug, arg2
|
14
14
|
end
|
15
|
+
|
16
|
+
def warn
|
17
|
+
log :warn, 'Warn'
|
18
|
+
log :warning, 'Warning'
|
19
|
+
end
|
20
|
+
|
21
|
+
def fatal
|
22
|
+
log :fatal, 'Fatal'
|
23
|
+
end
|
24
|
+
|
25
|
+
def error
|
26
|
+
log :err, 'Err'
|
27
|
+
log :error, 'Error'
|
28
|
+
end
|
15
29
|
end
|
16
30
|
end
|
17
31
|
end
|
@@ -14,7 +14,7 @@ module Confiner
|
|
14
14
|
:threshold => 3, # the failure / pass threshold
|
15
15
|
:endpoint => 'https://gitlab.com/api/v4', # the GitLab API Endpoint (e.g. https://gitlab.com/api/v4)
|
16
16
|
:pwd => '.', # the path of the working directory for the examples
|
17
|
-
:ref => '
|
17
|
+
:ref => 'main' # the default Git ref used when updating
|
18
18
|
|
19
19
|
MERGE_REQUEST_TITLE = '[QUARANTINE] %s'
|
20
20
|
QUARANTINE_METADATA = %(, quarantine: { issue: '%s', type: :investigating })
|
@@ -24,6 +24,8 @@ module Confiner
|
|
24
24
|
|
25
25
|
ENV['GITLAB_API_HTTPARTY_OPTIONS'] = ENV.fetch('GITLAB_API_HTTPARTY_OPTIONS') { "{read_timeout: #{timeout}}" }
|
26
26
|
|
27
|
+
raise ArgumentError, 'Missing private_token' if private_token.nil?
|
28
|
+
|
27
29
|
@gitlab_client = ::Gitlab.client(private_token: private_token, endpoint: endpoint)
|
28
30
|
end
|
29
31
|
|
@@ -184,7 +186,7 @@ module Confiner
|
|
184
186
|
# @param [Gitlab::ObjectifiedHash] failure_issue the existing failure issue
|
185
187
|
# @return [Gitlab::ObjectifiedHash] the new branch
|
186
188
|
def create_branch(failure_issue, example)
|
187
|
-
branch = @gitlab_client.create_branch(target_project, "#{failure_issue['iid']}-quarantine-#{example.name.
|
189
|
+
branch = @gitlab_client.create_branch(target_project, "#{failure_issue['iid']}-quarantine-#{example.name.gsub(/\W/, '-')}", ref)
|
188
190
|
|
189
191
|
log :branch, "Created branch #{branch['name']} (#{branch['web_url']})", 4
|
190
192
|
|
@@ -228,13 +230,15 @@ module Confiner
|
|
228
230
|
end
|
229
231
|
end
|
230
232
|
|
233
|
+
meets_or_exceeds_threshold = occurrences.size > threshold ? 'exceeds' : 'meets'
|
234
|
+
|
231
235
|
description = <<~MARKDOWN
|
232
236
|
## What does this MR do?
|
233
237
|
|
234
|
-
Quarantines the test `#{example.name}` (
|
238
|
+
Quarantines the test `#{example.name}` (https://gitlab.com/#{target_project}/-/blob/#{ref}/#{example.file}#L#{changed_line_number})
|
235
239
|
|
236
|
-
This test has been found by [Confiner](https://gitlab.com/gitlab-org/quality/confiner) to have
|
237
|
-
|
240
|
+
This test has been found by [Confiner](https://gitlab.com/gitlab-org/quality/confiner) to have failed
|
241
|
+
#{occurrences.size} times, which #{meets_or_exceeds_threshold} the threshold of #{threshold} times.
|
238
242
|
|
239
243
|
#{markdown_occurrences.join("\n")}
|
240
244
|
|
data/lib/confiner.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: confiner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GitLab Quality
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-03-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 3.10.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec-parameterized
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.5.1
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.5.1
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: zeitwerk
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -68,6 +82,7 @@ files:
|
|
68
82
|
- lib/confiner/plugin.rb
|
69
83
|
- lib/confiner/plugins/debug.rb
|
70
84
|
- lib/confiner/plugins/gitlab.rb
|
85
|
+
- lib/confiner/version.rb
|
71
86
|
homepage: https://gitlab.com/gitlab-org/quality/confiner
|
72
87
|
licenses:
|
73
88
|
- MIT
|