groundskeeper-bitcore 0.10.0 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 718393692dd1c01682868a2eae64794c25f11e6189b516f88f568a0b1f173de1
4
- data.tar.gz: 594af462795ef3b09d9610db8fbe5788096129e2c3d5676ced82174b19935aa7
3
+ metadata.gz: e55ad6626fe5d3681b91cd93237f9bdc1dc4c7cf317f0430b1ac73abeeac54ed
4
+ data.tar.gz: c6de6f01d01ac004f70304612cd077e97cb6e536c4ae80be335d022dffd8cfe3
5
5
  SHA512:
6
- metadata.gz: 074152a71588c99a0a30ae529e7f87955636fa20acd2eb7d988153784bb794a5d51af2d899cb2838d5069adea56f47c3bb3944584f331f1f083a3da43731b683
7
- data.tar.gz: 91740b44c7bef4ea9b0358339e12bfa3d05aec61199ae04c41d359435dd918eb74a9f67714f27489fcc2730e15f2cd3b275f446e0a25f3be20b1095b2efe030c
6
+ metadata.gz: 1f63088adef14df37d86eeb22b7ae20ae7503092c778abd9692ee8f871473728135483eb48606cf0f69b3803b7cf73aad5676131a3f17b67be5c1bfa2ac6e7c7
7
+ data.tar.gz: e51ff74f8829aaac4b4503f4b31c7eef2114c242042d476be65df128dfd98c6afaac702f9604bb07c4a889f76ff6eea20b2bd8788de14373062e19c4444b07ad
data/README.md CHANGED
@@ -23,6 +23,12 @@ export JIRA_API_TOKEN="my-token"
23
23
  export JIRA_SITE="https://cbit123.atlassian.net"
24
24
  ```
25
25
 
26
+ For integration with Bitbucket, [create an app password](https://confluence.atlassian.com/bitbucket/app-passwords-828781300.html) with permissions of `Pull requests: Read Write`:
27
+ ```bash
28
+ export BITBUCKET_USERNAME="bitbucket_username"
29
+ export BITBUCKET_APP_PASSWORD="app_password"
30
+ ```
31
+
26
32
  For integration with Sentry, find or create your auth token
27
33
  [from here](https://sentry.io/settings/account/api/auth-tokens/) with the scopes `event:admin, event:read, member:read, org:read, project:read, project:releases, team:read`:
28
34
 
@@ -103,7 +109,7 @@ The gem is available as open source under the terms of the
103
109
 
104
110
  ## Code of Conduct
105
111
 
106
- Everyone interacting in the Groundskeeper projects codebases, issue trackers,
112
+ Everyone interacting in the Groundskeeper project's codebases, issue trackers,
107
113
  chat rooms and mailing lists is expected to follow the
108
114
  [code of conduct](https://github.com/NU-CBITS/groundskeeper/blob/master/CODE_OF_CONDUCT.md).
109
115
 
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json"
4
+
5
+ module Groundskeeper
6
+ # Bitbucket API wrapper
7
+ class Bitbucket
8
+ # Bitbucket API Error
9
+ class UnableToCreatePR < StandardError
10
+ def initialize(response)
11
+ super
12
+ end
13
+ end
14
+
15
+ COMMAND = "curl"
16
+ BITBUCKET_USERNAME = "BITBUCKET_USERNAME"
17
+ BITBUCKET_APP_PASSWORD = "BITBUCKET_APP_PASSWORD"
18
+ URL = "https://api.bitbucket.org/2.0/repositories/"\
19
+ "isgmh-radd/%<repository>s/pullrequests"
20
+ CREATE_PR = <<~REQUEST.split.join(" ")
21
+ #{URL} -u %<username>s:%<password>s
22
+ --request POST
23
+ --header 'Content-Type: application/json'
24
+ --data
25
+ '{"title": "%<branch_name>s", "source": {"branch": {"name": "%<branch_name>s"}}}'
26
+ REQUEST
27
+
28
+ attr_reader :bitbucket
29
+
30
+ def self.build
31
+ new Executable.new(COMMAND)
32
+ end
33
+
34
+ def initialize(bitbucket)
35
+ @bitbucket = bitbucket
36
+ end
37
+
38
+ # rubocop:disable Metrics/MethodLength
39
+ def create_pr(repository:, branch_name:)
40
+ response = bitbucket.execute(format(CREATE_PR,
41
+ username: ENV[BITBUCKET_USERNAME],
42
+ password: ENV[BITBUCKET_APP_PASSWORD],
43
+ repository: repository,
44
+ branch_name: branch_name))
45
+ pr_url = nil
46
+ begin
47
+ pr_url = JSON.parse(response)["links"]["html"]["href"]
48
+ rescue StandardError
49
+ raise UnableToCreatePR, response
50
+ end
51
+
52
+ open_url(pr_url)
53
+ end
54
+ # rubocop:enable Metrics/MethodLength
55
+
56
+ def credentials?
57
+ ENV[BITBUCKET_USERNAME].present? && ENV[BITBUCKET_APP_PASSWORD].present?
58
+ end
59
+
60
+ private
61
+
62
+ # :nocov:
63
+ def open_url(url)
64
+ `open #{url}`
65
+ end
66
+ # :nocov:
67
+ end
68
+ end
@@ -26,6 +26,7 @@ module Groundskeeper
26
26
  project = Project.build(repository.name)
