discharger 0.1.4 → 0.2.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: d85acb3df98a5ced5599847e46e71ae447a884099366570e194aed83207b1667
4
- data.tar.gz: 4d65fedb9d04a8dae89e2e13cbbc779720098052a0f6c7f5a59583992f498b88
3
+ metadata.gz: 1c6a8e46dbab57a51adf0c6cc3334b47fcf2671c804b335c8919ebd618f965db
4
+ data.tar.gz: 7f5c5820619821993de7d54d673d0f6c67437b81d0b46fb3d7f2b8a301faa292
5
5
  SHA512:
6
- metadata.gz: 946a7e62f479869ca557183920392bc843fca20236a2e43ed85c1f37541dc0fb2fb5d2bd3cf19c246f3259503a87e0982d8cbe6bd6ffe4d091efb74139c861e3
7
- data.tar.gz: fb8c3ffa1d3d69da351e5564fe0e14f32290aa2676238b062cab6dc689786fccbcbb9fefddb5384a9931f532dadd853967ae3378680b14d53bd1eb32851f850b
6
+ metadata.gz: bff63aaf0204b05a18a737cd30c29530dbaa083b8727c3ee60e274ad94f47b902c1810ca13bcfecf535718ca45b9281d8fd0e65a4af1de164e1b2c56b2b38666
7
+ data.tar.gz: a5cde81b45b56eb3e204d58e53f2ce3aae68a5cdca11e44ff0c93bfc9425b065afade6e9fdbe3ef9d23c9a2ae9ec19a01e722b9733114d549836120965577638
data/README.md CHANGED
@@ -43,6 +43,11 @@ And then execute:
43
43
  $ bundle
44
44
  ```
45
45
 
46
+ Then run the install generator:
47
+ ```bash
48
+ $ rails generate discharger:install
49
+ ```
50
+
46
51
  Or install it yourself as:
47
52
  ```bash
48
53
  $ gem install discharger
data/Rakefile CHANGED
@@ -1,8 +1,7 @@
1
1
  require "bundler/setup"
2
2
 
3
3
  require "bundler/gem_tasks"
4
-
5
- task default: :test
4
+ require "rake/testtask"
6
5
 
7
6
  require "reissue/gem"
8
7
 
@@ -10,3 +9,11 @@ Reissue::Task.create :reissue do |task|
10
9
  task.version_file = "lib/discharger/version.rb"
11
10
  task.commit = true
12
11
  end
12
+
13
+ Rake::TestTask.new(:test) do |t|
14
+ t.libs << "test"
15
+ t.pattern = "test/**/*_test.rb"
16
+ t.verbose = false
17
+ end
18
+
19
+ task default: :test
@@ -1,8 +1,8 @@
1
1
  module Discharger
2
2
  class Railtie < ::Rails::Railtie
3
- config.before_configuration do
4
- if ENV["SLACK_API_TOKEN_RELEASES"].nil?
5
- raise "SLACK_API_TOKEN_RELEASES must be set in the environment"
3
+ config.after_initialize do |app|
4
+ if Rails.env.development? && Discharger.slack_token.nil?
5
+ raise "Your application Discharger.slack_token must be set in the environment"
6
6
  end
7
7
  end
8
8
  end
@@ -5,8 +5,8 @@ using Rainbow
5
5
 
6
6
  module Discharger
7
7
  class Task < Rake::TaskLib
8
- def self.create(name = :release, &block)
9
- task = new(name)
8
+ def self.create(name = :release, tasker: Rake::Task, &block)
9
+ task = new(name, tasker:)
10
10
  task.instance_eval(&block) if block
11
11
  Reissue::Task.create do |reissue|
12
12
  reissue.version_file = task.version_file
@@ -46,13 +46,15 @@ module Discharger
46
46
  attr_accessor :commit
47
47
  attr_accessor :commit_finalize
48
48
 
49
- def initialize(name = :release)
49
+ def initialize(name = :release, tasker: Rake::Task)
50
50
  @name = name
51
+ @tasker = tasker
51
52
  @working_branch = "develop"
52
53
  @staging_branch = "stage"
53
54
  @production_branch = "main"
54
55
  @description = "Release the current version to #{staging_branch}"
55
56
  end
57
+ private attr_reader :tasker
56
58
 
57
59
  # Run a multiple system commands and return true if all commands succeed
58
60
  # If any command fails, the method will return false and stop executing
@@ -71,18 +73,19 @@ module Discharger
71
73
  # ["echo", "Hello, World!"],
72
74
  # ["ls", "-l"]
73
75
  # )
74
- def syscall(*steps)
76
+ def syscall(*steps, output: $stdout, error: $stderr)
75
77
  success = false
76
78
  stdout, stderr, status = nil
