gitlabci-bundle-update-mr 1.0.0 → 1.1.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/.gitlab-ci.yml +25 -5
- data/.rubocop.yml +3 -10
- data/CHANGELOG.md +17 -1
- data/Gemfile +0 -8
- data/Gemfile.lock +78 -72
- data/README.md +31 -0
- data/exe/gitlabci-bundle-update-mr +3 -0
- data/gitlabci-bundle-update-mr.gemspec +4 -2
- data/gitlabci-templates/continuous_bundle_update.yml +5 -0
- data/lib/gitlabci/bundle/update/mr.rb +2 -0
- data/lib/gitlabci/bundle/update/mr/client.rb +69 -4
- data/lib/gitlabci/bundle/update/mr/version.rb +1 -1
- metadata +38 -10
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b573b689c6bf38bb800c26ffcbe5e34815bc4ad8f6ae5c92ae5ba7d83ec930e2
|
|
4
|
+
data.tar.gz: ffba9360127be72feea30613f07ce99c8c3d55a2261ffe6acbfa55e2985db796
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3242994d13cd7c4959d5399bee444e6d13d59ad54ae2d141c5952f669b0d53f3939c47f6e5fb9e943893e779022762494a16db40039a8c0c00f1da108479a464
|
|
7
|
+
data.tar.gz: e9083b867e926800dc01b450b92da8c77eaeb5eb22f75f1b86627e8c209b09c5f7c9e206cd8e79581ab59ec29454dc8565cfbc65b8102cada9a9d4a94c53360b
|
data/.gitlab-ci.yml
CHANGED
|
@@ -13,15 +13,12 @@ continuous_bundle_update:
|
|
|
13
13
|
GIT_EMAIL: "gitlabci@example.com"
|
|
14
14
|
GIT_USER: "GitLab CI"
|
|
15
15
|
OPTIONS: "--merge-when-pipeline-succeeds"
|
|
16
|
+
ASSIGNEES: "sue445"
|
|
16
17
|
|
|
17
18
|
before_script:
|
|
18
19
|
# Set timezone to Asia/Tokyo
|
|
19
20
|
- cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
|
|
20
21
|
|
|
21
|
-
only:
|
|
22
|
-
- schedules
|
|
23
|
-
- web # Test for topic branch
|
|
24
|
-
|
|
25
22
|
.default:
|
|
26
23
|
cache:
|
|
27
24
|
key: "$CI_BUILD_NAME"
|
|
@@ -29,7 +26,8 @@ continuous_bundle_update:
|
|
|
29
26
|
- vendor/bundle/
|
|
30
27
|
|
|
31
28
|
before_script:
|
|
32
|
-
- bundle
|
|
29
|
+
- bundle config --local path 'vendor/bundle'
|
|
30
|
+
- bundle install --retry=3 --jobs=$(nproc)
|
|
33
31
|
- bundle clean
|
|
34
32
|
|
|
35
33
|
except:
|
|
@@ -61,6 +59,11 @@ test:2.7:
|
|
|
61
59
|
|
|
62
60
|
image: ruby:2.7
|
|
63
61
|
|
|
62
|
+
test:3.0:
|
|
63
|
+
extends: .test
|
|
64
|
+
|
|
65
|
+
image: ruby:3.0
|
|
66
|
+
|
|
64
67
|
test:trunk:
|
|
65
68
|
extends: .test
|
|
66
69
|
|
|
@@ -91,3 +94,20 @@ pages:
|
|
|
91
94
|
- public
|
|
92
95
|
only:
|
|
93
96
|
- master
|
|
97
|
+
|
|
98
|
+
gitlab_awesome_release:
|
|
99
|
+
stage: build
|
|
100
|
+
|
|
101
|
+
image: ruby:alpine
|
|
102
|
+
|
|
103
|
+
script:
|
|
104
|
+
- gem install gitlab_awesome_release --no-doc
|
|
105
|
+
- gitlab_awesome_release create_latest_note
|
|
106
|
+
|
|
107
|
+
variables:
|
|
108
|
+
GITLAB_API_ENDPOINT: $CI_API_V4_URL
|
|
109
|
+
GITLAB_PROJECT_NAME: $CI_PROJECT_PATH
|
|
110
|
+
GITLAB_API_PRIVATE_TOKEN: $GITLAB_API_PRIVATE_TOKEN
|
|
111
|
+
|
|
112
|
+
only:
|
|
113
|
+
- web
|
data/.rubocop.yml
CHANGED
|
@@ -10,19 +10,12 @@ inherit_gem:
|
|
|
10
10
|
|
|
11
11
|
AllCops:
|
|
12
12
|
TargetRubyVersion: 2.5
|
|
13
|
+
NewCops: enable
|
|
14
|
+
SuggestExtensions: false
|
|
13
15
|
|
|
14
16
|
Layout/HashAlignment:
|
|
15
17
|
EnforcedHashRocketStyle: table
|
|
16
18
|
EnforcedColonStyle: table
|
|
17
19
|
|
|
18
|
-
Layout/IndentationConsistency:
|
|
19
|
-
EnforcedStyle: indented_internal_methods
|
|
20
|
-
|
|
21
|
-
Layout/FirstArrayElementIndentation:
|
|
22
|
-
EnforcedStyle: consistent
|
|
23
|
-
|
|
24
|
-
Layout/FirstHashElementIndentation:
|
|
25
|
-
EnforcedStyle: consistent
|
|
26
|
-
|
|
27
20
|
Metrics/MethodLength:
|
|
28
|
-
Max:
|
|
21
|
+
Max: 22
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
## Unreleased
|
|
2
|
-
[full changelog](https://gitlab.com/sue445/gitlabci-bundle-update-mr/compare/v1.
|
|
2
|
+
[full changelog](https://gitlab.com/sue445/gitlabci-bundle-update-mr/compare/v1.1.2...master)
|
|
3
|
+
|
|
4
|
+
## v1.1.2
|
|
5
|
+
[full changelog](https://gitlab.com/sue445/gitlabci-bundle-update-mr/compare/v1.1.1...v1.1.2)
|
|
6
|
+
|
|
7
|
+
* Allow auto retry with `Gitlab::Error::NotAcceptable` [!134](https://gitlab.com/sue445/gitlabci-bundle-update-mr/merge_requests/134) *@sue445*
|
|
8
|
+
|
|
9
|
+
## v1.1.1
|
|
10
|
+
[full changelog](https://gitlab.com/sue445/gitlabci-bundle-update-mr/compare/v1.1.0...v1.1.1)
|
|
11
|
+
|
|
12
|
+
* Add auto retry when `merge when pipeline succeeds` is failed [!128](https://gitlab.com/sue445/gitlabci-bundle-update-mr/merge_requests/128) *@sue445*
|
|
13
|
+
* [Resolved] `open': can't modify frozen Hash: {} (FrozenError) [!131](https://gitlab.com/sue445/gitlabci-bundle-update-mr/merge_requests/131) *@sue445*
|
|
14
|
+
|
|
15
|
+
## v1.1.0
|
|
16
|
+
[full changelog](https://gitlab.com/sue445/gitlabci-bundle-update-mr/compare/v1.0.0...v1.1.0)
|
|
17
|
+
|
|
18
|
+
* Support assignee [!113](https://gitlab.com/sue445/gitlabci-bundle-update-mr/merge_requests/113) *@sue445*
|
|
3
19
|
|
|
4
20
|
## v1.0.0
|
|
5
21
|
[full changelog](https://gitlab.com/sue445/gitlabci-bundle-update-mr/compare/v0.3.0...v1.0.0)
|
data/Gemfile
CHANGED
|
@@ -8,11 +8,3 @@ gemspec
|
|
|
8
8
|
gem "faraday", ">= 0.15.4"
|
|
9
9
|
gem "octokit", ">= 4.13.0"
|
|
10
10
|
gem "sawyer", ">= 0.8.1"
|
|
11
|
-
|
|
12
|
-
# TODO: Remove after following PR are merged
|
|
13
|
-
# * https://github.com/onk/onkcop/pull/62
|
|
14
|
-
# * https://github.com/onk/onkcop/pull/63
|
|
15
|
-
# * https://github.com/onk/onkcop/pull/65
|
|
16
|
-
# gem "onkcop", ">= 0.53.0.3", require: false
|
|
17
|
-
gem "onkcop", require: false, github: "sue445/onkcop", branch: "develop"
|
|
18
|
-
gem "rubocop", ">= 0.68.0"
|
data/Gemfile.lock
CHANGED
|
@@ -1,18 +1,10 @@
|
|
|
1
|
-
GIT
|
|
2
|
-
remote: https://github.com/sue445/onkcop.git
|
|
3
|
-
revision: 4f7e76b93efff0b7d4d7d9058a487d435479b129
|
|
4
|
-
branch: develop
|
|
5
|
-
specs:
|
|
6
|
-
onkcop (0.53.0.3)
|
|
7
|
-
rubocop (>= 0.53.0)
|
|
8
|
-
rubocop-rspec (>= 1.24.0)
|
|
9
|
-
|
|
10
1
|
PATH
|
|
11
2
|
remote: .
|
|
12
3
|
specs:
|
|
13
|
-
gitlabci-bundle-update-mr (1.
|
|
4
|
+
gitlabci-bundle-update-mr (1.1.2)
|
|
14
5
|
bundler
|
|
15
6
|
compare_linker (>= 1.4.3)
|
|
7
|
+
git (= 1.7.0)
|
|
16
8
|
gitlab (>= 4.14.1)
|
|
17
9
|
restore_bundled_with
|
|
18
10
|
|
|
@@ -21,109 +13,123 @@ GEM
|
|
|
21
13
|
specs:
|
|
22
14
|
addressable (2.7.0)
|
|
23
15
|
public_suffix (>= 2.0.2, < 5.0)
|
|
24
|
-
ast (2.4.
|
|
25
|
-
byebug (
|
|
26
|
-
coderay (1.1.
|
|
27
|
-
compare_linker (1.4.
|
|
16
|
+
ast (2.4.1)
|
|
17
|
+
byebug (11.1.3)
|
|
18
|
+
coderay (1.1.3)
|
|
19
|
+
compare_linker (1.4.4)
|
|
28
20
|
httpclient
|
|
29
21
|
octokit
|
|
30
|
-
crack (0.4.
|
|
31
|
-
|
|
32
|
-
diff-lcs (1.
|
|
33
|
-
docile (1.3.
|
|
34
|
-
dotenv (2.7.
|
|
35
|
-
faraday (1.
|
|
22
|
+
crack (0.4.5)
|
|
23
|
+
rexml
|
|
24
|
+
diff-lcs (1.4.4)
|
|
25
|
+
docile (1.3.4)
|
|
26
|
+
dotenv (2.7.6)
|
|
27
|
+
faraday (1.3.0)
|
|
28
|
+
faraday-net_http (~> 1.0)
|
|
36
29
|
multipart-post (>= 1.2, < 3)
|
|
37
|
-
|
|
30
|
+
ruby2_keywords
|
|
31
|
+
faraday-net_http (1.0.0)
|
|
32
|
+
git (1.7.0)
|
|
38
33
|
rchardet (~> 1.8)
|
|
39
|
-
gitlab (4.
|
|
40
|
-
httparty (~> 0.
|
|
34
|
+
gitlab (4.17.0)
|
|
35
|
+
httparty (~> 0.18)
|
|
41
36
|
terminal-table (~> 1.5, >= 1.5.1)
|
|
42
37
|
gitlab_awesome_release (1.0.2)
|
|
43
38
|
dotenv
|
|
44
39
|
gitlab (>= 4.0.0)
|
|
45
40
|
thor
|
|
46
41
|
hashdiff (1.0.1)
|
|
47
|
-
httparty (0.18.
|
|
42
|
+
httparty (0.18.1)
|
|
48
43
|
mime-types (~> 3.0)
|
|
49
44
|
multi_xml (>= 0.5.2)
|
|
50
45
|
httpclient (2.8.3)
|
|
51
|
-
|
|
52
|
-
json (2.3.0)
|
|
53
|
-
method_source (0.9.2)
|
|
46
|
+
method_source (1.0.0)
|
|
54
47
|
mime-types (3.3.1)
|
|
55
48
|
mime-types-data (~> 3.2015)
|
|
56
|
-
mime-types-data (3.
|
|
49
|
+
mime-types-data (3.2020.1104)
|
|
57
50
|
multi_xml (0.6.0)
|
|
58
51
|
multipart-post (2.1.1)
|
|
59
|
-
octokit (4.
|
|
52
|
+
octokit (4.20.0)
|
|
60
53
|
faraday (>= 0.9)
|
|
61
54
|
sawyer (~> 0.8.0, >= 0.5.3)
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
pry
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
55
|
+
onkcop (1.0.0.0)
|
|
56
|
+
rubocop (>= 0.80.0)
|
|
57
|
+
rubocop-rspec (>= 1.34.0)
|
|
58
|
+
parallel (1.20.1)
|
|
59
|
+
parser (3.0.0.0)
|
|
60
|
+
ast (~> 2.4.1)
|
|
61
|
+
pry (0.13.1)
|
|
62
|
+
coderay (~> 1.1)
|
|
63
|
+
method_source (~> 1.0)
|
|
64
|
+
pry-byebug (3.9.0)
|
|
65
|
+
byebug (~> 11.0)
|
|
66
|
+
pry (~> 0.13.0)
|
|
67
|
+
public_suffix (4.0.6)
|
|
72
68
|
rainbow (3.0.0)
|
|
73
|
-
rake (13.0.
|
|
69
|
+
rake (13.0.3)
|
|
74
70
|
rchardet (1.8.0)
|
|
71
|
+
regexp_parser (2.0.3)
|
|
75
72
|
restore_bundled_with (1.0.0)
|
|
76
73
|
git
|
|
77
74
|
thor
|
|
78
75
|
rexml (3.2.4)
|
|
79
|
-
rspec (3.
|
|
80
|
-
rspec-core (~> 3.
|
|
81
|
-
rspec-expectations (~> 3.
|
|
82
|
-
rspec-mocks (~> 3.
|
|
83
|
-
rspec-core (3.
|
|
84
|
-
rspec-support (~> 3.
|
|
85
|
-
rspec-expectations (3.
|
|
76
|
+
rspec (3.10.0)
|
|
77
|
+
rspec-core (~> 3.10.0)
|
|
78
|
+
rspec-expectations (~> 3.10.0)
|
|
79
|
+
rspec-mocks (~> 3.10.0)
|
|
80
|
+
rspec-core (3.10.1)
|
|
81
|
+
rspec-support (~> 3.10.0)
|
|
82
|
+
rspec-expectations (3.10.1)
|
|
86
83
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
87
|
-
rspec-support (~> 3.
|
|
88
|
-
rspec-
|
|
84
|
+
rspec-support (~> 3.10.0)
|
|
85
|
+
rspec-its (1.3.0)
|
|
86
|
+
rspec-core (>= 3.0.0)
|
|
87
|
+
rspec-expectations (>= 3.0.0)
|
|
88
|
+
rspec-mocks (3.10.1)
|
|
89
89
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
90
|
-
rspec-support (~> 3.
|
|
91
|
-
rspec-support (3.
|
|
90
|
+
rspec-support (~> 3.10.0)
|
|
91
|
+
rspec-support (3.10.1)
|
|
92
92
|
rspec-temp_dir (1.1.0)
|
|
93
93
|
rspec (>= 3.0)
|
|
94
|
-
rubocop (
|
|
95
|
-
jaro_winkler (~> 1.5.1)
|
|
94
|
+
rubocop (1.7.0)
|
|
96
95
|
parallel (~> 1.10)
|
|
97
|
-
parser (>= 2.7.
|
|
96
|
+
parser (>= 2.7.1.5)
|
|
98
97
|
rainbow (>= 2.2.2, < 4.0)
|
|
98
|
+
regexp_parser (>= 1.8, < 3.0)
|
|
99
99
|
rexml
|
|
100
|
+
rubocop-ast (>= 1.2.0, < 2.0)
|
|
100
101
|
ruby-progressbar (~> 1.7)
|
|
101
|
-
unicode-display_width (>= 1.4.0, <
|
|
102
|
-
rubocop-
|
|
103
|
-
|
|
104
|
-
rubocop-
|
|
105
|
-
rubocop (>= 0.
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
102
|
+
unicode-display_width (>= 1.4.0, < 2.0)
|
|
103
|
+
rubocop-ast (1.4.0)
|
|
104
|
+
parser (>= 2.7.1.5)
|
|
105
|
+
rubocop-performance (1.9.2)
|
|
106
|
+
rubocop (>= 0.90.0, < 2.0)
|
|
107
|
+
rubocop-ast (>= 0.4.0)
|
|
108
|
+
rubocop-rspec (2.1.0)
|
|
109
|
+
rubocop (~> 1.0)
|
|
110
|
+
rubocop-ast (>= 1.1.0)
|
|
111
|
+
rubocop_auto_corrector (0.4.1)
|
|
112
|
+
rubocop (>= 0.87.0)
|
|
113
|
+
ruby-progressbar (1.11.0)
|
|
114
|
+
ruby2_keywords (0.0.2)
|
|
110
115
|
sawyer (0.8.2)
|
|
111
116
|
addressable (>= 2.3.5)
|
|
112
117
|
faraday (> 0.8, < 2.0)
|
|
113
|
-
simplecov (0.
|
|
118
|
+
simplecov (0.21.0)
|
|
114
119
|
docile (~> 1.1)
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
simplecov-html (0.
|
|
120
|
+
simplecov-html (~> 0.11)
|
|
121
|
+
simplecov_json_formatter (~> 0.1)
|
|
122
|
+
simplecov-html (0.12.3)
|
|
123
|
+
simplecov_json_formatter (0.1.2)
|
|
118
124
|
terminal-table (1.8.0)
|
|
119
125
|
unicode-display_width (~> 1.1, >= 1.1.1)
|
|
120
126
|
thor (1.0.1)
|
|
121
|
-
unicode-display_width (1.
|
|
122
|
-
webmock (3.
|
|
127
|
+
unicode-display_width (1.7.0)
|
|
128
|
+
webmock (3.11.0)
|
|
123
129
|
addressable (>= 2.3.6)
|
|
124
130
|
crack (>= 0.3.2)
|
|
125
131
|
hashdiff (>= 0.4.0, < 2.0.0)
|
|
126
|
-
yard (0.9.
|
|
132
|
+
yard (0.9.26)
|
|
127
133
|
|
|
128
134
|
PLATFORMS
|
|
129
135
|
ruby
|
|
@@ -134,12 +140,12 @@ DEPENDENCIES
|
|
|
134
140
|
gitlab_awesome_release
|
|
135
141
|
gitlabci-bundle-update-mr!
|
|
136
142
|
octokit (>= 4.13.0)
|
|
137
|
-
onkcop
|
|
143
|
+
onkcop (>= 1.0.0.0)
|
|
138
144
|
pry-byebug
|
|
139
145
|
rake (>= 10.0)
|
|
140
146
|
rspec (~> 3.0)
|
|
147
|
+
rspec-its
|
|
141
148
|
rspec-temp_dir
|
|
142
|
-
rubocop (>= 0.68.0)
|
|
143
149
|
rubocop-performance
|
|
144
150
|
rubocop_auto_corrector
|
|
145
151
|
sawyer (>= 0.8.1)
|
data/README.md
CHANGED
|
@@ -101,6 +101,7 @@ continuous_bundle_update:
|
|
|
101
101
|
GIT_EMAIL: "gitlabci@example.com"
|
|
102
102
|
GIT_USER: "GitLab CI"
|
|
103
103
|
LABELS: "bundle update"
|
|
104
|
+
ASSIGNEES: "foo, bar, baz"
|
|
104
105
|
OPTIONS: ""
|
|
105
106
|
|
|
106
107
|
before_script:
|
|
@@ -124,8 +125,38 @@ Usage: gitlabci-bundle-update-mr [options]
|
|
|
124
125
|
--update-bundled-with Whether to update `BUNDLED WITH` section in Gemfie.lock (default. false)
|
|
125
126
|
--merge-when-pipeline-succeeds
|
|
126
127
|
Whether to set 'Merge when pipeline succeeds' (default. false)
|
|
128
|
+
--assignees 'foo, bar' Add assignees to the MR
|
|
127
129
|
```
|
|
128
130
|
|
|
131
|
+
## ProTip
|
|
132
|
+
### Randomly assign one person to MergeRequest
|
|
133
|
+
```yml
|
|
134
|
+
include:
|
|
135
|
+
- remote: "https://gitlab.com/sue445/gitlabci-bundle-update-mr/raw/master/gitlabci-templates/continuous_bundle_update.yml"
|
|
136
|
+
|
|
137
|
+
continuous_bundle_update:
|
|
138
|
+
stage: build
|
|
139
|
+
|
|
140
|
+
before_script:
|
|
141
|
+
- ASSIGNEES=$(ruby -e 'print %w[foo bar baz].sample')
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Assign one person to MR on a weekly basis
|
|
145
|
+
```yml
|
|
146
|
+
include:
|
|
147
|
+
- remote: "https://gitlab.com/sue445/gitlabci-bundle-update-mr/raw/master/gitlabci-templates/continuous_bundle_update.yml"
|
|
148
|
+
|
|
149
|
+
continuous_bundle_update:
|
|
150
|
+
stage: build
|
|
151
|
+
|
|
152
|
+
before_script:
|
|
153
|
+
- ASSIGNEES=$(ruby -rtime -e 'a=%w[foo bar baz]; print a[Time.now.to_date.cweek% a.size]')
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
It will be assigned weekly in the following order.
|
|
157
|
+
|
|
158
|
+
`foo` -> `bar` -> `baz` -> `foo` -> `bar` -> `baz` -> ...
|
|
159
|
+
|
|
129
160
|
## Development
|
|
130
161
|
|
|
131
162
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
|
@@ -11,6 +11,7 @@ allow_dup_mr = false
|
|
|
11
11
|
mr_labels = []
|
|
12
12
|
update_bundled_with = false
|
|
13
13
|
merge_when_pipeline_succeeds = false
|
|
14
|
+
assignees = []
|
|
14
15
|
|
|
15
16
|
opt.on("--email EMAIL", "git email address (default. `git config user.email`)") {|v| author_email = v }
|
|
16
17
|
opt.on("--user USER", "git username (default. `git config user.name`)") {|v| author_name = v }
|
|
@@ -18,6 +19,7 @@ opt.on("-d", "--duplicate", "Make MR even if it has already existed (default. fa
|
|
|
18
19
|
opt.on("-l", "--labels 'In Review, Update'", Array, "Add labels to the MR") {|v| mr_labels = v.map(&:strip) }
|
|
19
20
|
opt.on("--update-bundled-with", "Whether to update `BUNDLED WITH` section in Gemfie.lock (default. false)") {|v| update_bundled_with = v }
|
|
20
21
|
opt.on("--merge-when-pipeline-succeeds", "Whether to set 'Merge when pipeline succeeds' (default. false)") {|v| merge_when_pipeline_succeeds = v }
|
|
22
|
+
opt.on("--assignees 'foo, bar'", Array, "Add assignees to the MR") {|v| assignees = v.map(&:strip) }
|
|
21
23
|
|
|
22
24
|
opt.parse!(ARGV)
|
|
23
25
|
|
|
@@ -37,4 +39,5 @@ client.perform(
|
|
|
37
39
|
mr_labels: mr_labels,
|
|
38
40
|
update_bundled_with: update_bundled_with,
|
|
39
41
|
merge_when_pipeline_succeeds: merge_when_pipeline_succeeds,
|
|
42
|
+
assignees: assignees,
|
|
40
43
|
)
|
|
@@ -38,18 +38,20 @@ Gem::Specification.new do |spec|
|
|
|
38
38
|
|
|
39
39
|
spec.add_dependency "bundler"
|
|
40
40
|
spec.add_dependency "compare_linker", ">= 1.4.3"
|
|
41
|
+
spec.add_dependency "git", "1.7.0"
|
|
41
42
|
spec.add_dependency "gitlab", ">= 4.14.1"
|
|
42
43
|
spec.add_dependency "restore_bundled_with"
|
|
43
44
|
|
|
44
45
|
spec.add_development_dependency "dotenv"
|
|
45
46
|
spec.add_development_dependency "gitlab_awesome_release"
|
|
46
|
-
spec.add_development_dependency "onkcop"
|
|
47
|
+
spec.add_development_dependency "onkcop", ">= 1.0.0.0"
|
|
47
48
|
spec.add_development_dependency "pry-byebug"
|
|
48
49
|
spec.add_development_dependency "rake", ">= 10.0"
|
|
49
50
|
spec.add_development_dependency "rspec", "~> 3.0"
|
|
51
|
+
spec.add_development_dependency "rspec-its"
|
|
50
52
|
spec.add_development_dependency "rspec-temp_dir"
|
|
51
|
-
spec.add_development_dependency "rubocop-performance"
|
|
52
53
|
spec.add_development_dependency "rubocop_auto_corrector"
|
|
54
|
+
spec.add_development_dependency "rubocop-performance"
|
|
53
55
|
spec.add_development_dependency "simplecov"
|
|
54
56
|
spec.add_development_dependency "webmock"
|
|
55
57
|
spec.add_development_dependency "yard"
|
|
@@ -6,6 +6,7 @@ continuous_bundle_update:
|
|
|
6
6
|
GIT_EMAIL: "gitlabci@example.com"
|
|
7
7
|
GIT_USER: "GitLab CI"
|
|
8
8
|
LABELS: "bundle update"
|
|
9
|
+
ASSIGNEES: ""
|
|
9
10
|
OPTIONS: ""
|
|
10
11
|
|
|
11
12
|
cache:
|
|
@@ -16,6 +17,10 @@ continuous_bundle_update:
|
|
|
16
17
|
script:
|
|
17
18
|
- bundle install --path vendor/bundle --clean
|
|
18
19
|
- gem install --no-doc gitlabci-bundle-update-mr
|
|
20
|
+
- |
|
|
21
|
+
if [ -n "$ASSIGNEES" ]; then
|
|
22
|
+
OPTIONS="--assignees $ASSIGNEES $OPTIONS"
|
|
23
|
+
fi
|
|
19
24
|
- gitlabci-bundle-update-mr --user="$GIT_USER" --email="$GIT_EMAIL" --labels="$LABELS" $OPTIONS
|
|
20
25
|
|
|
21
26
|
only:
|
|
@@ -5,6 +5,7 @@ module Gitlabci
|
|
|
5
5
|
class Client # rubocop:disable Metrics/ClassLength
|
|
6
6
|
BRANCH_PREFIX = "bundle-update-".freeze
|
|
7
7
|
TITLE_PREFIX = "bundle update at ".freeze
|
|
8
|
+
MAX_RETRY_COUNT = 3
|
|
8
9
|
|
|
9
10
|
# rubocop:disable Metrics/ParameterLists
|
|
10
11
|
|
|
@@ -28,12 +29,14 @@ module Gitlabci
|
|
|
28
29
|
# @param mr_labels [Array<String>]
|
|
29
30
|
# @param update_bundled_with [Boolean]
|
|
30
31
|
# @param merge_when_pipeline_succeeds [Boolean]
|
|
31
|
-
|
|
32
|
+
# @param assignees [Array<String>]
|
|
33
|
+
def perform(allow_dup_mr:, mr_labels:, update_bundled_with:, merge_when_pipeline_succeeds:, assignees:)
|
|
32
34
|
if !allow_dup_mr && exists_bundle_update_mr?
|
|
33
35
|
puts "Skip because it has already existed."
|
|
34
36
|
return
|
|
35
37
|
end
|
|
36
38
|
|
|
39
|
+
assignee_ids = get_assignee_ids(assignees)
|
|
37
40
|
old_lockfile = File.read(lockfile_name)
|
|
38
41
|
|
|
39
42
|
system!("bundle update")
|
|
@@ -51,7 +54,7 @@ module Gitlabci
|
|
|
51
54
|
commit_gemfile_lock(new_lockfile)
|
|
52
55
|
description = merge_request_description(old_lockfile, new_lockfile)
|
|
53
56
|
|
|
54
|
-
mr = create_merge_request(description: description, mr_labels: mr_labels)
|
|
57
|
+
mr = create_merge_request(description: description, mr_labels: mr_labels, assignee_ids: assignee_ids)
|
|
55
58
|
puts "MR is created: #{mr.web_url}"
|
|
56
59
|
|
|
57
60
|
if merge_when_pipeline_succeeds
|
|
@@ -81,7 +84,10 @@ module Gitlabci
|
|
|
81
84
|
|
|
82
85
|
# @param description [String]
|
|
83
86
|
# @param mr_labels [Array<String>]
|
|
84
|
-
|
|
87
|
+
# @param assignee_ids [Array<Integer>]
|
|
88
|
+
#
|
|
89
|
+
# @see https://docs.gitlab.com/ee/api/merge_requests.html#create-mr
|
|
90
|
+
def create_merge_request(description:, mr_labels:, assignee_ids:)
|
|
85
91
|
params = {
|
|
86
92
|
source_branch: new_branch,
|
|
87
93
|
target_branch: @branch,
|
|
@@ -93,6 +99,12 @@ module Gitlabci
|
|
|
93
99
|
params[:labels] = mr_labels.join(",")
|
|
94
100
|
end
|
|
95
101
|
|
|
102
|
+
if assignee_ids.length == 1
|
|
103
|
+
params[:assignee_id] = assignee_ids[0]
|
|
104
|
+
elsif assignee_ids.length >= 2
|
|
105
|
+
params[:assignee_ids] = assignee_ids
|
|
106
|
+
end
|
|
107
|
+
|
|
96
108
|
@gitlab.create_merge_request(
|
|
97
109
|
@project_name,
|
|
98
110
|
"#{TITLE_PREFIX}#{current_time.strftime("%Y-%m-%d %H:%M:%S %Z")}",
|
|
@@ -120,6 +132,33 @@ module Gitlabci
|
|
|
120
132
|
MARKDOWN
|
|
121
133
|
end
|
|
122
134
|
|
|
135
|
+
# @param username [String]
|
|
136
|
+
#
|
|
137
|
+
# @return [Gitlab::ObjectifiedHash]
|
|
138
|
+
# @return [nil] User isn't found
|
|
139
|
+
#
|
|
140
|
+
# @see https://docs.gitlab.com/ee/api/users.html#for-normal-users
|
|
141
|
+
def find_by_username(username)
|
|
142
|
+
@gitlab.users(username: username).first
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
# @param username [String]
|
|
146
|
+
#
|
|
147
|
+
# @return [Gitlab::ObjectifiedHash]
|
|
148
|
+
#
|
|
149
|
+
# @raise [Gitlabci::Bundle::Update::Mr::NotFoundUserError]
|
|
150
|
+
#
|
|
151
|
+
# @see https://docs.gitlab.com/ee/api/users.html#for-normal-users
|
|
152
|
+
def find_by_username!(username)
|
|
153
|
+
user = find_by_username(username)
|
|
154
|
+
|
|
155
|
+
unless user
|
|
156
|
+
raise NotFoundUserError, "#{username} isn't found"
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
user
|
|
160
|
+
end
|
|
161
|
+
|
|
123
162
|
private
|
|
124
163
|
|
|
125
164
|
def system!(command)
|
|
@@ -168,7 +207,33 @@ module Gitlabci
|
|
|
168
207
|
end
|
|
169
208
|
|
|
170
209
|
def accept_merge_request(mr_id)
|
|
171
|
-
|
|
210
|
+
with_retry do
|
|
211
|
+
@gitlab.accept_merge_request(@project_name, mr_id, merge_when_pipeline_succeeds: true, should_remove_source_branch: true)
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
def with_retry
|
|
216
|
+
retry_count ||= 0
|
|
217
|
+
|
|
218
|
+
yield
|
|
219
|
+
rescue Gitlab::Error::MethodNotAllowed, Gitlab::Error::NotAcceptable => e
|
|
220
|
+
retry_count += 1
|
|
221
|
+
|
|
222
|
+
if retry_count > MAX_RETRY_COUNT
|
|
223
|
+
raise e
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
puts "Error is occurred and auto retry (#{retry_count}/#{MAX_RETRY_COUNT}): #{e}"
|
|
227
|
+
sleep 1
|
|
228
|
+
|
|
229
|
+
retry
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
def get_assignee_ids(assignees)
|
|
233
|
+
assignees.map do |username|
|
|
234
|
+
user = find_by_username!(username)
|
|
235
|
+
user.id
|
|
236
|
+
end
|
|
172
237
|
end
|
|
173
238
|
end
|
|
174
239
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: gitlabci-bundle-update-mr
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- sue445
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2021-01-04 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -38,6 +38,20 @@ dependencies:
|
|
|
38
38
|
- - ">="
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: 1.4.3
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: git
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - '='
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: 1.7.0
|
|
48
|
+
type: :runtime
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - '='
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: 1.7.0
|
|
41
55
|
- !ruby/object:Gem::Dependency
|
|
42
56
|
name: gitlab
|
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -100,14 +114,14 @@ dependencies:
|
|
|
100
114
|
requirements:
|
|
101
115
|
- - ">="
|
|
102
116
|
- !ruby/object:Gem::Version
|
|
103
|
-
version:
|
|
117
|
+
version: 1.0.0.0
|
|
104
118
|
type: :development
|
|
105
119
|
prerelease: false
|
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
121
|
requirements:
|
|
108
122
|
- - ">="
|
|
109
123
|
- !ruby/object:Gem::Version
|
|
110
|
-
version:
|
|
124
|
+
version: 1.0.0.0
|
|
111
125
|
- !ruby/object:Gem::Dependency
|
|
112
126
|
name: pry-byebug
|
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -151,7 +165,7 @@ dependencies:
|
|
|
151
165
|
- !ruby/object:Gem::Version
|
|
152
166
|
version: '3.0'
|
|
153
167
|
- !ruby/object:Gem::Dependency
|
|
154
|
-
name: rspec-
|
|
168
|
+
name: rspec-its
|
|
155
169
|
requirement: !ruby/object:Gem::Requirement
|
|
156
170
|
requirements:
|
|
157
171
|
- - ">="
|
|
@@ -165,7 +179,7 @@ dependencies:
|
|
|
165
179
|
- !ruby/object:Gem::Version
|
|
166
180
|
version: '0'
|
|
167
181
|
- !ruby/object:Gem::Dependency
|
|
168
|
-
name:
|
|
182
|
+
name: rspec-temp_dir
|
|
169
183
|
requirement: !ruby/object:Gem::Requirement
|
|
170
184
|
requirements:
|
|
171
185
|
- - ">="
|
|
@@ -192,6 +206,20 @@ dependencies:
|
|
|
192
206
|
- - ">="
|
|
193
207
|
- !ruby/object:Gem::Version
|
|
194
208
|
version: '0'
|
|
209
|
+
- !ruby/object:Gem::Dependency
|
|
210
|
+
name: rubocop-performance
|
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
|
212
|
+
requirements:
|
|
213
|
+
- - ">="
|
|
214
|
+
- !ruby/object:Gem::Version
|
|
215
|
+
version: '0'
|
|
216
|
+
type: :development
|
|
217
|
+
prerelease: false
|
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
219
|
+
requirements:
|
|
220
|
+
- - ">="
|
|
221
|
+
- !ruby/object:Gem::Version
|
|
222
|
+
version: '0'
|
|
195
223
|
- !ruby/object:Gem::Dependency
|
|
196
224
|
name: simplecov
|
|
197
225
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -270,7 +298,7 @@ metadata:
|
|
|
270
298
|
homepage_uri: https://gitlab.com/sue445/gitlabci-bundle-update-mr
|
|
271
299
|
source_code_uri: https://gitlab.com/sue445/gitlabci-bundle-update-mr
|
|
272
300
|
changelog_uri: https://gitlab.com/sue445/gitlabci-bundle-update-mr/blob/master/CHANGELOG.md
|
|
273
|
-
post_install_message:
|
|
301
|
+
post_install_message:
|
|
274
302
|
rdoc_options: []
|
|
275
303
|
require_paths:
|
|
276
304
|
- lib
|
|
@@ -285,8 +313,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
285
313
|
- !ruby/object:Gem::Version
|
|
286
314
|
version: '0'
|
|
287
315
|
requirements: []
|
|
288
|
-
rubygems_version: 3.1.
|
|
289
|
-
signing_key:
|
|
316
|
+
rubygems_version: 3.1.4
|
|
317
|
+
signing_key:
|
|
290
318
|
specification_version: 4
|
|
291
319
|
summary: Create MergeRequest of bundle update in GitLab CI
|
|
292
320
|
test_files: []
|