27
27
  deploy_url = "https://#{project.full_dns(stage)}"
28
28
  website = Website.new(deploy_url)
29
+ bitbucket = Bitbucket.build
29
30
  sentry = Sentry.build(
30
31
  project_name: project.sentry_project,
31
32
  version_prefix: repository.name
@@ -36,6 +37,7 @@ module Groundskeeper
36
37
  new(
37
38
  changelog: Changelog.build,
38
39
  console: console,
40
+ bitbucket: bitbucket,
39
41
  git: Git.build,
40
42
  jira: Jira.build(project.jira_prefix),
41
43
  project: project,
@@ -58,6 +60,7 @@ module Groundskeeper
58
60
  def initialize(
59
61
  changelog: nil,
60
62
  console:,
63
+ bitbucket: nil,
61
64
  git: nil,
62
65
  jira: nil,
63
66
  project: nil,
@@ -71,6 +74,7 @@ module Groundskeeper
71
74
  )
72
75
  @changelog = changelog
73
76
  @console = console
77
+ @bitbucket = bitbucket
74
78
  @git = git
75
79
  @jira = jira
76
80
  @project = project
@@ -107,11 +111,13 @@ module Groundskeeper
107
111
  end
108
112
  # rubocop:enable Metrics/AbcSize
109
113
 
110
- # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
114
+ # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity,
115
+ # rubocop:disable Metrics/PerceivedComplexity
111
116
  def release(options = {})
112
117
  is_initial_release = !version_file.exists?
113
118
 
114
119
  return missing_jira_credentials unless jira.credentials?
120
+ return missing_bitbucket_credentials unless bitbucket.credentials?
115
121
  return unless check_groundskeeper_version
116
122
  return unrecognized_version unless version_file.rails?
117
123
 
@@ -128,9 +134,10 @@ module Groundskeeper
128
134
  create_jira_version
129
135
  push
130
136
  add_version_to_jira_issues unless is_initial_release
137
+ create_pr
131
138
  end
132
139
  # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity
133
- # rubocop:enable Metrics/MethodLength
140
+ # rubocop:enable Metrics/MethodLength, Metrics/PerceivedComplexity
134
141
 
135
142
  # :nocov:
136
143
  def predeploy(options = {})
@@ -171,7 +178,7 @@ module Groundskeeper
171
178
  private
172
179
 
173
180
  # collaborators
174
- attr_reader :changelog, :console, :git, :jira, :project,
181
+ attr_reader :bitbucket, :changelog, :console, :git, :jira, :project,
175
182
  :repository, :rubygems, :sentry, :slack, :ssh, :version_file,
176
183
  :website
177
184
  # state
@@ -277,6 +284,12 @@ module Groundskeeper
277
284
  console.say("# added version to Jira issues #{issue_ids}", :green)
278
285
  end
279
286
 
287
+ def create_pr
288
+ bitbucket.create_pr(
289
+ repository: repository.name, branch_name: new_branch_name
290
+ )
291
+ end
292
+
280
293
  def next_jira_version_name
281
294
  "#{repository.name} #{next_version}"
282
295
  end
@@ -307,6 +320,13 @@ module Groundskeeper
307
320
  )
308
321
  end
309
322
 
323
+ def missing_bitbucket_credentials
324
+ console.say(
325
+ "Please configure your Bitbucket environment variables.",
326
+ :red
327
+ )
328
+ end
329
+
310
330
  def missing_jira_credentials
311
331
  console.say(
312
332
  "Please configure your Jira environment variables.",
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Groundskeeper
4
- VERSION = "0.10.0"
4
+ VERSION = "0.11.0"
5
5
  end
data/lib/groundskeeper.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "groundskeeper/application"
4
+ require "groundskeeper/bitbucket"
4
5
  require "groundskeeper/changelog"
5
6
  require "groundskeeper/commands"
6
7
  require "groundskeeper/document"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: groundskeeper-bitcore
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - BIT Core
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain:
11
11
  - certs/ericcf.pem
12
- date: 2019-11-20 00:00:00.000000000 Z
12
+ date: 2019-12-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: jira-ruby
@@ -184,6 +184,7 @@ files:
184
184
  - groundskeeper.gemspec
185
185
  - lib/groundskeeper.rb
186
186
  - lib/groundskeeper/application.rb
187
+ - lib/groundskeeper/bitbucket.rb
187
188
  - lib/groundskeeper/changelog.rb
188
189
  - lib/groundskeeper/commands.rb
189
190
  - lib/groundskeeper/document.rb