77
- steps.each do |*cmd|
79
+ steps.each do |cmd|
78
80
  puts cmd.join(" ").bg(:green).black
79
81
  stdout, stderr, status = Open3.capture3(*cmd)
80
82
  if status.success?
81
- puts stdout
83
+ output.puts stdout
84
+ success = true
82
85
  else
83
- puts stderr
86
+ error.puts stderr
84
87
  success = false
85
- abort(stderr)
88
+ exit(status.exitstatus)
86
89
  end
87
90
  end
88
91
  if block_given?
@@ -100,8 +103,8 @@ module Discharger
100
103
  #
101
104
  # @param message [String] the message to echo
102
105
  # return [TrueClass]
103
- def sysecho(message)
104
- system "echo", message
106
+ def sysecho(message, output: $stdout)
107
+ output.puts message
105
108
  true
106
109
  end
107
110
 
@@ -134,17 +137,18 @@ module Discharger
134
137
  exit if input.chomp.match?(/^x/i)
135
138
 
136
139
  continue = syscall(
137
- "git checkout #{working_branch}",
138
- "git branch -D #{staging_branch} 2> /dev/null || true",
139
- "git branch -D #{production_branch} 2> /dev/null || true",
140
- "git fetch origin #{staging_branch}:#{staging_branch} #{production_branch}:#{production_branch}",
141
- "git checkout #{production_branch}",
142
- "git rebase #{staging_branch}",
143
- "git tag -a v#{current_version} -m 'Release #{current_version}'",
144
- "git push origin #{production_branch}; git push origin v#{current_version}"
140
+ ["git", "checkout", working_branch],
141
+ ["git", "branch", "-D #{staging_branch}", "2>/dev/null || true"],
142
+ ["git", "branch", "-D #{production_branch}", "2>/dev/null || true"],
143
+ ["git", "fetch", "origin", "#{staging_branch}:#{staging_branch}", "#{production_branch}:#{production_branch}"],
144
+ ["git", "checkout", production_branch],
145
+ ["git", "rebase", staging_branch],
146
+ ["git", "tag", "-a v#{current_version}", "-m 'Release #{current_version}'"],
147
+ ["git", "push", "origin", "#{production_branch}:#{production_branch}", "v#{current_version}:v#{current_version}"],
148
+ ["git", "push", "origin", "v#{current_version}"]
145
149
  ) do
146
- Rake::Task["#{name}:slack"].invoke("Released #{Qualify.name} #{current_version} to production.", release_message_channel, ":chipmunk:")
147
- syscall "git checkout #{working_branch}"
150
+ tasker["#{name}:slack"].invoke("Released #{Qualify.name} #{current_version} to production.", release_message_channel, ":chipmunk:")
151
+ syscall ["git", "checkout", working_branch]
148
152
  end
149
153
 
150
154
  abort "Release failed." unless continue
@@ -156,17 +160,16 @@ module Discharger
156
160
 
157
161
  MSG
158
162
 
159
- new_version_branch = "bump/begin-#{current_version.tr(".", "-")}"
160
-
161
- continue = syscall("git checkout -b #{new_version_branch}") do
162
- Rake::Task["reissue"].invoke
163
- end
163
+ tasker["reissue"].invoke
164
+ new_version = Object.const_get(version_constant)
165
+ new_version_branch = "bump/begin-#{new_version.tr(".", "-")}"
166
+ continue = syscall(["git", "checkout", "-b #{new_version_branch}"])
164
167
 
165
168
  abort "Bump failed." unless continue
166
169
 
167
170
  pr_url = "#{pull_request_url}/compare/#{working_branch}...#{new_version_branch}?expand=1&title=Begin%20#{current_version}"
168
171
 
169
- syscall("git push origin #{new_version_branch} --force") do
172
+ syscall(["git", "push", "origin", new_version_branch, "--force"]) do
170
173
  sysecho <<~MSG
171
174
  Branch #{new_version_branch} created.
172
175
 
@@ -176,7 +179,7 @@ module Discharger
176
179
  Opening PR: #{pr_url}
177
180
  MSG
178
181
  end.then do |success|
179
- syscall "open #{pr_url}" if success
182
+ syscall ["open", pr_url] if success
180
183
  end
181
184
  end
182
185
 
@@ -184,14 +187,14 @@ module Discharger
184
187
  desc description
185
188
  task build: :environment do
186
189
  syscall(
187
- "git fetch origin #{working_branch}",
188
- "git checkout #{working_branch}",
189
- "git branch -D #{staging_branch} 2> /dev/null || true",
190
- "git checkout -b #{staging_branch}",
191
- "git push origin #{staging_branch} --force"
190
+ ["git", "fetch", "origin", working_branch],
191
+ ["git", "checkout", working_branch],
192
+ ["git", "branch", "-D #{staging_branch}", "2> /dev/null || true"],
193
+ ["git", "checkout", "-b #{staging_branch}"],
194
+ ["git", "push", "origin", staging_branch, "--force"]
192
195
  ) do
