gitlab-triage 1.27.0 → 1.28.0
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/.gitlab/CODEOWNERS +1 -1
- data/README.md +41 -5
- data/lib/gitlab/triage/api_query_builders/date_query_param_builder.rb +2 -1
- data/lib/gitlab/triage/engine.rb +13 -2
- data/lib/gitlab/triage/filters/branch_date_filter.rb +8 -2
- data/lib/gitlab/triage/filters/issue_date_conditions_filter.rb +78 -0
- data/lib/gitlab/triage/filters/merge_request_date_conditions_filter.rb +3 -59
- data/lib/gitlab/triage/param_builders/date_param_builder.rb +8 -2
- data/lib/gitlab/triage/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f6db21779b13563c1dd43ffbe571507967c53dc22f4a75b61d84f2c2e5181a06
|
4
|
+
data.tar.gz: 07141e346ff6ab3eca520ed37648b5431dd4ba54307d40358331323cc46b4ddc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2acf8bcde530de9eb4365393431266f1acd824cdf48b95b8a557744503ed1af1b0a968256f8756ef337cbd7ad4b54aa330efbac2fa0632fadf628616adf3abdc
|
7
|
+
data.tar.gz: 386c9a45639c9e8603409d573e6b16e42c3cbc8d281e7af5c5faac1fac882be40c38679d9c35dccf424bb5edd284e614287426ba8e0ac1344e6b42009458fd7a
|
data/.gitlab/CODEOWNERS
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
# The official maintainers
|
2
|
-
* @
|
2
|
+
* @gitlab-org/quality/engineering-productivity
|
data/README.md
CHANGED
@@ -178,6 +178,7 @@ Available condition types:
|
|
178
178
|
- [`draft` condition](#draft-condition)
|
179
179
|
- [`source_branch` condition](#source-branch-condition)
|
180
180
|
- [`target_branch` condition](#target-branch-condition)
|
181
|
+
- [`health_status` condition](#health-status-condition)
|
181
182
|
- [`weight` condition](#weight-condition)
|
182
183
|
- [`discussions` condition](#discussions-condition)
|
183
184
|
- [`protected` condition](#protected-condition)
|
@@ -188,12 +189,12 @@ Available condition types:
|
|
188
189
|
|
189
190
|
Accepts a hash of fields.
|
190
191
|
|
191
|
-
| Field | Type | Values
|
192
|
-
| --------- | ----
|
192
|
+
| Field | Type | Values | Required |
|
193
|
+
| --------- | ---- |----------------------------------------------------------------------------| -------- |
|
193
194
|
| `attribute` | string | `created_at`, `updated_at`, `merged_at`, `authored_date`, `committed_date` | yes |
|
194
|
-
| `condition` | string | `older_than`, `newer_than`
|
195
|
-
| `interval_type` | string | `days`, `weeks`, `months`, `years`
|
196
|
-
| `interval` | integer | integer
|
195
|
+
| `condition` | string | `older_than`, `newer_than` | yes |
|
196
|
+
| `interval_type` | string | `minutes`, `hours`, `days`, `weeks`, `months`, `years` | yes |
|
197
|
+
| `interval` | integer | integer | yes |
|
197
198
|
> **Note:**
|
198
199
|
> - `merged_at` only works on merge requests.
|
199
200
|
> - `closed_at` is not supported in the GitLab API, but can be used in a [`ruby` condition](#ruby-condition).
|
@@ -210,6 +211,21 @@ conditions:
|
|
210
211
|
interval: 12
|
211
212
|
```
|
212
213
|
|
214
|
+
> **Note:** If the GitLab server is giving 500 error with this option, it
|
215
|
+
> can mean that it's taking too much time to query this, and it's timing out.
|
216
|
+
> A workaround for this is that we can filter in Ruby. If you need this
|
217
|
+
> workaround, specify this with `filter_in_ruby: true`
|
218
|
+
>
|
219
|
+
> ```yaml
|
220
|
+
> conditions:
|
221
|
+
> date:
|
222
|
+
> attribute: updated_at
|
223
|
+
> condition: older_than
|
224
|
+
> interval_type: months
|
225
|
+
> interval: 12
|
226
|
+
> filter_in_ruby: true
|
227
|
+
> ```
|
228
|
+
|
213
229
|
##### Milestone condition
|
214
230
|
|
215
231
|
Accepts the name of a milestone to filter upon. Also accepts the following timebox values:
|
@@ -553,6 +569,26 @@ conditions:
|
|
553
569
|
target_branch: 'master'
|
554
570
|
```
|
555
571
|
|
572
|
+
##### Health Status condition
|
573
|
+
|
574
|
+
**This condition is only applicable for issues.**
|
575
|
+
|
576
|
+
Accepts a string per the [API documentation](https://docs.gitlab.com/ee/api/issues.html#list-issues).
|
577
|
+
|
578
|
+
| State | Type | Value |
|
579
|
+
| --------- | ---- | ------ |
|
580
|
+
| Any health status | string | `Any` |
|
581
|
+
| No health status | string | `None` |
|
582
|
+
| Specific health status | string | One of `on_track`, `needs_attention` or `at_risk` |
|
583
|
+
|
584
|
+
Example:
|
585
|
+
|
586
|
+
```yml
|
587
|
+
conditions:
|
588
|
+
health_status: Any
|
589
|
+
|
590
|
+
> **Note:** This query is not supported using GraphQL yet.
|
591
|
+
|
556
592
|
##### Weight condition
|
557
593
|
|
558
594
|
**This condition is only applicable for issues.**
|
@@ -8,7 +8,8 @@ module Gitlab
|
|
8
8
|
ATTRIBUTES = %w[updated_at created_at].freeze
|
9
9
|
|
10
10
|
def self.applicable?(condition)
|
11
|
-
ATTRIBUTES.include?(condition[:attribute].to_s)
|
11
|
+
ATTRIBUTES.include?(condition[:attribute].to_s) &&
|
12
|
+
condition[:filter_in_ruby] != true
|
12
13
|
end
|
13
14
|
|
14
15
|
def initialize(condition_hash)
|
data/lib/gitlab/triage/engine.rb
CHANGED
@@ -2,6 +2,7 @@ require 'active_support/all'
|
|
2
2
|
require 'active_support/inflector'
|
3
3
|
|
4
4
|
require_relative 'expand_condition'
|
5
|
+
require_relative 'filters/issue_date_conditions_filter'
|
5
6
|
require_relative 'filters/merge_request_date_conditions_filter'
|
6
7
|
require_relative 'filters/branch_date_filter'
|
7
8
|
require_relative 'filters/branch_protected_filter'
|
@@ -328,7 +329,7 @@ module Gitlab
|
|
328
329
|
puts
|
329
330
|
end
|
330
331
|
|
331
|
-
def filter_resources(resources, conditions) # rubocop:disable Metrics/CyclomaticComplexity
|
332
|
+
def filter_resources(resources, conditions) # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/AbcSize
|
332
333
|
resources.select do |resource|
|
333
334
|
results = []
|
334
335
|
|
@@ -337,8 +338,17 @@ module Gitlab
|
|
337
338
|
case resource[:type]
|
338
339
|
when 'branches'
|
339
340
|
results << Filters::BranchDateFilter.new(resource, conditions[:date]).calculate
|
341
|
+
when 'issues'
|
342
|
+
if conditions.dig(:date, :filter_in_ruby)
|
343
|
+
results << Filters::IssueDateConditionsFilter.new(resource, conditions[:date]).calculate
|
344
|
+
end
|
340
345
|
when 'merge_requests'
|
341
|
-
|
346
|
+
if conditions.dig(:date, :filter_in_ruby) ||
|
347
|
+
# REST API does not support filtering with merged_at,
|
348
|
+
# so we have to filter it in Ruby
|
349
|
+
conditions.dig(:date, :attribute) == 'merged_at'
|
350
|
+
results << Filters::MergeRequestDateConditionsFilter.new(resource, conditions[:date]).calculate
|
351
|
+
end
|
342
352
|
end
|
343
353
|
end
|
344
354
|
|
@@ -464,6 +474,7 @@ module Gitlab
|
|
464
474
|
[].tap do |condition_builders|
|
465
475
|
condition_builders << APIQueryBuilders::SingleQueryParamBuilder.new('weight', conditions[:weight]) if conditions[:weight]
|
466
476
|
condition_builders << iteration_condition_builder(conditions[:iteration]) if conditions[:iteration]
|
477
|
+
condition_builders << APIQueryBuilders::SingleQueryParamBuilder.new('health_status', conditions[:health_status]) if conditions[:health_status]
|
467
478
|
end
|
468
479
|
end
|
469
480
|
|
@@ -6,7 +6,9 @@ module Gitlab
|
|
6
6
|
class BranchDateFilter < BaseConditionsFilter
|
7
7
|
ATTRIBUTES = %w[committed_date authored_date].freeze
|
8
8
|
CONDITIONS = %w[older_than newer_than].freeze
|
9
|
-
|
9
|
+
TIME_BASED_INTERVALS = %w[minutes hours].freeze
|
10
|
+
DATE_BASED_INTERVALS = %w[days weeks months years].freeze
|
11
|
+
INTERVAL_TYPES = TIME_BASED_INTERVALS + DATE_BASED_INTERVALS
|
10
12
|
|
11
13
|
def self.allowed_attributes
|
12
14
|
self::ATTRIBUTES
|
@@ -48,7 +50,11 @@ module Gitlab
|
|
48
50
|
end
|
49
51
|
|
50
52
|
def condition_value
|
51
|
-
|
53
|
+
if TIME_BASED_INTERVALS.include?(@interval_type.to_s)
|
54
|
+
@interval.public_send(@interval_type).ago.to_datetime # rubocop:disable GitlabSecurity/PublicSend
|
55
|
+
else
|
56
|
+
@interval.public_send(@interval_type).ago.to_date # rubocop:disable GitlabSecurity/PublicSend
|
57
|
+
end
|
52
58
|
end
|
53
59
|
|
54
60
|
def calculate
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require_relative 'base_conditions_filter'
|
2
|
+
|
3
|
+
module Gitlab
|
4
|
+
module Triage
|
5
|
+
module Filters
|
6
|
+
class IssueDateConditionsFilter < BaseConditionsFilter
|
7
|
+
CONDITIONS = %w[older_than newer_than].freeze
|
8
|
+
TIME_BASED_INTERVALS = %w[minutes hours].freeze
|
9
|
+
DATE_BASED_INTERVALS = %w[days weeks months years].freeze
|
10
|
+
INTERVAL_TYPES = TIME_BASED_INTERVALS + DATE_BASED_INTERVALS
|
11
|
+
|
12
|
+
def self.generate_allowed_attributes
|
13
|
+
%w[updated_at created_at]
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.allowed_attributes
|
17
|
+
@allowed_attributes ||= generate_allowed_attributes.freeze
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.filter_parameters
|
21
|
+
[
|
22
|
+
{
|
23
|
+
name: :attribute,
|
24
|
+
type: String,
|
25
|
+
values: allowed_attributes
|
26
|
+
},
|
27
|
+
{
|
28
|
+
name: :condition,
|
29
|
+
type: String,
|
30
|
+
values: CONDITIONS
|
31
|
+
},
|
32
|
+
{
|
33
|
+
name: :interval_type,
|
34
|
+
type: String,
|
35
|
+
values: INTERVAL_TYPES
|
36
|
+
},
|
37
|
+
{
|
38
|
+
name: :interval,
|
39
|
+
type: Numeric
|
40
|
+
}
|
41
|
+
]
|
42
|
+
end
|
43
|
+
|
44
|
+
def initialize_variables(condition)
|
45
|
+
@attribute = condition[:attribute].to_sym
|
46
|
+
@condition = condition[:condition].to_sym
|
47
|
+
@interval_type = condition[:interval_type].to_sym
|
48
|
+
@interval = condition[:interval]
|
49
|
+
end
|
50
|
+
|
51
|
+
# Guard against merge requests with no merged_at values
|
52
|
+
def resource_value
|
53
|
+
@resource[@attribute]&.to_date
|
54
|
+
end
|
55
|
+
|
56
|
+
def condition_value
|
57
|
+
if TIME_BASED_INTERVALS.include?(@interval_type.to_s)
|
58
|
+
@interval.public_send(@interval_type).ago.to_datetime # rubocop:disable GitlabSecurity/PublicSend
|
59
|
+
else
|
60
|
+
@interval.public_send(@interval_type).ago.to_date # rubocop:disable GitlabSecurity/PublicSend
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
# Guard against merge requests with no merged_at values
|
65
|
+
def calculate
|
66
|
+
return false unless resource_value
|
67
|
+
|
68
|
+
case @condition
|
69
|
+
when :older_than
|
70
|
+
resource_value < condition_value
|
71
|
+
when :newer_than
|
72
|
+
resource_value > condition_value
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -3,65 +3,9 @@ require_relative 'base_conditions_filter'
|
|
3
3
|
module Gitlab
|
4
4
|
module Triage
|
5
5
|
module Filters
|
6
|
-
class MergeRequestDateConditionsFilter <
|
7
|
-
|
8
|
-
|
9
|
-
INTERVAL_TYPES = %w[days weeks months years].freeze
|
10
|
-
|
11
|
-
def self.allowed_attributes
|
12
|
-
self::ATTRIBUTES
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.filter_parameters
|
16
|
-
[
|
17
|
-
{
|
18
|
-
name: :attribute,
|
19
|
-
type: String,
|
20
|
-
values: allowed_attributes
|
21
|
-
},
|
22
|
-
{
|
23
|
-
name: :condition,
|
24
|
-
type: String,
|
25
|
-
values: CONDITIONS
|
26
|
-
},
|
27
|
-
{
|
28
|
-
name: :interval_type,
|
29
|
-
type: String,
|
30
|
-
values: INTERVAL_TYPES
|
31
|
-
},
|
32
|
-
{
|
33
|
-
name: :interval,
|
34
|
-
type: Numeric
|
35
|
-
}
|
36
|
-
]
|
37
|
-
end
|
38
|
-
|
39
|
-
def initialize_variables(condition)
|
40
|
-
@attribute = condition[:attribute].to_sym
|
41
|
-
@condition = condition[:condition].to_sym
|
42
|
-
@interval_type = condition[:interval_type].to_sym
|
43
|
-
@interval = condition[:interval]
|
44
|
-
end
|
45
|
-
|
46
|
-
# Guard against merge requests with no merged_at values
|
47
|
-
def resource_value
|
48
|
-
@resource[@attribute]&.to_date
|
49
|
-
end
|
50
|
-
|
51
|
-
def condition_value
|
52
|
-
@interval.public_send(@interval_type).ago.to_date # rubocop:disable GitlabSecurity/PublicSend
|
53
|
-
end
|
54
|
-
|
55
|
-
# Guard against merge requests with no merged_at values
|
56
|
-
def calculate
|
57
|
-
return false unless resource_value
|
58
|
-
|
59
|
-
case @condition
|
60
|
-
when :older_than
|
61
|
-
resource_value < condition_value
|
62
|
-
when :newer_than
|
63
|
-
resource_value > condition_value
|
64
|
-
end
|
6
|
+
class MergeRequestDateConditionsFilter < IssueDateConditionsFilter
|
7
|
+
def self.generate_allowed_attributes
|
8
|
+
super << 'merged_at'
|
65
9
|
end
|
66
10
|
end
|
67
11
|
end
|
@@ -5,7 +5,9 @@ module Gitlab
|
|
5
5
|
module ParamBuilders
|
6
6
|
class DateParamBuilder
|
7
7
|
CONDITIONS = %w[older_than newer_than].freeze
|
8
|
-
|
8
|
+
TIME_BASED_INTERVALS = %w[minutes hours].freeze
|
9
|
+
DATE_BASED_INTERVALS = %w[days weeks months years].freeze
|
10
|
+
INTERVAL_TYPES = TIME_BASED_INTERVALS + DATE_BASED_INTERVALS
|
9
11
|
|
10
12
|
def initialize(allowed_attributes, condition_hash)
|
11
13
|
@allowed_attributes = allowed_attributes
|
@@ -18,7 +20,11 @@ module Gitlab
|
|
18
20
|
end
|
19
21
|
|
20
22
|
def param_content
|
21
|
-
|
23
|
+
if TIME_BASED_INTERVALS.include?(interval_type)
|
24
|
+
interval.public_send(interval_type).ago.to_datetime # rubocop:disable GitlabSecurity/PublicSend
|
25
|
+
else
|
26
|
+
interval.public_send(interval_type).ago.to_date # rubocop:disable GitlabSecurity/PublicSend
|
27
|
+
end
|
22
28
|
end
|
23
29
|
|
24
30
|
private
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gitlab-triage
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.28.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GitLab
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-12-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -201,6 +201,7 @@ files:
|
|
201
201
|
- lib/gitlab/triage/filters/branch_date_filter.rb
|
202
202
|
- lib/gitlab/triage/filters/branch_protected_filter.rb
|
203
203
|
- lib/gitlab/triage/filters/discussions_conditions_filter.rb
|
204
|
+
- lib/gitlab/triage/filters/issue_date_conditions_filter.rb
|
204
205
|
- lib/gitlab/triage/filters/member_conditions_filter.rb
|
205
206
|
- lib/gitlab/triage/filters/merge_request_date_conditions_filter.rb
|
206
207
|
- lib/gitlab/triage/filters/name_conditions_filter.rb
|