gitlab-triage 1.7.1 → 1.11.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/.gitignore +0 -1
- data/.gitlab-ci.yml +57 -41
- data/.gitlab/merge_request_templates/Release.md +35 -0
- data/.rubocop.yml +3 -0
- data/Gemfile +1 -1
- data/Guardfile +1 -1
- data/README.md +105 -8
- data/gitlab-triage.gemspec +1 -1
- data/lib/gitlab/triage/action/comment.rb +16 -3
- data/lib/gitlab/triage/api_query_builders/date_query_param_builder.rb +78 -0
- data/lib/gitlab/triage/command_builders/base_command_builder.rb +7 -3
- data/lib/gitlab/triage/command_builders/label_command_builder.rb +17 -0
- data/lib/gitlab/triage/command_builders/move_command_builder.rb +19 -0
- data/lib/gitlab/triage/command_builders/text_content_builder.rb +18 -6
- data/lib/gitlab/triage/engine.rb +42 -17
- data/lib/gitlab/triage/errors.rb +1 -1
- data/lib/gitlab/triage/filters/merge_request_date_conditions_filter.rb +51 -5
- data/lib/gitlab/triage/option_parser.rb +10 -0
- data/lib/gitlab/triage/options.rb +2 -0
- data/lib/gitlab/triage/policies/rule_policy.rb +1 -1
- data/lib/gitlab/triage/policies/summary_policy.rb +1 -1
- data/lib/gitlab/triage/policies_resources/rule_resources.rb +5 -6
- data/lib/gitlab/triage/policies_resources/summary_resources.rb +5 -6
- data/lib/gitlab/triage/resource/base.rb +10 -1
- data/lib/gitlab/triage/resource/label.rb +15 -0
- data/lib/gitlab/triage/resource/merge_request.rb +9 -0
- data/lib/gitlab/triage/url_builders/url_builder.rb +10 -9
- data/lib/gitlab/triage/validators/limiter_validator.rb +3 -1
- data/lib/gitlab/triage/validators/params_validator.rb +5 -3
- data/lib/gitlab/triage/version.rb +3 -1
- data/support/.gitlab-ci.example.yml +2 -2
- data/support/.triage-policies.example.yml +2 -2
- metadata +6 -5
- data/lib/gitlab/triage/filters/forbidden_labels_conditions_filter.rb +0 -32
- data/lib/gitlab/triage/filters/issuable_date_conditions_filter.rb +0 -65
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e02cd169e252e4656441f6e9268314c2b968935957dbcb906ae3048ee7045da4
|
4
|
+
data.tar.gz: 3b58c8b37e3f82878272641ad848239c74623499f0e309ba0ac9aaaf6803cf0f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 181a6a5055a61b5d8c78f36d047dfef269a92a7d0173598a490e5420ab04fb267c9c42be2ae9bef31a815eb7730a15b921dde2b1834e49dcc20d0969d4986f54
|
7
|
+
data.tar.gz: 621d6e208ad9dcdd034931ca0656778e5247c6aa3f3e6fa8edf53ed401795452f0d136eec259df8a377e36589de866fc7ee949a792cd1fa5b2c07257cab577ee
|
data/.gitignore
CHANGED
data/.gitlab-ci.yml
CHANGED
@@ -1,49 +1,68 @@
|
|
1
|
-
image: ruby:2.6
|
2
|
-
|
3
1
|
stages:
|
4
2
|
- prepare
|
5
3
|
- test
|
6
4
|
- triage
|
5
|
+
- deploy
|
7
6
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
7
|
+
default:
|
8
|
+
image: ruby:2.7
|
9
|
+
tags:
|
10
|
+
- gitlab-org
|
11
|
+
cache:
|
12
|
+
key:
|
13
|
+
files:
|
14
|
+
- Gemfile
|
15
|
+
- gitlab-triage.gemspec
|
16
|
+
paths:
|
17
|
+
- vendor/ruby
|
18
|
+
- Gemfile.lock
|
19
|
+
policy: pull
|
16
20
|
before_script:
|
21
|
+
- ruby --version
|
17
22
|
- gem install bundler --no-document --version 2.0.2
|
18
|
-
- bundle
|
23
|
+
- bundle --version
|
24
|
+
- bundle install --jobs $(nproc) --path=vendor --retry 3 --quiet
|
25
|
+
- bundle check
|
26
|
+
|
27
|
+
workflow:
|
28
|
+
rules:
|
29
|
+
# For merge requests, create a pipeline.
|
30
|
+
- if: '$CI_MERGE_REQUEST_IID'
|
31
|
+
# For `master` branch, create a pipeline (this includes on schedules, pushes, merges, etc.).
|
32
|
+
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
|
33
|
+
# For tags, create a pipeline.
|
34
|
+
- if: '$CI_COMMIT_TAG'
|
35
|
+
|
36
|
+
.use-docker-in-docker:
|
37
|
+
image: docker:${DOCKER_VERSION}
|
38
|
+
services:
|
39
|
+
- docker:${DOCKER_VERSION}-dind
|
40
|
+
variables:
|
41
|
+
DOCKER_VERSION: "19.03.0"
|
42
|
+
DOCKER_DRIVER: overlay2
|
43
|
+
DOCKER_HOST: tcp://docker:2375
|
44
|
+
DOCKER_TLS_CERTDIR: ""
|
45
|
+
tags:
|
46
|
+
# See https://gitlab.com/gitlab-com/www-gitlab-com/-/issues/7019 for tag descriptions
|
47
|
+
- gitlab-org-docker
|
19
48
|
|
20
49
|
###################
|
21
50
|
## Prepare stage ##
|
22
51
|
###################
|
23
52
|
setup-test-env:
|
24
|
-
extends: .default-only
|
25
53
|
stage: prepare
|
26
54
|
script:
|
27
|
-
-
|
28
|
-
- gem install bundler --no-document
|
29
|
-
- bundle --version
|
30
|
-
- bundle install --clean --jobs $(nproc) --path=vendor --retry=3 --quiet
|
31
|
-
- bundle check
|
55
|
+
- echo "Setup done!"
|
32
56
|
cache:
|
33
|
-
|
34
|
-
paths:
|
35
|
-
- vendor/ruby
|
36
|
-
- Gemfile.lock
|
57
|
+
policy: pull-push
|
37
58
|
artifacts:
|
38
59
|
paths:
|
39
|
-
- vendor/ruby
|
40
60
|
- Gemfile.lock
|
41
61
|
|
42
62
|
################
|
43
63
|
## Test stage ##
|
44
64
|
################
|
45
65
|
rubocop:
|
46
|
-
extends: [".default-only", ".default-before_script"]
|
47
66
|
stage: test
|
48
67
|
needs: ["setup-test-env"]
|
49
68
|
dependencies: ["setup-test-env"]
|
@@ -55,20 +74,15 @@ rubocop:
|
|
55
74
|
- .cache/rubocop_cache/
|
56
75
|
|
57
76
|
# We need to copy this job's definition from the Code-Quality.gitlab-ci.yml
|
58
|
-
# template because `only` is set without `refs`, so it takes precedence over
|
77
|
+
# template because `only` is set without `refs`, so it takes precedence over default workflow rules.
|
59
78
|
# See https://gitlab.com/gitlab-org/gitlab-ce/issues/66767.
|
60
79
|
code_quality:
|
61
|
-
extends: .
|
62
|
-
needs: ["setup-test-env"]
|
63
|
-
dependencies: ["setup-test-env"]
|
80
|
+
extends: .use-docker-in-docker
|
64
81
|
stage: test
|
65
|
-
image: docker:stable
|
66
82
|
allow_failure: true
|
67
|
-
services:
|
68
|
-
- docker:stable-dind
|
69
83
|
variables:
|
70
|
-
DOCKER_DRIVER: overlay2
|
71
84
|
DOCKER_TLS_CERTDIR: ""
|
85
|
+
before_script: []
|
72
86
|
script:
|
73
87
|
- |
|
74
88
|
if ! docker info &>/dev/null; then
|
@@ -85,14 +99,9 @@ code_quality:
|
|
85
99
|
reports:
|
86
100
|
codequality: gl-code-quality-report.json
|
87
101
|
expire_in: 1 week
|
88
|
-
except:
|
89
|
-
variables:
|
90
|
-
- $CODE_QUALITY_DISABLED
|
91
102
|
|
92
103
|
specs:
|
93
|
-
extends: [".default-only", ".default-before_script"]
|
94
104
|
needs: ["setup-test-env"]
|
95
|
-
dependencies: ["setup-test-env"]
|
96
105
|
stage: test
|
97
106
|
script:
|
98
107
|
- bundle exec rake spec
|
@@ -101,17 +110,24 @@ specs:
|
|
101
110
|
## Triage stage ##
|
102
111
|
##################
|
103
112
|
dry-run:gitlab-triage:
|
104
|
-
extends: [".default-only", ".default-before_script"]
|
105
113
|
needs: ["setup-test-env"]
|
106
|
-
dependencies: ["setup-test-env"]
|
107
114
|
stage: triage
|
108
115
|
script:
|
109
|
-
- bundle exec rake
|
116
|
+
- bundle exec rake build
|
117
|
+
- gem install pkg/*.gem
|
118
|
+
- which gitlab-triage
|
119
|
+
- gitlab-triage --version
|
110
120
|
- gitlab-triage --help
|
111
121
|
- gitlab-triage --init
|
112
|
-
- gitlab-triage --dry-run --debug --token $
|
122
|
+
- gitlab-triage --dry-run --debug --token $GITLAB_API_TOKEN --source-id $CI_PROJECT_PATH
|
113
123
|
|
114
124
|
# This job requires allows to override the `CI_PROJECT_PATH` variable when triggered.
|
115
125
|
dry-run:custom:
|
116
126
|
extends: dry-run:gitlab-triage
|
117
|
-
|
127
|
+
rules:
|
128
|
+
- when: manual
|
129
|
+
allow_failure: true
|
130
|
+
|
131
|
+
include:
|
132
|
+
- project: 'gitlab-org/quality/pipeline-common'
|
133
|
+
file: '/ci/gem-release.yml'
|
@@ -0,0 +1,35 @@
|
|
1
|
+
<!-- Replace `v4.5.0` with the previous release here, and `e18d76b309e42888759c1effe96767f13e34ae55`
|
2
|
+
with the latest commit from https://gitlab.com/gitlab-org/gitlab-triage/commits/master that will be included in the release. -->
|
3
|
+
- Diff: https://gitlab.com/gitlab-org/gitlab-triage/compare/v4.5.0...e18d76b309e42888759c1effe96767f13e34ae55
|
4
|
+
|
5
|
+
- Release notes:
|
6
|
+
|
7
|
+
<!-- Keep the sections order but remove the empty sections -->
|
8
|
+
|
9
|
+
```markdown
|
10
|
+
### New features and features updates
|
11
|
+
|
12
|
+
- !aaa <Title of the aaa MR>.
|
13
|
+
|
14
|
+
### Fixes
|
15
|
+
|
16
|
+
- !bbb <Title of the bbb MR>.
|
17
|
+
|
18
|
+
### Doc changes
|
19
|
+
|
20
|
+
- !ccc <Title of the ccc MR>.
|
21
|
+
|
22
|
+
### Other changes (tooling, technical debt)
|
23
|
+
|
24
|
+
- !ddd <Title of the ddd MR>.
|
25
|
+
```
|
26
|
+
|
27
|
+
- Checklist before merging:
|
28
|
+
- [ ] Diff link is up-to-date.
|
29
|
+
- [ ] Based on the diff, `lib/gitlab/triage/version.rb` is updated, according to [SemVer](https://semver.org).
|
30
|
+
- [ ] Release notes are accurate.
|
31
|
+
|
32
|
+
- Checklist after merging:
|
33
|
+
- [ ] [Update the release notes for the newly created tag](docs/release_process.md#how-to).
|
34
|
+
|
35
|
+
/label ~"Engineering Productivity" ~"ep::triage" ~"tooling::workflow"
|
data/.rubocop.yml
CHANGED
data/Gemfile
CHANGED
data/Guardfile
CHANGED
@@ -24,7 +24,7 @@
|
|
24
24
|
# * zeus: 'zeus rspec' (requires the server to be started separately)
|
25
25
|
# * 'just' rspec: 'rspec'
|
26
26
|
|
27
|
-
guard :rspec, cmd: "bundle exec rspec" do
|
27
|
+
guard :rspec, cmd: "bundle exec rspec -f doc" do
|
28
28
|
require "guard/rspec/dsl"
|
29
29
|
dsl = Guard::RSpec::Dsl.new(self)
|
30
30
|
|
data/README.md
CHANGED
@@ -58,7 +58,7 @@ resource_rules:
|
|
58
58
|
interval: 5
|
59
59
|
state: opened
|
60
60
|
labels:
|
61
|
-
-
|
61
|
+
- None
|
62
62
|
limits:
|
63
63
|
most_recent: 50
|
64
64
|
actions:
|
@@ -66,6 +66,7 @@ resource_rules:
|
|
66
66
|
- needs attention
|
67
67
|
mention:
|
68
68
|
- markglenfletcher
|
69
|
+
move: gitlab-org/backlog
|
69
70
|
comment: |
|
70
71
|
{{author}} This issue is unlabelled after 5 days. It needs attention. Please take care of this before the end of #{2.days.from_now.strftime('%Y-%m-%d')}
|
71
72
|
summarize:
|
@@ -85,9 +86,27 @@ resource_rules:
|
|
85
86
|
/label ~"needs attention"
|
86
87
|
merge_requests:
|
87
88
|
rules:
|
88
|
-
|
89
|
+
- name: My policy
|
90
|
+
conditions:
|
91
|
+
state: opened
|
92
|
+
labels:
|
93
|
+
- None
|
94
|
+
limits:
|
95
|
+
most_recent: 50
|
96
|
+
actions:
|
97
|
+
labels:
|
98
|
+
- needs attention
|
99
|
+
comment_type: thread
|
100
|
+
comment: |
|
101
|
+
{{author}} This issue is unlabelled. Please add one or more labels.
|
89
102
|
```
|
90
103
|
|
104
|
+
### Real world example
|
105
|
+
|
106
|
+
We're enforcing multiple polices with pipeline schedules at [triage-ops](
|
107
|
+
https://gitlab.com/gitlab-org/quality/triage-ops), where we're also
|
108
|
+
extensively utilizing the [plugins system](#can-i-customize).
|
109
|
+
|
91
110
|
### Fields
|
92
111
|
|
93
112
|
A policy consists of the following fields:
|
@@ -210,6 +229,22 @@ conditions:
|
|
210
229
|
- feature proposal
|
211
230
|
```
|
212
231
|
|
232
|
+
###### Predefined special label names
|
233
|
+
|
234
|
+
Basing on the [issues API](https://docs.gitlab.com/ee/api/issues.html), there
|
235
|
+
are two special predefined label names we can use here:
|
236
|
+
|
237
|
+
* `None`: This indicates that no labels were present
|
238
|
+
* `Any`: This indicates that any labels were presented
|
239
|
+
|
240
|
+
Example:
|
241
|
+
|
242
|
+
```yml
|
243
|
+
conditions:
|
244
|
+
labels:
|
245
|
+
- None
|
246
|
+
```
|
247
|
+
|
213
248
|
###### Labels brace expansion
|
214
249
|
|
215
250
|
We could expand the labels by using brace expansion, which is a pattern
|
@@ -506,7 +541,9 @@ Available action types:
|
|
506
541
|
- [`remove_labels` action](#remove-labels-action)
|
507
542
|
- [`status` action](#status-action)
|
508
543
|
- [`mention` action](#mention-action)
|
544
|
+
- [`move` action](#move-action)
|
509
545
|
- [`comment` action](#comment-action)
|
546
|
+
- [`comment_type` action option](#comment-type-action-option)
|
510
547
|
- [`summarize` action](#summarize-action)
|
511
548
|
|
512
549
|
##### Labels action
|
@@ -515,6 +552,10 @@ Adds a number of labels to the resource.
|
|
515
552
|
|
516
553
|
Accepts an array of strings. Each element is the name of a label to add.
|
517
554
|
|
555
|
+
If any of the labels doesn't exist, the automation will stop immediately so
|
556
|
+
that if a label is renamed or deleted, you'll have to explicitly update or remove
|
557
|
+
it in your policy file.
|
558
|
+
|
518
559
|
Example:
|
519
560
|
|
520
561
|
```yml
|
@@ -530,6 +571,10 @@ Removes a number of labels from the resource.
|
|
530
571
|
|
531
572
|
Accepts an array of strings. Each element is the name of a label to remove.
|
532
573
|
|
574
|
+
If any of the labels doesn't exist, the automation will stop immediately so
|
575
|
+
that if a label is renamed or deleted, you'll have to explicitly update or remove
|
576
|
+
it in your policy file.
|
577
|
+
|
533
578
|
Example:
|
534
579
|
|
535
580
|
```yml
|
@@ -572,6 +617,19 @@ actions:
|
|
572
617
|
- markglenfletcher
|
573
618
|
```
|
574
619
|
|
620
|
+
##### Move action
|
621
|
+
|
622
|
+
Moves an issue (merge request is not supported yet) to the specified project.
|
623
|
+
|
624
|
+
Accepts a string containing the target project path.
|
625
|
+
|
626
|
+
Example:
|
627
|
+
|
628
|
+
```yml
|
629
|
+
actions:
|
630
|
+
move: target/project_path
|
631
|
+
```
|
632
|
+
|
575
633
|
##### Comment action
|
576
634
|
|
577
635
|
Adds a comment to the resource.
|
@@ -619,6 +677,26 @@ actions:
|
|
619
677
|
{{author}} Are you still interested in finishing this merge request?
|
620
678
|
```
|
621
679
|
|
680
|
+
##### Comment type action option
|
681
|
+
|
682
|
+
Determines the type of comment to be added to the resource.
|
683
|
+
|
684
|
+
The following comment types are supported:
|
685
|
+
|
686
|
+
- `comment` (default): creates a regular comment on the resource
|
687
|
+
- `thread`: starts a resolvable thread (discussion) on the resource
|
688
|
+
|
689
|
+
For merge requests, if `comment_type` is set to `thread`, we can also configure that [all threads should be resolved before merging](https://docs.gitlab.com/ee/user/discussions/#only-allow-merge-requests-to-be-merged-if-all-threads-are-resolved), therefore this comment can prevent it from merging.
|
690
|
+
|
691
|
+
Example:
|
692
|
+
|
693
|
+
```yml
|
694
|
+
actions:
|
695
|
+
comment_type: thread
|
696
|
+
comment: |
|
697
|
+
{{author}} Are you still interested in finishing this merge request?
|
698
|
+
```
|
699
|
+
|
622
700
|
###### Harnessing Quick Actions
|
623
701
|
|
624
702
|
[GitLab's quick actions feature](https://docs.gitlab.com/ce/user/project/quick_actions.html) is available in Core.
|
@@ -839,7 +917,7 @@ Which could generate an issue like:
|
|
839
917
|
|
840
918
|
Here's a list of currently available Ruby expression API:
|
841
919
|
|
842
|
-
#####
|
920
|
+
##### Methods for `Issue` and `MergeRequest` (the context)
|
843
921
|
|
844
922
|
| Name | Return type | Description |
|
845
923
|
| ---- | ---- | ---- |
|
@@ -854,6 +932,12 @@ Here's a list of currently available Ruby expression API:
|
|
854
932
|
| project_path | String | The path with namespace to the issues or merge requests project |
|
855
933
|
| full_resource_reference | String | A full reference incuding project path to the issue or merge request |
|
856
934
|
|
935
|
+
##### Methods for `MergeRequest` (merge request context)
|
936
|
+
|
937
|
+
| Method | Return type | Description |
|
938
|
+
| ---- | ---- | ---- |
|
939
|
+
| first_contribution? | Boolean | `true` if it's the author's first contribution to the project; `false` otherwise. This API requires an additional API request for the merge request, thus would be slower. |
|
940
|
+
|
857
941
|
##### Methods for `Milestone`
|
858
942
|
|
859
943
|
| Method | Return type | Description |
|
@@ -930,6 +1014,7 @@ Usage: gitlab-triage [options]
|
|
930
1014
|
-r, --require [string] Require a file before performing
|
931
1015
|
-d, --debug Print debug information
|
932
1016
|
-h, --help Print help message
|
1017
|
+
--all-projects Process all projects visible to `--token`
|
933
1018
|
--init Initialize the project with a policy file
|
934
1019
|
--init-ci Initialize the project with a .gitlab-ci.yml file
|
935
1020
|
```
|
@@ -939,15 +1024,23 @@ Usage: gitlab-triage [options]
|
|
939
1024
|
Triaging against a specific project:
|
940
1025
|
|
941
1026
|
```
|
942
|
-
gitlab-triage --dry-run --token $
|
1027
|
+
gitlab-triage --dry-run --token $GITLAB_API_TOKEN --source-id gitlab-org/triage
|
943
1028
|
```
|
944
1029
|
|
945
1030
|
Triaging against a whole group:
|
946
1031
|
|
947
1032
|
```
|
948
|
-
gitlab-triage --dry-run --token $
|
1033
|
+
gitlab-triage --dry-run --token $GITLAB_API_TOKEN --source-id gitlab-org --source groups
|
949
1034
|
```
|
950
1035
|
|
1036
|
+
Triaging against an entire instance:
|
1037
|
+
|
1038
|
+
```
|
1039
|
+
gitlab-triage --dry-run --token $GITLAB_API_TOKEN --all-projects
|
1040
|
+
```
|
1041
|
+
|
1042
|
+
> **Note:** The `--all-projects` option will process all resources for all projects visible to the specified `$GITLAB_API_TOKEN`
|
1043
|
+
|
951
1044
|
#### Running on GitLab CI pipeline
|
952
1045
|
|
953
1046
|
You can enforce policies using a scheduled pipeline:
|
@@ -957,7 +1050,7 @@ run:triage:triage:
|
|
957
1050
|
stage: triage
|
958
1051
|
script:
|
959
1052
|
- gem install gitlab-triage
|
960
|
-
- gitlab-triage --token $
|
1053
|
+
- gitlab-triage --token $GITLAB_API_TOKEN --source-id $CI_PROJECT_PATH
|
961
1054
|
only:
|
962
1055
|
- schedules
|
963
1056
|
```
|
@@ -971,7 +1064,7 @@ Yes, you can override the host url using the following options:
|
|
971
1064
|
##### CLI
|
972
1065
|
|
973
1066
|
```
|
974
|
-
gitlab-triage --dry-run --token $
|
1067
|
+
gitlab-triage --dry-run --token $GITLAB_API_TOKEN --source-id gitlab-org/triage --host-url https://gitlab.host.com
|
975
1068
|
```
|
976
1069
|
|
977
1070
|
##### Policy file
|
@@ -1008,7 +1101,7 @@ Gitlab::Triage::Resource::Context.include MyPlugin
|
|
1008
1101
|
And then run it with:
|
1009
1102
|
|
1010
1103
|
```shell
|
1011
|
-
gitlab-triage -r ./my_plugin.rb --token $
|
1104
|
+
gitlab-triage -r ./my_plugin.rb --token $GITLAB_API_TOKEN --source-id gitlab-org/triage
|
1012
1105
|
```
|
1013
1106
|
|
1014
1107
|
This allows you to use `has_severity_label?` in the Ruby condition:
|
@@ -1030,3 +1123,7 @@ resource_rules:
|
|
1030
1123
|
### Contributing
|
1031
1124
|
|
1032
1125
|
Please refer to the [Contributing Guide](CONTRIBUTING.md).
|
1126
|
+
|
1127
|
+
## Release Process
|
1128
|
+
|
1129
|
+
Please refer to the [Release Process](docs/release_process.md).
|