193
- Rake::Task["#{name}:slack"].invoke("Building #{app_name} #{commit_identifier.call} on #{staging_branch}.", release_message_channel)
194
- syscall "git checkout #{working_branch}"
196
+ tasker["#{name}:slack"].invoke("Building #{app_name} #{commit_identifier.call} on #{staging_branch}.", release_message_channel)
197
+ syscall ["git", "checkout", working_branch]
195
198
  end
196
199
  end
197
200
 
@@ -225,9 +228,9 @@ module Discharger
225
228
  current_version = Object.const_get(version_constant)
226
229
  finish_branch = "bump/finish-#{current_version.tr(".", "-")}"
227
230
 
228
- syscall "git fetch origin #{working_branch}",
229
- "git checkout #{working_branch}",
230
- "git checkout -b #{finish_branch}"
231
+ syscall ["git", "fetch origin #{working_branch}"],
232
+ ["git", "checkout", working_branch],
233
+ ["git", "checkout", "-b #{finish_branch}"]
231
234
 
232
235
  sysecho <<~MSG
233
236
  Branch #{finish_branch} created.
@@ -241,7 +244,7 @@ module Discharger
241
244
  input = $stdin.gets
242
245
  exit if input.chomp.match?(/^x/i)
243
246
 
244
- Rake::Task["reissue:finalize"].invoke
247
+ tasker["reissue:finalize"].invoke
245
248
 
246
249
  params = {
247
250
  expand: 1,
@@ -253,7 +256,7 @@ module Discharger
253
256
 
254
257
  pr_url = "#{pull_request_url}/compare/#{finish_branch}?#{params.to_query}"
255
258
 
256
- continue = syscall "git push origin #{finish_branch} --force" do
259
+ continue = syscall ["git", "push", "origin", finish_branch, "--force"] do
257
260
  sysecho <<~MSG
258
261
  Branch #{finish_branch} created.
259
262
  Open a PR to #{working_branch} to finalize the release.
@@ -266,8 +269,8 @@ module Discharger
266
269
  MSG
267
270
  end
268
271
  if continue
269
- syscall "git checkout #{working_branch}",
270
- "open #{pr_url}"
272
+ syscall ["git", "checkout", working_branch],
273
+ ["open", pr_url]
271
274
  end
272
275
  end
273
276
 
@@ -282,7 +285,7 @@ module Discharger
282
285
  bin/rails #{name}:build
283
286
  DESC
284
287
  task stage: [:environment] do
285
- Rake::Task["build"].invoke
288
+ tasker["build"].invoke
286
289
  current_version = Object.const_get(version_constant)
287
290
 
288
291
  params = {
@@ -303,7 +306,7 @@ module Discharger
303
306
 
304
307
  Once the PR is **approved**, run 'rake release' to release the version.
305
308
  MSG
306
- syscall "open #{pr_url}"
309
+ syscall ["open", pr_url]
307
310
  end
308
311
  end
309
312
  end
@@ -1,3 +1,3 @@
1
1
  module Discharger
2
- VERSION = "0.1.4"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/discharger.rb CHANGED
@@ -2,4 +2,11 @@ require "discharger/version"
2
2
  require "discharger/railtie"
3
3
 
4
4
  module Discharger
5
+ class << self
6
+ attr_accessor :slack_token
7
+
8
+ def configure
9
+ yield self
10
+ end
11
+ end
5
12
  end
@@ -0,0 +1,11 @@
1
+ module Discharger
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ source_root File.expand_path("templates", __dir__)
5
+
6
+ def copy_initializer
7
+ template "discharger_initializer.rb", "config/initializers/discharger.rb"
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,6 @@
1
+ if defined?(Discharger)
2
+ Discharger.configure do |config|
3
+ # Configure your Discharger settings here
4
+ # config.slack_token = 'your_slack_token'
5
+ end
6
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: discharger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jim Gay
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-09-05 00:00:00.000000000 Z
11
+ date: 2024-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: open3
@@ -94,6 +94,8 @@ files:
94
94
  - lib/discharger/railtie.rb
95
95
  - lib/discharger/task.rb
96
96
  - lib/discharger/version.rb
97
+ - lib/generators/discharger/install/install_generator.rb
98
+ - lib/generators/discharger/install/templates/discharger_initializer.rb
97
99
  homepage: https://github.com/SOFware/discharger
98
100
  licenses: []
99
101
  metadata: