gitlabci-bundle-update-mr 0.3.0 → 1.1.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 74c00bc91c7d10b1e98b13306612d4ebfbaf85d9996ec7ba6afa9edf927d73d6
4
- data.tar.gz: abf4225860bf01f5806d9f190edfc16196de3b36b15f76f05e641ed2da8b1370
3
+ metadata.gz: 1d1206c8c3121aad2c45e26a171ea8dc1f4d63a63edf928c2c0461e5eee6c060
4
+ data.tar.gz: 37c562a6f10341664b39d6074900f801e922a207a941ba6a2a1037fa082cc9d4
5
5
  SHA512:
6
- metadata.gz: a59d9d7cd005e94d7415df45874cf3d5b6b8ed81fb29999802edeab8081690724279019f3fc16019d84c88d7e4e771edbc42c0d9e3c331be80f2979573c2c6dd
7
- data.tar.gz: 12c2bd50c6c9c20311a2fbffa3d233ef3fc789d66670fd4c3807630f6785ccad95c248a18099d525fa08cdcdcf1def125c849d0719d43fc0b5bee3b01878b938
6
+ metadata.gz: 1946c3432b01d0de283c76e9e3cf66139e353b83cc931e2599efa0af6d7c2a4eab16de0b0688892c8212637e9a76cec3e2f12f31ed3c00ba9a585b30fce792d9
7
+ data.tar.gz: 2cfdbd4ef410037d08a69dbea805de4d38baf0ecece5797efeb084dee4fea40e9e7b3329fe4f375a474397c40632bbe89eb3a9bc627ebe8242a55310191f14a8
@@ -13,23 +13,21 @@ 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
- .default: &default
22
+ .default:
26
23
  cache:
27
24
  key: "$CI_BUILD_NAME"
28
25
  paths:
29
26
  - vendor/bundle/
30
27
 
31
28
  before_script:
32
- - bundle install --path vendor/bundle
29
+ - bundle config --local path 'vendor/bundle'
30
+ - bundle install --retry=3 --jobs=$(nproc)
33
31
  - bundle clean
34
32
 
35
33
  except:
@@ -37,8 +35,8 @@ continuous_bundle_update:
37
35
  - web
38
36
  - tags
39
37
 
40
- .test: &test
41
- <<: *default
38
+ .test:
39
+ extends: .default
42
40
 
43
41
  stage: build
44
42
 
@@ -46,34 +44,34 @@ continuous_bundle_update:
46
44
  - bundle exec rspec
47
45
  - bundle exec ./exe/gitlabci-bundle-update-mr --help
48
46
 
49
- test:2.3:
50
- <<: *test
51
-
52
- image: ruby:2.3
53
-
54
- test:2.4:
55
- <<: *test
56
-
57
- image: ruby:2.4
58
-
59
47
  test:2.5:
60
- <<: *test
48
+ extends: .test
61
49
 
62
50
  image: ruby:2.5
63
51
 
64
52
  test:2.6:
65
- <<: *test
53
+ extends: .test
66
54
 
67
55
  image: ruby:2.6
68
56
 
57
+ test:2.7:
58
+ extends: .test
59
+
60
+ image: ruby:2.7
61
+
62
+ test:3.0:
63
+ extends: .test
64
+
65
+ image: ruby:3.0
66
+
69
67
  test:trunk:
70
- <<: *test
68
+ extends: .test
71
69
 
72
70
  image: rubylang/ruby:trunk-nightly-bionic
73
71
  allow_failure: true
74
72
 
75
73
  rubocop:
76
- <<: *default
74
+ extends: .default
77
75
 
78
76
  stage: build
79
77
 
@@ -83,7 +81,7 @@ rubocop:
83
81
  - bundle exec rubocop -P
84
82
 
85
83
  pages:
86
- <<: *default
84
+ extends: .default
87
85
 
88
86
  stage: deploy
89
87
 
@@ -96,3 +94,20 @@ pages:
96
94
  - public
97
95
  only:
98
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
@@ -9,17 +9,21 @@ inherit_gem:
9
9
  # - "config/rspec.yml"
10
10
 
11
11
  AllCops:
12
- TargetRubyVersion: 2.3
12
+ TargetRubyVersion: 2.5
13
+ NewCops: enable
13
14
 
14
- Layout/AlignHash:
15
+ Layout/HashAlignment:
15
16
  EnforcedHashRocketStyle: table
16
17
  EnforcedColonStyle: table
17
18
 
