circleci-bundle-update-pr 1.11.3 → 1.12.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fed190b6e303e6e6a2a90f51c5bba9cc74650f878d9f4bd2277ce7fe70dfaa80
4
- data.tar.gz: e5cc3a2204ff8d645cde47fd6390b32690ee9128cab319dd9c0b00ea4c245e0f
3
+ metadata.gz: 7e50dd78098b429691a6337242fdee4ab41974be18904d58b6f9a5eedbdf74e0
4
+ data.tar.gz: 36555ee2c44458ef2d456d2a5cf3c09b21e3b96908948aba0fa40819fb68f590
5
5
  SHA512:
6
- metadata.gz: bf2bf93e2ecb5183939f1ec2a899dd8ce1c30739ae0365e7d1ff8561f42d53ad5c5a09f3f8941de35651e37e0761ab91b30f65285f964fb6ef83d31becb4173f
7
- data.tar.gz: 5918f4fadb14c3b359a58006d05ac03631c4b191808288da7611806fc5d8060ef1f6eda0ff7e5593a6a8686ce48babfea1e0e68ac02903b60b39041fca60625d
6
+ metadata.gz: c01f59d3e28e132607892ca07d807478c01155032109a96689becdd18d17e758f09c884a0067fda08bc54a8a2cd8b3281cdbc30f84028dcd499f4139b762feba
7
+ data.tar.gz: d253a28b14648fc6d42165eb0c59bcea01d1370ee675efb36f1f225c1c5396340799abd89c83dcac3695d6fac057398aa31e7dec67e3aabc8b27e4c82cebc2ef
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- circleci-bundle-update-pr (1.11.3)
4
+ circleci-bundle-update-pr (1.12.0)
5
5
  compare_linker (>= 1.4.0)
6
6
  octokit
7
7
 
@@ -14,7 +14,7 @@ GEM
14
14
  httpclient
15
15
  octokit
16
16
  diff-lcs (1.3)
17
- faraday (0.15.2)
17
+ faraday (0.15.3)
18
18
  multipart-post (>= 1.2, < 3)
19
19
  httpclient (2.8.3)
20
20
  multipart-post (2.0.0)
@@ -51,4 +51,4 @@ DEPENDENCIES
51
51
  rspec (~> 3.7)
52
52
 
53
53
  BUNDLED WITH
54
- 1.16.4
54
+ 1.16.5
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # Circleci::Bundle::Update::Pr
2
2
 
3
- [![Build Status](https://img.shields.io/circleci/project/masutaka/circleci-bundle-update-pr/master.svg?style=flat-square)][circleci]
3
+ [![Build Status](https://img.shields.io/circleci/project/github/masutaka/circleci-bundle-update-pr/master.svg?logo=circieci&style=flat-square)][circleci]
4
4
  [![License](https://img.shields.io/github/license/masutaka/circleci-bundle-update-pr.svg?style=flat-square)][license]
5
- [![Gem](https://img.shields.io/gem/v/circleci-bundle-update-pr.svg?style=flat-square)][gem-link]
5
+ [![Gem](https://img.shields.io/gem/v/circleci-bundle-update-pr.svg?logo=ruby&style=flat-square)][gem-link]
6
6
 
7
7
  [circleci]: https://circleci.com/gh/masutaka/circleci-bundle-update-pr
8
8
  [license]: https://github.com/masutaka/circleci-bundle-update-pr/blob/master/LICENSE.txt
@@ -9,32 +9,72 @@ module Circleci
9
9
  def self.create_if_needed(git_username: nil, git_email: nil, git_branches: ["master"],
10
10
  assignees: nil, reviewers: nil, labels: nil)
11
11
  raise_if_env_unvalid!
12
- return unless need?(git_branches)
13
- repo_full_name = "#{ENV['CIRCLE_PROJECT_USERNAME']}/#{ENV['CIRCLE_PROJECT_REPONAME']}"
14
- now = Time.now
15
- branch = "bundle-update-#{now.strftime('%Y%m%d%H%M%S')}"
12
+
13
+ if skip?
14
+ puts 'Skip because it has already existed.'
15
+ return
16
+ end
17
+
18
+ unless need_to_commit?(git_branches)
19
+ puts 'No changes due to bundle update'
20
+ return
21
+ end
16
22
 
17
23
  git_username ||= client.user.login
18
24
  git_email ||= "#{git_username}@users.noreply.#{github_host}"
19
25
 
20
- create_branch(git_username, git_email, branch, repo_full_name)
21
- pull_request = create_pull_request(repo_full_name, branch, now)
22
- add_labels(repo_full_name, pull_request[:number], labels) if labels
23
- update_pull_request_body(repo_full_name, pull_request[:number])
24
- add_assignees(repo_full_name, pull_request[:number], assignees) if assignees
25
- request_review(repo_full_name, pull_request[:number], reviewers) if reviewers
26
+ branch = create_branch(git_username, git_email)
27
+ pull_request = create_pull_request(branch)
28
+ add_labels(pull_request[:number], labels) if labels
29
+ update_pull_request_body(pull_request[:number])
30
+ add_assignees(pull_request[:number], assignees) if assignees
31
+ request_review(pull_request[:number], reviewers) if reviewers
26
32
  end
27
33
 
28
- def self.need?(git_branches)
34
+ BRANCH_PREFIX = 'bundle-update-'.freeze
35
+ TITLE_PREFIX = 'bundle update at '.freeze
36
+
37
+ def self.raise_if_env_unvalid!
38
+ raise "$CIRCLE_PROJECT_USERNAME isn't set" unless ENV['CIRCLE_PROJECT_USERNAME']
39
+ raise "$CIRCLE_PROJECT_REPONAME isn't set" unless ENV['CIRCLE_PROJECT_REPONAME']
40
+ raise "$GITHUB_ACCESS_TOKEN isn't set" unless ENV['GITHUB_ACCESS_TOKEN']
41
+ if ENV['ENTERPRISE_OCTOKIT_ACCESS_TOKEN'] && !ENV['ENTERPRISE_OCTOKIT_API_ENDPOINT']
42
+ raise "$ENTERPRISE_OCTOKIT_API_ENDPOINT isn't set"
43
+ end
44
+ if !ENV['ENTERPRISE_OCTOKIT_ACCESS_TOKEN'] && ENV['ENTERPRISE_OCTOKIT_API_ENDPOINT']
45
+ raise "$ENTERPRISE_OCTOKIT_ACCESS_TOKEN isn't set"
46
+ end
47
+ end
48
+ private_class_method :raise_if_env_unvalid!
49
+
50
+ # Has 'bundle update PR' already existed?
51
+ #
52
+ # @return [Boolean]
53
+ def self.skip?
54
+ client.pull_requests(repo_full_name).find do |pr|
55
+ pr.title =~ /\A#{TITLE_PREFIX}/ && pr.head.ref =~ /\A#{BRANCH_PREFIX}\d+/
56
+ end != nil
57
+ end
58
+ private_class_method :skip?
59
+
60
+ # Does it need to commit due to bundle update?
61
+ #
62
+ # @param git_branches [Array<String>]
63
+ # @return [Boolean]
64
+ def self.need_to_commit?(git_branches)
29
65
  return false unless git_branches.include?(ENV['CIRCLE_BRANCH'])
30
66
  unless system("bundle update && bundle update --ruby")
31
67
  raise "Unable to execute `bundle update && bundle update --ruby`"
32
68
  end
33
69
  `git status -sb 2> /dev/null`.include?("Gemfile.lock")
34
70
  end
35
- private_class_method :need?
71
+ private_class_method :need_to_commit?
36
72
 
37
- def self.create_branch(git_username, git_email, branch, repo_full_name)
73
+ # Create remote branch for bundle update PR
74
+ #
75
+ # @return [String] remote branch name. e.g. bundle-update-20180929154455
76
+ def self.create_branch(git_username, git_email)
77
+ branch = "#{BRANCH_PREFIX}#{now.strftime('%Y%m%d%H%M%S')}"
38
78
  remote = "https://#{github_access_token}@#{github_host}/#{repo_full_name}"
39
79
  system("git remote add github-url-with-token #{remote}")
40
80
  system("git config user.name #{git_username}")
@@ -43,16 +83,26 @@ module Circleci
43
83
  system("git commit -m '$ bundle update && bundle update --ruby'")
44
84
  system("git branch -M #{branch}")
45
85
  system("git push -q github-url-with-token #{branch}")
86
+ branch
46
87
  end
47
88
  private_class_method :create_branch
48
89
 
49
- def self.create_pull_request(repo_full_name, branch, now)
50
- title = "bundle update at #{now.strftime('%Y-%m-%d %H:%M:%S %Z')}"
90
+ # Create bundle update PR
91
+ #
92
+ # @param branch [String] branch name
93
+ # @return [Sawyer::Resource] The newly created pull request
94
+ def self.create_pull_request(branch)
95
+ title = "#{TITLE_PREFIX}#{now.strftime('%Y-%m-%d %H:%M:%S %Z')}"
51
96
  client.create_pull_request(repo_full_name, ENV['CIRCLE_BRANCH'], branch, title)
52
97
  end
53
98
  private_class_method :create_pull_request
54
99
 
55
- def self.update_pull_request_body(repo_full_name, pr_number)
100
+ def self.add_labels(pr_number, labels)
101
+ client.add_labels_to_an_issue(repo_full_name, pr_number, labels)
102
+ end
103
+ private_class_method :add_labels
104
+
105
+ def self.update_pull_request_body(pr_number)
56
106
  ENV["OCTOKIT_ACCESS_TOKEN"] = ENV["GITHUB_ACCESS_TOKEN"]
57
107
  compare_linker = CompareLinker.new(repo_full_name, pr_number)
58
108
  compare_linker.formatter = CompareLinker::Formatter::Markdown.new
@@ -69,21 +119,16 @@ Powered by [circleci-bundle-update-pr](https://rubygems.org/gems/circleci-bundle
69
119
  end
70
120
  private_class_method :update_pull_request_body
71
121
 
72
- def self.add_assignees(repo_full_name, pr_number, assignees)
122
+ def self.add_assignees(pr_number, assignees)
73
123
  client.add_assignees(repo_full_name, pr_number, assignees)
74
124
  end
75
125
  private_class_method :add_assignees
76
126
 
77
- def self.request_review(repo_full_name, pr_number, reviewers)
127
+ def self.request_review(pr_number, reviewers)
78
128
  client.request_pull_request_review(repo_full_name, pr_number, reviewers)
79
129
  end
80
130
  private_class_method :request_review
81
131
 
82
- def self.add_labels(repo_full_name, pr_number, labels)
83
- client.add_labels_to_an_issue(repo_full_name, pr_number, labels)
84
- end
85
- private_class_method :add_labels
86
-
87
132
  def self.client
88
133
  if enterprise?
89
134
  Octokit::Client.new(access_token: ENV['ENTERPRISE_OCTOKIT_ACCESS_TOKEN'],
@@ -104,6 +149,14 @@ Powered by [circleci-bundle-update-pr](https://rubygems.org/gems/circleci-bundle
104
149
  end
105
150
  private_class_method :github_access_token
106
151
 
152
+ # Get repository full name
153
+ #
154
+ # @return [String] e.g. 'masutaka/circleci-bundle-update-pr'
155
+ def self.repo_full_name
156
+ @repo_full_name ||= "#{ENV['CIRCLE_PROJECT_USERNAME']}/#{ENV['CIRCLE_PROJECT_REPONAME']}"
157
+ end
158
+ private_class_method :repo_full_name
159
+
107
160
  def self.github_host
108
161
  # A format like https://github.com/masutaka/circleci-bundle-update-pr.git
109
162
  return $1 if ENV['CIRCLE_REPOSITORY_URL'] =~ %r{https://(.+?)/}
@@ -113,18 +166,13 @@ Powered by [circleci-bundle-update-pr](https://rubygems.org/gems/circleci-bundle
113
166
  end
114
167
  private_class_method :github_host
115
168
 
116
- def self.raise_if_env_unvalid!
117
- raise "$CIRCLE_PROJECT_USERNAME isn't set" unless ENV['CIRCLE_PROJECT_USERNAME']
118
- raise "$CIRCLE_PROJECT_REPONAME isn't set" unless ENV['CIRCLE_PROJECT_REPONAME']
119
- raise "$GITHUB_ACCESS_TOKEN isn't set" unless ENV['GITHUB_ACCESS_TOKEN']
120
- if ENV['ENTERPRISE_OCTOKIT_ACCESS_TOKEN'] && !ENV['ENTERPRISE_OCTOKIT_API_ENDPOINT']
121
- raise "$ENTERPRISE_OCTOKIT_API_ENDPOINT isn't set"
122
- end
123
- if !ENV['ENTERPRISE_OCTOKIT_ACCESS_TOKEN'] && ENV['ENTERPRISE_OCTOKIT_API_ENDPOINT']
124
- raise "$ENTERPRISE_OCTOKIT_ACCESS_TOKEN isn't set"
125
- end
169
+ # Get unified current time
170
+ #
171
+ # @return [Time]
172
+ def self.now
173
+ @now ||= Time.now
126
174
  end
127
- private_class_method :raise_if_env_unvalid!
175
+ private_class_method :now
128
176
  end
129
177
  end
130
178
  end
@@ -2,7 +2,7 @@ module Circleci
2
2
  module Bundle
3
3
  module Update
4
4
  module Pr
5
- VERSION = "1.11.3"
5
+ VERSION = "1.12.0"
6
6
  end
7
7
  end
8
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: circleci-bundle-update-pr
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.11.3
4
+ version: 1.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takashi Masuda
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-17 00:00:00.000000000 Z
11
+ date: 2018-09-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: octokit