groundskeeper-bitcore 0.2.7 → 0.3.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
  SHA1:
3
- metadata.gz: 4203efc4a4b827dbe8af6af07d0e4cc356a224c1
4
- data.tar.gz: 0a989a82b8d1840d2e2b83c66570ecf7cb41788b
3
+ metadata.gz: 5cf64d2506cf32911c7e1ab501f47c1252448101
4
+ data.tar.gz: 0f549714b3219739a4bec6d42742ebbf57a09159
5
5
  SHA512:
6
- metadata.gz: 75133cb91f0ab49bf284a0fef6c4588b8112f9d8b5ed5fe743d2a26811dcae93a2132c8c64e1003524b9be89cfcc44eaa9e144f90fb2bd01deedafe8075807fe
7
- data.tar.gz: d25f98d3b312eb974ae842577a6dd37f922c99ff3eb82c9ad102de672b45aa73d9bef5da8aa2b601a51a5eea0690c480b6927f408636ef17efed4841dc76cbca
6
+ metadata.gz: ddc494c4bf9437239d7a4fe37bea74bbf36df700faa6ec0bd6f418d9b9ec7837b391b21e565e73749a95733784d990cca96f104339a7523c428f880cbccaed04
7
+ data.tar.gz: c43ce1f114abd12e195ba268c155e041b949813a920c5d7e94b799fdfaa497bdc73c31d38ea0e8f7779b79954f63e8560b1d13ad2e7b3dc67fb56587b5dd3b2d
data/README.md CHANGED
@@ -23,12 +23,24 @@ export JIRA_PASSWORD="my-password"
23
23
  export JIRA_SITE="https://cbit123.atlassian.net"
24
24
  ```
25
25
 
26
- Additionally, you need to add a GitHub API Token with `repo` scope to your `bash_profile`. You can create one [here](https://github.com/settings/tokens) if you don't have one already.
26
+ You also need to add a GitHub API Token with `repo` scope to your `bash_profile`.
27
+ You can create one [here](https://github.com/settings/tokens) if you don't have
28
+ one already.
27
29
 
28
30
  ```bash
29
31
  export GITHUB_API_TOKEN="my-github-api-token"