18
- Layout/IndentFirstArrayElement:
19
+ Layout/IndentationConsistency:
20
+ EnforcedStyle: indented_internal_methods
21
+
22
+ Layout/FirstArrayElementIndentation:
19
23
  EnforcedStyle: consistent
20
24
 
21
- Layout/IndentFirstHashElement:
25
+ Layout/FirstHashElementIndentation:
22
26
  EnforcedStyle: consistent
23
27
 
24
28
  Metrics/MethodLength:
25
- Max: 21
29
+ Max: 22
@@ -1,5 +1,22 @@
1
1
  ## Unreleased
2
- [full changelog](https://gitlab.com/sue445/gitlabci-bundle-update-mr/compare/v0.3.0...master)
2
+ [full changelog](https://gitlab.com/sue445/gitlabci-bundle-update-mr/compare/v1.1.1...master)
3
+
4
+ ## v1.1.1
5
+ [full changelog](https://gitlab.com/sue445/gitlabci-bundle-update-mr/compare/v1.1.0...v1.1.1)
6
+
7
+ * Add auto retry when `merge when pipeline succeeds` is failed [!128](https://gitlab.com/sue445/gitlabci-bundle-update-mr/merge_requests/128) *@sue445*
8
+ * [Resolved] `open': can't modify frozen Hash: {} (FrozenError) [!131](https://gitlab.com/sue445/gitlabci-bundle-update-mr/merge_requests/131) *@sue445*
9
+
10
+ ## v1.1.0
11
+ [full changelog](https://gitlab.com/sue445/gitlabci-bundle-update-mr/compare/v1.0.0...v1.1.0)
12
+
13
+ * Support assignee [!113](https://gitlab.com/sue445/gitlabci-bundle-update-mr/merge_requests/113) *@sue445*
14
+
15
+ ## v1.0.0
16
+ [full changelog](https://gitlab.com/sue445/gitlabci-bundle-update-mr/compare/v0.3.0...v1.0.0)
17
+
18
+ ### Breaking changes :warning:
19
+ * Drop support ruby < 2.5 [!87](https://gitlab.com/sue445/gitlabci-bundle-update-mr/merge_requests/87) *@sue445*
3
20
 
4
21
  ## v0.3.0
5
22
  [full changelog](https://gitlab.com/sue445/gitlabci-bundle-update-mr/compare/v0.2.2...v0.3.0)
data/Gemfile CHANGED
@@ -1,4 +1,5 @@
1
1
  source "https://rubygems.org"
2
+ git_source(:github) {|repo| "https://github.com/#{repo}.git" }
2
3
 
3
4
  # Specify your gem's dependencies in gitlabci-bundle-update-mr.gemspec
4
5
  gemspec
@@ -8,6 +9,10 @@ gem "faraday", ">= 0.15.4"
8
9
  gem "octokit", ">= 4.13.0"
9
10
  gem "sawyer", ">= 0.8.1"
10
11
 
11
- # TODO: Remove after https://github.com/onk/onkcop/pull/62 is merged
12
- gem "onkcop", github: "sue445/onkcop", branch: "rubocop_0.68.0", ref: "6256494"
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"
13
18
  gem "rubocop", ">= 0.68.0"
@@ -1,125 +1,139 @@
1
1
  GIT
2
- remote: git://github.com/sue445/onkcop.git
3
- revision: 6256494c1f860f62df6a4d57c81a4c200beee53b
4
- ref: 6256494
5
- branch: rubocop_0.68.0
2
+ remote: https://github.com/sue445/onkcop.git
3
+ revision: d09f75a5eeb1969800cca160f653325771590fae
4
+ branch: develop
6
5
  specs:
7
6
  onkcop (0.53.0.3)
8
7
  rubocop (>= 0.53.0)
9
- rubocop-rspec (>= 1.24.0)
8
+ rubocop-rspec (>= 1.34.0)
10
9
 
11
10
  PATH
12
11
  remote: .
13
12
  specs:
14
- gitlabci-bundle-update-mr (0.3.0)
13
+ gitlabci-bundle-update-mr (1.1.1)
15
14
  bundler
16
15
  compare_linker (>= 1.4.3)
17
- gitlab (>= 4.0.0)
16
+ git (= 1.7.0)
17
+ gitlab (>= 4.14.1)
18
18
  restore_bundled_with
19
19
 
20
20
  GEM
21
21
  remote: https://rubygems.org/
22
22
  specs:
23
- addressable (2.5.2)
24
- public_suffix (>= 2.0.2, < 4.0)
25
- ast (2.4.0)
26
- byebug (11.0.1)
27
- coderay (1.1.2)
28
- compare_linker (1.4.3)
23
+ addressable (2.7.0)
24
+ public_suffix (>= 2.0.2, < 5.0)
25
+ ast (2.4.1)
26
+ byebug (11.1.3)
27
+ coderay (1.1.3)
28
+ compare_linker (1.4.4)
29
29
  httpclient
30
30
  octokit
31
- crack (0.4.3)
32
- safe_yaml (~> 1.0.0)
33
- diff-lcs (1.3)
34
- docile (1.3.1)
35
- dotenv (2.7.2)
36
- faraday (0.15.4)
31
+ crack (0.4.5)
32
+ rexml
33
+ diff-lcs (1.4.4)
34
+ docile (1.3.4)
35
+ dotenv (2.7.6)
36
+ faraday (1.2.0)
37
37
  multipart-post (>= 1.2, < 3)
38
- git (1.5.0)
39
- gitlab (4.11.0)
40
- httparty (~> 0.14, >= 0.14.0)
38
+ ruby2_keywords
39
+ git (1.7.0)
40
+ rchardet (~> 1.8)
41
+ gitlab (4.17.0)
42
+ httparty (~> 0.18)
41
43
  terminal-table (~> 1.5, >= 1.5.1)
42
44
  gitlab_awesome_release (1.0.2)
43
45
  dotenv
44
46
  gitlab (>= 4.0.0)
45
47
  thor
46
- hashdiff (0.3.9)
47
- httparty (0.17.0)
48
+ hashdiff (1.0.1)
49
+ httparty (0.18.1)
48
50
  mime-types (~> 3.0)
49
51
  multi_xml (>= 0.5.2)
50
52
  httpclient (2.8.3)
51
- jaro_winkler (1.5.2)
52
- json (2.2.0)
53
- method_source (0.9.2)
54
- mime-types (3.2.2)
53
+ method_source (1.0.0)
54
+ mime-types (3.3.1)
55
55
  mime-types-data (~> 3.2015)
56
- mime-types-data (3.2019.0331)
56
+ mime-types-data (3.2020.1104)
57
57
  multi_xml (0.6.0)
58
- multipart-post (2.0.0)
59
- octokit (4.14.0)
58
+ multipart-post (2.1.1)
59
+ octokit (4.19.0)
60
+ faraday (>= 0.9)
60
61
  sawyer (~> 0.8.0, >= 0.5.3)
61
- parallel (1.17.0)
62
- parser (2.6.3.0)
63
- ast (~> 2.4.0)
64
- pry (0.12.2)
65
- coderay (~> 1.1.0)
66
- method_source (~> 0.9.0)
67
- pry-byebug (3.7.0)
62
+ parallel (1.20.1)
63
+ parser (3.0.0.0)
64
+ ast (~> 2.4.1)
65
+ pry (0.13.1)
66
+ coderay (~> 1.1)
67
+ method_source (~> 1.0)
68
+ pry-byebug (3.9.0)
68
69
  byebug (~> 11.0)
69
- pry (~> 0.10)
70
- public_suffix (3.0.3)
70
+ pry (~> 0.13.0)
71
+ public_suffix (4.0.6)
71
72
  rainbow (3.0.0)
72
- rake (10.5.0)
73
+ rake (13.0.3)
74
+ rchardet (1.8.0)
75
+ regexp_parser (2.0.2)
73
76
  restore_bundled_with (1.0.0)
74
77
  git
75
78
  thor
76
- rspec (3.8.0)
77
- rspec-core (~> 3.8.0)
78
- rspec-expectations (~> 3.8.0)
79
- rspec-mocks (~> 3.8.0)
80
- rspec-core (3.8.0)
81
- rspec-support (~> 3.8.0)
82
- rspec-expectations (3.8.3)
79
+ rexml (3.2.4)
80
+ rspec (3.10.0)
81
+ rspec-core (~> 3.10.0)
82
+ rspec-expectations (~> 3.10.0)
83
+ rspec-mocks (~> 3.10.0)
84
+ rspec-core (3.10.1)
85
+ rspec-support (~> 3.10.0)
86
+ rspec-expectations (3.10.1)
83
87
  diff-lcs (>= 1.2.0, < 2.0)
84
- rspec-support (~> 3.8.0)
85
- rspec-mocks (3.8.0)
88
+ rspec-support (~> 3.10.0)
89
+ rspec-its (1.3.0)
90
+ rspec-core (>= 3.0.0)
91
+ rspec-expectations (>= 3.0.0)
92
+ rspec-mocks (3.10.0)
86
93
  diff-lcs (>= 1.2.0, < 2.0)
87
- rspec-support (~> 3.8.0)
88
- rspec-support (3.8.0)
94
+ rspec-support (~> 3.10.0)
95
+ rspec-support (3.10.1)
89
96
  rspec-temp_dir (1.1.0)
90
97
  rspec (>= 3.0)
91
- rubocop (0.68.1)
92
- jaro_winkler (~> 1.5.1)
98
+ rubocop (1.7.0)
93
99
  parallel (~> 1.10)
94
- parser (>= 2.5, != 2.5.1.1)
100
+ parser (>= 2.7.1.5)
95
101
  rainbow (>= 2.2.2, < 4.0)
102
+ regexp_parser (>= 1.8, < 3.0)
103
+ rexml
104
+ rubocop-ast (>= 1.2.0, < 2.0)
96
105
  ruby-progressbar (~> 1.7)
97
- unicode-display_width (>= 1.4.0, < 1.6)
98
- rubocop-performance (1.1.0)
99
- rubocop (>= 0.67.0)
100
- rubocop-rspec (1.32.0)
101
- rubocop (>= 0.60.0)
102
- rubocop_auto_corrector (0.1.0)
103
- rubocop (>= 0.49.0)
104
- ruby-progressbar (1.10.0)
105
- safe_yaml (1.0.5)
106
- sawyer (0.8.1)
107
- addressable (>= 2.3.5, < 2.6)
108
- faraday (~> 0.8, < 1.0)
109
- simplecov (0.16.1)
106
+ unicode-display_width (>= 1.4.0, < 2.0)
107
+ rubocop-ast (1.3.0)
108
+ parser (>= 2.7.1.5)
109
+ rubocop-performance (1.9.1)
110
+ rubocop (>= 0.90.0, < 2.0)
111
+ rubocop-ast (>= 0.4.0)
112
+ rubocop-rspec (2.1.0)
113
+ rubocop (~> 1.0)
114
+ rubocop-ast (>= 1.1.0)
115
+ rubocop_auto_corrector (0.4.1)
116
+ rubocop (>= 0.87.0)
117
+ ruby-progressbar (1.10.1)
118
+ ruby2_keywords (0.0.2)
119
+ sawyer (0.8.2)
120
+ addressable (>= 2.3.5)
121
+ faraday (> 0.8, < 2.0)
122
+ simplecov (0.20.0)
110
123
  docile (~> 1.1)
111
- json (>= 1.8, < 3)
112
- simplecov-html (~> 0.10.0)
113
- simplecov-html (0.10.2)
124
+ simplecov-html (~> 0.11)
125
+ simplecov_json_formatter (~> 0.1)
126
+ simplecov-html (0.12.3)
127
+ simplecov_json_formatter (0.1.2)
114
128
  terminal-table (1.8.0)
115
129
  unicode-display_width (~> 1.1, >= 1.1.1)
116
- thor (0.20.3)
117
- unicode-display_width (1.5.0)
118
- webmock (3.5.1)
130
+ thor (1.0.1)
131
+ unicode-display_width (1.7.0)
132
+ webmock (3.11.0)
119
133
  addressable (>= 2.3.6)
120
134
  crack (>= 0.3.2)
121
- hashdiff
122
- yard (0.9.19)
135
+ hashdiff (>= 0.4.0, < 2.0.0)
136
+ yard (0.9.26)
123
137
 
124
138
  PLATFORMS
125
139
  ruby
@@ -132,8 +146,9 @@ DEPENDENCIES
132
146
  octokit (>= 4.13.0)
133
147
  onkcop!
134
148
  pry-byebug
135
- rake (~> 10.0)
149
+ rake (>= 10.0)
136
150
  rspec (~> 3.0)
151
+ rspec-its
137
152
  rspec-temp_dir
138
153
  rubocop (>= 0.68.0)
139
154
  rubocop-performance
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Gitlabci::Bundle::Update::Mr
2
2
  [![Gem Version](https://badge.fury.io/rb/gitlabci-bundle-update-mr.svg)](https://badge.fury.io/rb/gitlabci-bundle-update-mr)
3
+ [![pipeline status](https://gitlab.com/sue445/gitlabci-bundle-update-mr/badges/master/pipeline.svg)](https://gitlab.com/sue445/gitlabci-bundle-update-mr/commits/master)
4
+ [![coverage report](https://gitlab.com/sue445/gitlabci-bundle-update-mr/badges/master/coverage.svg)](https://gitlab.com/sue445/gitlabci-bundle-update-mr/commits/master)
3
5
 
4
6
  Create MergeRequest of bundle update in GitLab CI
5
7
 
@@ -99,6 +101,7 @@ continuous_bundle_update:
99
101
  GIT_EMAIL: "gitlabci@example.com"
100
102
  GIT_USER: "GitLab CI"
101
103
  LABELS: "bundle update"
104
+ ASSIGNEES: "foo, bar, baz"
102
105
  OPTIONS: ""
103
106
 
104
107
  before_script:
@@ -122,8 +125,38 @@ Usage: gitlabci-bundle-update-mr [options]
122
125
  --update-bundled-with Whether to update `BUNDLED WITH` section in Gemfie.lock (default. false)
123
126
  --merge-when-pipeline-succeeds
124
127
  Whether to set 'Merge when pipeline succeeds' (default. false)
128
+ --assignees 'foo, bar' Add assignees to the MR
125
129
  ```
126
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
+
127
160
  ## Development
128
161
 
129
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
  )
@@ -34,22 +34,24 @@ Gem::Specification.new do |spec|
34
34
  spec.executables = spec.files.grep(%r{^exe/}) {|f| File.basename(f) }
35
35
  spec.require_paths = ["lib"]
36
36
 
37
- spec.required_ruby_version = ">= 2.3.0"
37
+ spec.required_ruby_version = ">= 2.5.0"
38
38
 
39
39
  spec.add_dependency "bundler"
40
40
  spec.add_dependency "compare_linker", ">= 1.4.3"
41
- spec.add_dependency "gitlab", ">= 4.0.0"
41
+ spec.add_dependency "git", "1.7.0"
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
47
  spec.add_development_dependency "onkcop"
47
48
  spec.add_development_dependency "pry-byebug"
48
- spec.add_development_dependency "rake", "~> 10.0"
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:
@@ -14,6 +14,8 @@ module Gitlabci
14
14
 
15
15
  class MissingKeyError < Error; end
16
16
 
17
+ class NotFoundUserError < Error; end
18
+
17
19
  def self.assert_env_keys
18
20
  %w[
19
21
  OCTOKIT_ACCESS_TOKEN
@@ -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
- def perform(allow_dup_mr:, mr_labels:, update_bundled_with:, merge_when_pipeline_succeeds:)
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
- def create_merge_request(description:, mr_labels:)
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
- @gitlab.accept_merge_request(@project_name, mr_id, merge_when_pipeline_succeeds: true, should_remove_source_branch: true)
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 => 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
@@ -2,7 +2,7 @@ module Gitlabci
2
2
  module Bundle
3
3
  module Update
4
4
  module Mr
5
- VERSION = "0.3.0".freeze
5
+ VERSION = "1.1.1".freeze
6
6
  end
7
7
  end
8
8
  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: 0.3.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - sue445
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-05-04 00:00:00.000000000 Z
11
+ date: 2021-01-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,20 +38,34 @@ 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
44
58
  requirements:
45
59
  - - ">="
46
60
  - !ruby/object:Gem::Version
47
- version: 4.0.0
61
+ version: 4.14.1
48
62
  type: :runtime
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - ">="
53
67
  - !ruby/object:Gem::Version
54
- version: 4.0.0
68
+ version: 4.14.1
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: restore_bundled_with
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -126,14 +140,14 @@ dependencies:
126
140
  name: rake
127
141
  requirement: !ruby/object:Gem::Requirement
128
142
  requirements:
129
- - - "~>"
143
+ - - ">="
130
144
  - !ruby/object:Gem::Version
131
145
  version: '10.0'
132
146
  type: :development
133
147
  prerelease: false
134
148
  version_requirements: !ruby/object:Gem::Requirement
135
149
  requirements:
136
- - - "~>"
150
+ - - ">="
137
151
  - !ruby/object:Gem::Version
138
152
  version: '10.0'
139
153
  - !ruby/object:Gem::Dependency
@@ -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-temp_dir
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: rubocop-performance
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
@@ -278,15 +306,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
278
306
  requirements:
279
307
  - - ">="
280
308
  - !ruby/object:Gem::Version
281
- version: 2.3.0
309
+ version: 2.5.0
282
310
  required_rubygems_version: !ruby/object:Gem::Requirement
283
311
  requirements:
284
312
  - - ">="
285
313
  - !ruby/object:Gem::Version
286
314
  version: '0'
287
315
  requirements: []
288
- rubygems_version: 3.0.3
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: []