30
32
  ```
31
33
 
34
+ For integration with Sentry, find and add your auth token
35
+ [from here](https://sentry.io/settings/account/api/auth-tokens/):
36
+
37
+ ```bash
38
+ export SENTRY_AUTH_TOKEN="auth-token"
39
+ export SENTRY_ORG=cbits
40
+ ```
41
+
42
+ Then you will need to [install/update the Sentry CLI](https://docs.sentry.io/learn/cli/installation/).
43
+
32
44
  Jira integration also depends on a repository that contains metadata for
33
45
  projects. Clone it as follows:
34
46
 
@@ -41,4 +41,5 @@ Gem::Specification.new do |spec|
41
41
  spec.add_development_dependency "minitest", "~> 5.0"
42
42
  spec.add_development_dependency "rubocop", "~> 0.49.1"
43
43
  spec.add_development_dependency "simplecov", "~> 0.14"
44
+ spec.add_development_dependency "byebug"
44
45
  end
data/lib/groundskeeper.rb CHANGED
@@ -12,6 +12,7 @@ require "groundskeeper/rails_version"
12
12
  require "groundskeeper/repository"
13
13
  require "groundskeeper/rubygems"
14
14
  require "groundskeeper/semantic_version"
15
+ require "groundskeeper/sentry"
15
16
  require "groundskeeper/version"
16
17
  require "groundskeeper/website"
17
18
 
@@ -18,14 +18,20 @@ module Groundskeeper
18
18
  DEFAULT_STAGE = STAGING
19
19
  TAG = "tag"
20
20
 
21
- # rubocop:disable Metrics/MethodLength
21
+ # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
22
22
  def self.build(console)
23
23
  repository = Repository.new
24
24
  project = Project.build(repository.name)
25
+ deploy_url = "https://#{project.full_dns(stage)}"
26
+ website = Website.new(deploy_url)
25
27
  git_hub = GitHub.build(
26
28
  username: project.source_control_username,
27
29
  repository_name: repository.name
28
30
  )
31
+ sentry = Sentry.build(
32
+ project_name: project.sentry_project,
33
+ version_prefix: repository.name
34
+ )
29
35
 
30
36
  new(
31
37
  changelog: Changelog.build,
@@ -36,10 +42,16 @@ module Groundskeeper
36
42
  project: project,
37
43
  repository: repository,
38
44
  rubygems: Rubygems,
39
- version_file: RailsVersion.new
45
+ sentry: sentry,
46
+ version_file: RailsVersion.new,
47
+ website: website
40
48
  )
41
49
  end
42
- # rubocop:enable Metrics/MethodLength
50
+ # rubocop:enable Metrics/AbcSize,Metrics/MethodLength
51
+
52
+ def self.stage
53
+ ENV[STAGE] == PRODUCTION ? PRODUCTION : DEFAULT_STAGE
54
+ end
43
55
 
44
56
  # rubocop:disable Metrics/MethodLength,Metrics/ParameterLists
45
57
  def initialize(
@@ -51,6 +63,8 @@ module Groundskeeper
51
63
  project: nil,
52
64
  repository: nil,
53
65
  rubygems: nil,
66
+ sentry: nil,
67
+ website: nil,
54
68
  version_file:
55
69
  )
56
70
  @changelog = changelog
@@ -61,17 +75,19 @@ module Groundskeeper
61
75
  @project = project
62
76
  @repository = repository
63
77
  @rubygems = rubygems
78
+ @sentry = sentry
79
+ @website = website
64
80
  @version_file = version_file
65
81
  @did_checkout_branch = false
66
82
  @did_push_to_remote = false
67
83
  end
68
84
  # rubocop:enable Metrics/MethodLength,Metrics/ParameterLists
69
85
 
70
- # rubocop:disable Metrics/MethodLength
86
+ # rubocop:disable Metrics/MethodLength,Metrics/AbcSize
71
87
  def info
72
88
  return unrecognized_version unless version_file.exists?
73
-
74
89
  return unless check_groundskeeper_version
90
+ pull_project_details
75
91
 
76
92
  announce_latest_tag
77
93
  console.say(
@@ -84,12 +100,14 @@ module Groundskeeper
84
100
  :yellow
85
101
  )
86
102
  end
103
+ # rubocop:enable Metrics/AbcSize
87
104
 
88
105
  # rubocop:disable Metrics/AbcSize
89
106
  def release
90
107
  return unrecognized_version unless version_file.exists?
91
108
  return missing_jira_credentials unless jira.credentials?
92
109
  return unless check_groundskeeper_version
110
+ pull_project_details
93
111
 
94
112
  summarize_recent_commits
95
113
  ask_next_version
@@ -108,27 +126,32 @@ module Groundskeeper
108
126
  def predeploy(options)
109
127
  return unrecognized_version unless version_file.exists?
110
128
  return unless check_groundskeeper_version
129
+ pull_project_details
111
130
 
112
131
  mina "predeploy", options
113
132
  end
114
133
 
134
+ # rubocop:disable Metrics/AbcSize
115
135
  def deploy(options)
116
136
  return unrecognized_version unless version_file.exists?
117
137
  return missing_jira_credentials unless jira.credentials?
118
138
  return unless check_groundskeeper_version
139
+ pull_project_details
119
140
 
120
141
  ENV["whenever"] = "1" if project.uses_whenever?
121
142
 
122
143
  mina "deploy", options
123
144
  console.say("waiting for deployed application to restart...", :yellow)
124
145
  update_deployed_issues
146
+ add_version_to_sentry
125
147
  end
148
+ # rubocop:enable Metrics/AbcSize
126
149
 
127
150
  private
128
151
 
129
152
  # collaborators
130
153
  attr_reader :changelog, :console, :git, :git_hub, :jira, :project,
131
- :repository, :rubygems, :version_file
154
+ :repository, :rubygems, :sentry, :version_file, :website
132
155
  # state
133
156
  attr_reader :next_version, :recent_commits, :did_checkout_branch,
134
157
  :did_push_to_remote
@@ -141,6 +164,12 @@ module Groundskeeper
141
164
  run_mina cmd
142
165
  end
143
166
 
167
+ def pull_project_details
168
+ console.say("Updating ~/.project_details from "\
169
+ "#{git.remote_url('.project_details')}")
170
+ git.pull(".project_details")
171
+ end
172
+
144
173
  def check_groundskeeper_version
145
174
  console.say("Groundskeeper version #{Groundskeeper::VERSION}\n\n", :bold)
146
175
  latest_version = rubygems.latest_groundskeeper_version
@@ -239,6 +268,12 @@ module Groundskeeper
239
268
  "#{repository.name} #{next_version}"
240
269
  end
241
270
 
271
+ def add_version_to_sentry
272
+ sentry.create_release(ENV[TAG])
273
+ sentry.associate_commits(ENV[TAG])
274
+ console.say("# added version to Sentry", :green)
275
+ end
276
+
242
277
  def unrecognized_version
243
278
  console.say(
244
279
  "Unable to find version file, is this a Rails application?",
@@ -275,8 +310,7 @@ module Groundskeeper
275
310
  end
276
311
 
277
312
  def update_deployed_issues
278
- deployed_url = "https://#{project.full_dns(stage)}"
279
- deployed_version = Website.new(deployed_url).version
313
+ deployed_version = website.version
280
314
 
281
315
  if deployed_version == ENV[TAG]
282
316
  console.say("# deployment successful", :green)
@@ -286,14 +320,11 @@ module Groundskeeper
286
320
  end
287
321
  end
288
322
 
289
- def stage
290
- ENV[STAGE] == PRODUCTION ? PRODUCTION : DEFAULT_STAGE
291
- end
292
-
293
323
  def transition_remote_issues(version)
294
324
  version_name = "#{repository.name} #{version}"
295
325
  deployed_issues = jira.fetch_issues_by_fix_version(version_name)
296
- action = stage == PRODUCTION ? Jira::DELIVER : Jira::DEPLOY_TO_STAGING
326
+ action =
327
+ self.class.stage == PRODUCTION ? Jira::DELIVER : Jira::DEPLOY_TO_STAGING
297
328
  console.say(
298
329
  "transitioning deployed issues in Jira: " \
299
330
  "#{action} #{deployed_issues.join(', ')}",
@@ -18,6 +18,8 @@ module Groundskeeper
18
18
  COMMIT = "commit -m \"%s\""
19
19
  ADD_TAG = "tag %s"
20
20
  PUSH_HEAD_WITH_TAGS = "push origin head --tags"
21
+ PULL = "-C #{Dir.home}/%s pull"
22
+ REMOTE_URL = "-C #{Dir.home}/%s config --get remote.origin.url"
21
23
 
22
24
  attr_reader :git
23
25
 
@@ -87,5 +89,13 @@ module Groundskeeper
87
89
  def push_with_tags
88
90
  git.execute(PUSH_HEAD_WITH_TAGS)
89
91
  end
92
+
93
+ def pull(name)
94
+ git.execute(format(PULL, name))
95
+ end
96
+
97
+ def remote_url(name)
98
+ git.execute(format(REMOTE_URL, name))
99
+ end
90
100
  end
91
101
  end
@@ -18,6 +18,7 @@ module Groundskeeper
18
18
  DB_ENV_VARIABLES_KEY = "db_env_variables"
19
19
  SENTRY_DSN_KEY = "sentry_dsn"
20
20
  SENTRY_PUBLIC_DSN_KEY = "sentry_public_dsn"
21
+ SENTRY_PROJECT_KEY = "sentry_project"
21
22
  SSL_CERTIFICATE_FILE_KEY = "SSLCertificateFile"
22
23
  SSL_CERTIFICATE_CHAIN_FILE_KEY = "SSLCertificateChainFile"
23
24
  SSL_CERTIFICATE_KEY_FILE_KEY = "SSLCertificateKeyFile"
@@ -76,6 +77,10 @@ module Groundskeeper
76
77
  details[SENTRY_PUBLIC_DSN_KEY] || ""
77
78
  end
78
79
 
80
+ def sentry_project
81
+ details[SENTRY_PROJECT_KEY] || ""
82
+ end
83
+
79
84
  def ssl_certificate_file(stage)
80
85
  details.dig(SSL_CERTIFICATE_FILE_KEY, stage.to_s) || ""
81
86
  end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Groundskeeper
4
+ # Wraps Sentry CLI executable.
5
+ class Sentry
6
+ COMMAND = "sentry-cli"
7
+ # sentry-cli arguments
8
+ RELEASE = "releases new -p %<project>s \"%<version>s\""
9
+ ASSOCIATE = "releases set-commits --auto \"%<version>s\""
10
+
11
+ attr_reader :sentry, :project_name, :version_prefix
12
+
13
+ # Wraps the "sentry-cli" shell command.
14
+ class Executable
15
+ def execute(arguments)
16
+ `#{COMMAND} #{arguments}`
17
+ end
18
+ end
19
+
20
+ def self.build(project_name:, version_prefix:)
21
+ new(
22
+ sentry: Executable.new,
23
+ project_name: project_name,
24
+ version_prefix: version_prefix
25
+ )
26
+ end
27
+
28
+ def initialize(sentry:, project_name:, version_prefix:)
29
+ @sentry = sentry
30
+ @project_name = project_name
31
+ @version_prefix = version_prefix
32
+ end
33
+
34
+ # Notify Sentry about release
35
+ def create_release(version)
36
+ name = "#{version_prefix} #{version}"
37
+
38
+ sentry.execute(format(RELEASE, project: project_name, version: name))
39
+ end
40
+
41
+ # Associate commits with the release
42
+ def associate_commits(version)
43
+ name = "#{version_prefix} #{version}"
44
+
45
+ sentry.execute(format(ASSOCIATE, version: name))
46
+ end
47
+ end
48
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Groundskeeper
4
- VERSION = "0.2.7"
4
+ VERSION = "0.3.0"
5
5
  end
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.2.7
4
+ version: 0.3.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: 2018-10-23 00:00:00.000000000 Z
12
+ date: 2018-11-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: jira-ruby
@@ -123,6 +123,20 @@ dependencies:
123
123
  - - "~>"
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0.14'
126
+ - !ruby/object:Gem::Dependency
127
+ name: byebug
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
126
140
  description:
127
141
  email:
128
142
  - ericcf@northwestern.edu
@@ -167,6 +181,7 @@ files:
167
181
  - lib/groundskeeper/repository.rb
168
182
  - lib/groundskeeper/rubygems.rb
169
183
  - lib/groundskeeper/semantic_version.rb
184
+ - lib/groundskeeper/sentry.rb
170
185
  - lib/groundskeeper/version.rb
171
186
  - lib/groundskeeper/website.rb
172
187
  - servers.yml