create_github_release 1.0.0 → 1.2.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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +4 -1
  3. data/.solargraph.yml +23 -0
  4. data/.vscode/launch.json +19 -0
  5. data/.yardopts +1 -0
  6. data/CHANGELOG.md +26 -0
  7. data/README.md +165 -47
  8. data/Rakefile +7 -4
  9. data/create_github_release.gemspec +7 -4
  10. data/exe/create-github-release +5 -1
  11. data/lib/create_github_release/assertion_base.rb +0 -2
  12. data/lib/create_github_release/assertions/bundle_is_up_to_date.rb +1 -1
  13. data/lib/create_github_release/assertions/gh_authenticated.rb +1 -1
  14. data/lib/create_github_release/assertions/gh_command_exists.rb +1 -1
  15. data/lib/create_github_release/assertions/git_command_exists.rb +1 -1
  16. data/lib/create_github_release/assertions/in_git_repo.rb +1 -1
  17. data/lib/create_github_release/assertions/in_repo_root_directory.rb +1 -1
  18. data/lib/create_github_release/assertions/local_and_remote_on_same_commit.rb +1 -1
  19. data/lib/create_github_release/assertions/local_release_branch_does_not_exist.rb +1 -1
  20. data/lib/create_github_release/assertions/no_staged_changes.rb +1 -1
  21. data/lib/create_github_release/assertions/no_uncommitted_changes.rb +1 -1
  22. data/lib/create_github_release/assertions/on_default_branch.rb +1 -1
  23. data/lib/create_github_release/assertions/remote_release_branch_does_not_exist.rb +1 -1
  24. data/lib/create_github_release/assertions/remote_release_tag_does_not_exist.rb +1 -1
  25. data/lib/create_github_release/command_line/options.rb +151 -0
  26. data/lib/create_github_release/command_line/parser.rb +253 -0
  27. data/lib/create_github_release/command_line/validations.rb +293 -0
  28. data/lib/create_github_release/command_line/validator.rb +93 -0
  29. data/lib/create_github_release/command_line.rb +43 -0
  30. data/lib/create_github_release/project.rb +136 -76
  31. data/lib/create_github_release/release_assertions.rb +2 -1
  32. data/lib/create_github_release/release_tasks.rb +2 -1
  33. data/lib/create_github_release/tasks/commit_release.rb +1 -1
  34. data/lib/create_github_release/tasks/create_github_release.rb +1 -1
  35. data/lib/create_github_release/tasks/create_release_branch.rb +1 -1
  36. data/lib/create_github_release/tasks/create_release_pull_request.rb +1 -1
  37. data/lib/create_github_release/tasks/create_release_tag.rb +1 -1
  38. data/lib/create_github_release/tasks/push_release.rb +1 -1
  39. data/lib/create_github_release/tasks/update_changelog.rb +1 -1
  40. data/lib/create_github_release/tasks/update_version.rb +13 -14
  41. data/lib/create_github_release/version.rb +1 -1
  42. data/lib/create_github_release.rb +1 -2
  43. metadata +31 -25
  44. data/lib/create_github_release/command_line_options.rb +0 -367
  45. data/lib/create_github_release/command_line_parser.rb +0 -225
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'bump'
3
+ require 'semverify'
4
4
  require 'uri'
5
5
 
6
6
  module CreateGithubRelease
@@ -26,18 +26,18 @@ module CreateGithubRelease
26
26
  # used in the block passed to the initializer.
27
27
  #
28
28
  # @example calling `.new` without a block
29
- # options = CreateGithubRelease::CommandLineOptions.new { |o| o.release_type = 'minor' }
29
+ # options = CreateGithubRelease::CommandLine::Options.new { |o| o.release_type = 'minor' }
30
30
  # project = CreateGithubRelease::Project.new(options)
31
31
  # options.release_type = 'minor'
32
32
  #
33
33
  # @example calling `.new` with a block
34
- # options = CreateGithubRelease::CommandLineOptions.new { |o| o.release_type = 'minor' }
34
+ # options = CreateGithubRelease::CommandLine::Options.new { |o| o.release_type = 'minor' }
35
35
  # project = CreateGithubRelease::Project.new(options) do |p|
36
36
  # p.release_type = 'major'
37
37
  # end
38
38
  # options.release_type = 'major'
39
39
  #
40
- # @param options [CreateGithubRelease::CommandLineOptions] the options to initialize the instance with
40
+ # @param options [CreateGithubRelease::CommandLine::Options] the options to initialize the instance with
41
41
  #
42
42
  # @yield [self] an initialization block
43
43
  # @yieldparam self [CreateGithubRelease::Project] the instance being initialized aka `self`
@@ -55,20 +55,21 @@ module CreateGithubRelease
55
55
  # The command line options used to initialize this project
56
56
  #
57
57
  # @example
58
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
58
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
59
59
  # project = CreateGithubRelease::Project.new(options)
60
60
  # project.options == options #=> true
61
61
  #
62
- # @return [CreateGithubRelease::CommandLineOptions]
62
+ # @return [CreateGithubRelease::CommandLine::Options]
63
63
  #
64
64
  attr_reader :options
65
65
 
66
66
  attr_writer \
67
67
  :default_branch, :next_release_tag, :next_release_date, :next_release_version,
68
68
  :last_release_tag, :last_release_version, :release_branch, :release_log_url,
69
- :release_type, :release_url, :remote, :remote_base_url, :remote_repository, :remote_url,
70
- :changelog_path, :changes, :next_release_description, :last_release_changelog,
71
- :next_release_changelog, :first_commit, :verbose, :quiet
69
+ :release_type, :pre, :pre_type, :release_url, :remote, :remote_base_url,
70
+ :remote_repository, :remote_url, :changelog_path, :changes,
71
+ :next_release_description, :last_release_changelog, :next_release_changelog,
72
+ :first_commit, :verbose, :quiet
72
73
 
73
74
  # attr_writer :first_release
74
75
 
@@ -82,12 +83,12 @@ module CreateGithubRelease
82
83
  # Uses the value of `remote` to determine the remote repository to query.
83
84
  #
84
85
  # @example By default, `default_branch` is based on `git remote show`
85
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
86
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
86
87
  # project = CreateGithubRelease::Project.new(options)
87
88
  # options.default_branch # => 'main'
88
89
  #
89
90
  # @example `default_branch` can be set explicitly
90
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
91
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
91
92
  # project = CreateGithubRelease::Project.new(options)
92
93
  # project.default_branch = 'master'
93
94
  # project.default_branch #=> 'master'
@@ -114,13 +115,13 @@ module CreateGithubRelease
114
115
  # Uses the value of `next_release_version` to determine the tag name.
115
116
  #
116
117
  # @example By default, `next_release_tag` is based on `next_release_version`
117
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
118
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
118
119
  # project = CreateGithubRelease::Project.new(options)
119
120
  # project.next_release_version = '1.0.0'
120
121
  # project.next_relase_tag #=> 'v1.0.0'
121
122
  #
122
123
  # @example `next_tag` can be set explicitly
123
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
124
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
124
125
  # project = CreateGithubRelease::Project.new(options)
125
126
  # project.next_release_tag = 'v1.0.0'
126
127
  # project.next_relase_tag #=> 'v1.0.0'
@@ -140,13 +141,13 @@ module CreateGithubRelease
140
141
  # If the next_release_tag does not exist, Date.today is returned.
141
142
  #
142
143
  # @example By default, `next_release_date` is based on `next_release_tag`
143
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
144
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
144
145
  # project = CreateGithubRelease::Project.new(options)
145
146
  # project.next_release_tag = 'v1.0.0'
146
147
  # project.next_release_date #=> #<Date: 2023-02-01 ((2459189j,0s,0n),+0s,2299161j)>
147
148
  #
148
149
  # @example It can also be set explicitly
149
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
150
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
150
151
  # project = CreateGithubRelease::Project.new(options)
151
152
  # project.next_release_date = Date.new(2023, 2, 1)
152
153
  # project.next_release_date #=> #<Date: 2023-02-01 ((2459189j,0s,0n),+0s,2299161j)>
@@ -172,7 +173,7 @@ module CreateGithubRelease
172
173
  # `true` if the given tag exists in the local repository
173
174
  #
174
175
  # @example
175
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
176
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
176
177
  # project = CreateGithubRelease::Project.new(options)
177
178
  # project.tag_exist?('v1.0.0') #=> false
178
179
  #
@@ -193,25 +194,25 @@ module CreateGithubRelease
193
194
  #
194
195
  # The version of the next release
195
196
  #
196
- # @example By default, `next_release_version` is based on the value returned by `bump show-next <release_type>`
197
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
197
+ # @example By default, `next_release_version` is based on the value returned by `semverify <release_type> --dry-run`
198
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
198
199
  # project = CreateGithubRelease::Project.new(options)
199
200
  # project.next_release_version #=> '1.0.0'
200
201
  #
201
202
  # @example It can also be set explicitly
202
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
203
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
203
204
  # project = CreateGithubRelease::Project.new(options)
204
205
  # project.next_release_version = '1.0.0
205
206
  # project.next_release_version #=> '1.0.0'
206
207
  #
207
208
  # @return [String]
208
209
  #
209
- # @raise [RuntimeError] if the bump command fails
210
+ # @raise [RuntimeError] if the semverify command fails
210
211
  #
211
212
  # @api public
212
213
  #
213
214
  def next_release_version
214
- @next_release_version ||= options.next_release_version || bump_show_next_version
215
+ @next_release_version ||= options.next_release_version || next_version
215
216
  end
216
217
 
217
218
  # @!attribute [rw] last_release_tag
@@ -221,13 +222,13 @@ module CreateGithubRelease
221
222
  # Uses the value of `last_release_version` to determine the tag name.
222
223
  #
223
224
  # @example By default, `last_release_tag` is based on `last_release_version`
224
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
225
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
225
226
  # project = CreateGithubRelease::Project.new(options)
226
227
  # project.last_release_version = '0.0.1'
227
228
  # project.last_relase_tag #=> 'v0.0.1'
228
229
  #
229
230
  # @example `last_release_tag` can be set explicitly
230
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
231
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
231
232
  # project = CreateGithubRelease::Project.new(options)
232
233
  # project.last_release_tag = 'v0.0.1'
233
234
  # project.last_relase_tag #=> 'v0.0.1'
@@ -244,25 +245,25 @@ module CreateGithubRelease
244
245
  #
245
246
  # The version of the last release
246
247
  #
247
- # @example By default, `last_release_version` is based on the value returned by `bump current`
248
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
248
+ # @example By default, `last_release_version` is based on the value returned by `semverify current`
249
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
249
250
  # project = CreateGithubRelease::Project.new(options)
250
251
  # project.last_release_version #=> '0.0.1'
251
252
  #
252
253
  # @example It can also be set explicitly
253
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
254
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
254
255
  # project = CreateGithubRelease::Project.new(options)
255
256
  # project.last_release_version = '0.0.1
256
257
  # project.last_release_version #=> '0.0.1'
257
258
  #
258
259
  # @return [String]
259
260
  #
260
- # @raise [RuntimeError] if the bump command fails
261
+ # @raise [RuntimeError] if the semverify command fails
261
262
  #
262
263
  # @api public
263
264
  #
264
265
  def last_release_version
265
- @last_release_version ||= options.last_release_version || bump_current_version
266
+ @last_release_version ||= options.last_release_version || current_version
266
267
  end
267
268
 
268
269
  # @!attribute [rw] release_branch
@@ -270,20 +271,20 @@ module CreateGithubRelease
270
271
  # The name of the release branch being created
271
272
  #
272
273
  # @example By default, `release_branch` is based on the value returned by `next_release_tag`
273
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
274
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
274
275
  # project = CreateGithubRelease::Project.new(options)
275
276
  # project.next_release_tag = 'v1.0.0'
276
277
  # project.release_branch #=> 'release-v1.0.0'
277
278
  #
278
279
  # @example It can also be set explicitly
279
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
280
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
280
281
  # project = CreateGithubRelease::Project.new(options)
281
282
  # project.next_release_branch = 'release-v1.0.0'
282
283
  # project.next_release_branch #=> 'release-v1.0.0'
283
284
  #
284
285
  # @return [String]
285
286
  #
286
- # @raise [RuntimeError] if the bump command fails
287
+ # @raise [RuntimeError] if the semverify command fails
287
288
  #
288
289
  # @api public
289
290
  #
@@ -296,7 +297,7 @@ module CreateGithubRelease
296
297
  # The URL of the page containing a list of the changes in the release
297
298
  #
298
299
  # @example By default, `release_log_url` is based on `remote_url`, `last_release_tag`, and `next_release_tag`
299
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
300
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
300
301
  # project = CreateGithubRelease::Project.new(options)
301
302
  # project.remote_url = URI.parse('https://github.com/org/repo')
302
303
  # project.last_release_tag = 'v0.0.1'
@@ -304,14 +305,14 @@ module CreateGithubRelease
304
305
  # project.release_log_url #=> #<URI::HTTPS https://github.com/org/repo/compare/v0.0.1..v1.0.0>
305
306
  #
306
307
  # @example It can also be set explicitly
307
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
308
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
308
309
  # project = CreateGithubRelease::Project.new(options)
309
310
  # project.release_log_url = URI.parse('https://github.com/org/repo/compare/v0.0.1..v1.0.0')
310
311
  # project.release_log_url #=> #<URI::HTTPS https://github.com/org/repo/compare/v0.0.1..v1.0.0>
311
312
  #
312
313
  # @return [URI]
313
314
  #
314
- # @raise [RuntimeError] if the bump command fails
315
+ # @raise [RuntimeError] if the semverify command fails
315
316
  #
316
317
  # @api public
317
318
  #
@@ -327,15 +328,15 @@ module CreateGithubRelease
327
328
  #
328
329
  # The type of the release being created (e.g. 'major', 'minor', 'patch')
329
330
  #
330
- # @note this must be one of the values accepted by the `bump` command
331
+ # @note this must be one of the values accepted by the `semverify` command
331
332
  #
332
333
  # @example By default, this value comes from the options object
333
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
334
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
334
335
  # project = CreateGithubRelease::Project.new(options)
335
336
  # project.release_type #=> 'major'
336
337
  #
337
338
  # @example It can also be set explicitly
338
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
339
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
339
340
  # project = CreateGithubRelease::Project.new(options)
340
341
  # project.release_type = 'patch'
341
342
  # project.release_type #=> 'patch'
@@ -350,24 +351,71 @@ module CreateGithubRelease
350
351
  @release_type ||= options.release_type || raise(ArgumentError, 'release_type is required')
351
352
  end
352
353
 
354
+ # @!attribute [rw] pre
355
+ #
356
+ # Set to true if a pre-release is be created
357
+ #
358
+ # @example By default, this value comes from the options object
359
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major', pre: true, pre_type: 'alpha')
360
+ # project = CreateGithubRelease::Project.new(options)
361
+ # project.pre #=> 'true'
362
+ #
363
+ # @example It can also be set explicitly
364
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
365
+ # project = CreateGithubRelease::Project.new(options)
366
+ # project.pre = true
367
+ # project.pre #=> true
368
+ #
369
+ # @return [Boolean]
370
+ #
371
+ # @api public
372
+ #
373
+ def pre
374
+ @pre ||= options.pre
375
+ end
376
+
377
+ # @!attribute [rw] pre_type
378
+ #
379
+ # Set to the pre-release type to create. For example, "alpha", "beta", "pre", etc
380
+ #
381
+ # @example By default, this value comes from the options object
382
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major', pre: true, pre_type: 'alpha')
383
+ # project = CreateGithubRelease::Project.new(options)
384
+ # project.pre_type #=> 'alpha'
385
+ #
386
+ # @example It can also be set explicitly
387
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
388
+ # project = CreateGithubRelease::Project.new(options)
389
+ # project.pre = true
390
+ # project.pre_type = 'alpha'
391
+ # project.pre_type #=> 'alpha'
392
+ #
393
+ # @return [String]
394
+ #
395
+ # @api public
396
+ #
397
+ def pre_type
398
+ @pre_type ||= options.pre_type
399
+ end
400
+
353
401
  # @!attribute [rw] release_url
354
402
  #
355
403
  # The URL of the page containing a list of the changes in the release
356
404
  #
357
405
  # @example By default, `release_url` is based on `remote_url` and `next_release_tag`
358
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
406
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
359
407
  # project = CreateGithubRelease::Project.new(options)
360
408
  # project.remote_url = URI.parse('https://github.com/org/repo')
361
409
  # project.next_release_tag = 'v1.0.0'
362
410
  # project.release_url #=> #<URI::HTTPS https://github.com/org/repo/releases/tag/v1.0.0>
363
411
  #
364
412
  # @example It can also be set explicitly
365
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
413
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
366
414
  # project = CreateGithubRelease::Project.new(options)
367
415
  # project.release_url = URI.parse('https://github.com/org/repo/releases/tag/v1.0.0')
368
416
  # project.release_url #=> #<URI::HTTPS https://github.com/org/repo/releases/tag/v1.0.0>
369
417
  #
370
- # @return [URI]
418
+ # @return [URI::Generic]
371
419
  #
372
420
  # @api public
373
421
  #
@@ -380,17 +428,17 @@ module CreateGithubRelease
380
428
  # The git remote used to determine the repository url
381
429
  #
382
430
  # @example By default, 'origin' is used
383
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
431
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
384
432
  # project = CreateGithubRelease::Project.new(options)
385
433
  # project.remote #=> 'origin'
386
434
  #
387
435
  # @example It can also be set in the options
388
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major', remote: 'upstream')
436
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major', remote: 'upstream')
389
437
  # project = CreateGithubRelease::Project.new(options)
390
438
  # project.remote #=> 'upstream'
391
439
  #
392
440
  # @example It can also be set explicitly
393
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
441
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
394
442
  # project = CreateGithubRelease::Project.new(options)
395
443
  # project.remote = 'upstream'
396
444
  # project.remote #=> 'upstream'
@@ -408,18 +456,18 @@ module CreateGithubRelease
408
456
  # The base part of the remote url (e.g. 'https://github.com/')
409
457
  #
410
458
  # @example By default, this value is based on `remote_url`
411
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
459
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
412
460
  # project = CreateGithubRelease::Project.new(options)
413
461
  # project.remote_url = URI.parse('https://github.com/org/repo')
414
462
  # project.remote #=> #<URI::HTTPS https://github.com/>
415
463
  #
416
464
  # @example It can also be set explicitly
417
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
465
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
418
466
  # project = CreateGithubRelease::Project.new(options)
419
467
  # project.remote_base_url = URI.parse('https://github.com/')
420
468
  # project.remote_base_url #=> #<URI::HTTPS https://github.com/>
421
469
  #
422
- # @return [URI]
470
+ # @return [URI::Generic]
423
471
  #
424
472
  # @api public
425
473
  #
@@ -432,13 +480,13 @@ module CreateGithubRelease
432
480
  # The git remote owner and repository name (e.g. 'org/repo')
433
481
  #
434
482
  # @example By default, this value is based on `remote_url`
435
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
483
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
436
484
  # project = CreateGithubRelease::Project.new(options)
437
485
  # project.remote_url = URI.parse('htps://github.com/org/repo')
438
486
  # project.remote_repository #=> 'org/repo'
439
487
  #
440
488
  # @example It can also be set explicitly
441
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
489
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
442
490
  # project = CreateGithubRelease::Project.new(options)
443
491
  # project.remote_repository = 'org/repo'
444
492
  #
@@ -455,12 +503,12 @@ module CreateGithubRelease
455
503
  # The URL of the git remote repository (e.g. 'https://github.com/org/repo')
456
504
  #
457
505
  # @example By default, this value is based on `remote` and the `git remote get-url` command
458
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
506
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
459
507
  # project = CreateGithubRelease::Project.new(options)
460
508
  # project.remote #=> #<URI::HTTPS https://github.com/org/repo>
461
509
  #
462
510
  # @example It can also be set explicitly
463
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
511
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
464
512
  # project = CreateGithubRelease::Project.new(options)
465
513
  # project.remote_url = URI.parse('https://github.com/org/repo')
466
514
  # project.remote_url #=> #<URI::HTTPS https://github.com/org/repo>
@@ -485,17 +533,19 @@ module CreateGithubRelease
485
533
  # The path relative to the project root where the changelog is located
486
534
  #
487
535
  # @example By default, this value is 'CHANGELOG.md'
488
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
536
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
489
537
  # project = CreateGithubRelease::Project.new(options)
490
538
  # project.changelog_path #=> 'CHANGELOG.md'
491
539
  #
492
540
  # @example It can also be set in the options
493
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major', changelog_path: 'docs/CHANGES.txt')
541
+ # options = CreateGithubRelease::CommandLine::Options.new(
542
+ # release_type: 'major', changelog_path: 'docs/CHANGES.txt'
543
+ # )
494
544
  # project = CreateGithubRelease::Project.new(options)
495
545
  # project.remote_repository = 'docs/CHANGES.txt'
496
546
  #
497
547
  # @example It can also be set explicitly
498
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
548
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
499
549
  # project = CreateGithubRelease::Project.new(options)
500
550
  # project.changelog_path = 'docs/CHANGES.txt'
501
551
  # project.remote_repository = 'docs/CHANGES.txt'
@@ -515,7 +565,7 @@ module CreateGithubRelease
515
565
  # Calls `git log HEAD <next_release_tag>` to list the changes.
516
566
  #
517
567
  # @example By default, uses `git log`
518
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
568
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
519
569
  # project = CreateGithubRelease::Project.new(options)
520
570
  # pp project.changes
521
571
  # [
@@ -524,7 +574,7 @@ module CreateGithubRelease
524
574
  # ]
525
575
  #
526
576
  # @example It can also be set explicitly
527
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
577
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
528
578
  # project = CreateGithubRelease::Project.new(options)
529
579
  # project.changes = 'All the changes'
530
580
  # project.changes #=> 'All the changes'
@@ -550,7 +600,7 @@ module CreateGithubRelease
550
600
  # The formatted release description
551
601
  #
552
602
  # @example
553
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
603
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
554
604
  # project = CreateGithubRelease::Project.new(options) do |p|
555
605
  # p.remote_url = URI.parse('https://github.com/username/repo')
556
606
  # p.last_release_tag = 'v0.1.0'
@@ -601,7 +651,7 @@ module CreateGithubRelease
601
651
  #
602
652
  # * e718690 Release v0.1.0 (#3)
603
653
  # CHANGELOG
604
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
654
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
605
655
  # project = CreateGithubRelease::Project.new(options) do |p|
606
656
  # p.changelog_path = changelog_path
607
657
  # end
@@ -634,7 +684,7 @@ module CreateGithubRelease
634
684
  # last_release_changelog.
635
685
  #
636
686
  # @example
637
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
687
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
638
688
  # project = CreateGithubRelease::Project.new(options) do |p|
639
689
  # p.last_release_changelog = <<~CHANGELOG
640
690
  # # Project Changelog
@@ -666,7 +716,7 @@ module CreateGithubRelease
666
716
  # Show the project details as a string
667
717
  #
668
718
  # @example
669
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
719
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
670
720
  # project = CreateGithubRelease::Project.new(options)
671
721
  # puts projects.to_s
672
722
  # default_branch: main
@@ -718,12 +768,12 @@ module CreateGithubRelease
718
768
  # If `true` enables verbose output
719
769
  #
720
770
  # @example By default, this value is based on the `verbose` option
721
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major', verbose: true)
771
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major', verbose: true)
722
772
  # project = CreateGithubRelease::Project.new(options)
723
773
  # project.verbose? #=> true
724
774
  #
725
775
  # @example It can also be set explicitly
726
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
776
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
727
777
  # project = CreateGithubRelease::Project.new(options)
728
778
  # project.verbose = true
729
779
  # project.verbose? #=> true
@@ -743,12 +793,12 @@ module CreateGithubRelease
743
793
  # If `true` supresses all output
744
794
  #
745
795
  # @example By default, this value is based on the `quiet` option
746
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major', quiet: true)
796
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major', quiet: true)
747
797
  # project = CreateGithubRelease::Project.new(options)
748
798
  # project.quiet? #=> true
749
799
  #
750
800
  # @example It can also be set explicitly
751
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
801
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
752
802
  # project = CreateGithubRelease::Project.new(options)
753
803
  # project.quiet = true
754
804
  # project.quiet? #=> true
@@ -768,12 +818,12 @@ module CreateGithubRelease
768
818
  # true if release_type is 'first' otherwise false
769
819
  #
770
820
  # @example Returns true if release_type is 'first'
771
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'first')
821
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'first')
772
822
  # project = CreateGithubRelease::Project.new(options)
773
823
  # project.first_release? #=> true
774
824
  #
775
825
  # @example Returnss false if release_type is not 'first'
776
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
826
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
777
827
  # project = CreateGithubRelease::Project.new(options)
778
828
  # project.first_release? #=> false
779
829
  #
@@ -792,7 +842,7 @@ module CreateGithubRelease
792
842
  # The SHA of the oldest commit that is an ancestor of HEAD
793
843
  #
794
844
  # @example
795
- # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
845
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
796
846
  # project = CreateGithubRelease::Project.new(options)
797
847
  # project.first_commit? #=> '1234567'
798
848
  #
@@ -812,31 +862,41 @@ module CreateGithubRelease
812
862
 
813
863
  private
814
864
 
815
- # The current version of the project as determined by bump
865
+ # The current version of the project as determined by semverify
816
866
  # @return [String] The current version of the project
817
867
  # @api private
818
- def bump_current_version
819
- output = `bump current`
820
- raise 'Could not determine current version using bump' unless $CHILD_STATUS.success?
868
+ def current_version
869
+ output = `semverify current`
870
+ raise 'Could not determine current version using semverify' unless $CHILD_STATUS.success?
821
871
 
822
872
  output.lines.last.chomp
823
873
  end
824
874
 
825
- # The next version of the project as determined by bump and release_type
875
+ # The next version of the project as determined by semverify and release_type
826
876
  # @return [String] The next version of the project
827
877
  # @api private
828
- def bump_show_next_version
829
- output = `bump show-next #{release_type}`
830
- raise 'Could not determine next version using bump' unless $CHILD_STATUS.success?
878
+ def next_version
879
+ output = `#{next_version_cmd}`
880
+ raise 'Could not determine next version using semverify' unless $CHILD_STATUS.success?
831
881
 
832
882
  output.lines.last.chomp
833
883
  end
834
884
 
885
+ # Construct the command used to get the next version
886
+ # @return [String]
887
+ # @api private
888
+ def next_version_cmd
889
+ cmd = "semverify next-#{release_type}"
890
+ cmd << ' --pre' if pre
891
+ cmd << " --pre-type=#{pre_type}" if pre_type
892
+ cmd << ' --dry-run'
893
+ end
894
+
835
895
  # Setup versions and tags for a first release
836
- # @return [Void]
896
+ # @return [void]
837
897
  # @api private
838
898
  def setup_first_release
839
- self.next_release_version = @next_release_version || bump_current_version
899
+ self.next_release_version = @next_release_version || current_version
840
900
  self.last_release_version = ''
841
901
  self.last_release_tag = ''
842
902
  end
@@ -24,7 +24,7 @@ module CreateGithubRelease
24
24
  # assertions = CreateGithubRelease::ReleaseAssertions.new(options)
25
25
  # assertions.options # => #<CreateGithubRelease::Options:0x00007f9b0a0b0a00>
26
26
  #
27
- # @return [CreateGithubRelease::Options]
27
+ # @return [CreateGithubRelease::CommandLine::Options]
28
28
  attr_reader :options
29
29
 
30
30
  # Create a new instance of ReleaseAssertions
@@ -79,6 +79,7 @@ module CreateGithubRelease
79
79
  #
80
80
  def make_assertions
81
81
  ASSERTIONS.each do |assertion_class|
82
+ # @sg-ignore
82
83
  assertion_class.new(options).assert
83
84
  end
84
85
  end
@@ -24,7 +24,7 @@ module CreateGithubRelease
24
24
  # tasks = CreateGithubRelease::ReleaseTasks.new(options)
25
25
  # tasks.options # => #<CreateGithubRelease::Options:0x00007f9b0a0b0a00>
26
26
  #
27
- # @return [CreateGithubRelease::Options]
27
+ # @return [CreateGithubRelease::CommandLine::Options]
28
28
  attr_reader :options
29
29
 
30
30
  # Create a new instance of ReleaseTasks
@@ -71,6 +71,7 @@ module CreateGithubRelease
71
71
  #
72
72
  def run
73
73
  TASKS.each do |task_class|
74
+ # @sg-ignore
74
75
  task_class.new(options).run
75
76
  end
76
77
  end
@@ -15,7 +15,7 @@ module CreateGithubRelease
15
15
  # @example
16
16
  # require 'create_github_release'
17
17
  #
18
- # options = CreateGithubRelease::CommandLineOptions.new { |o| o.release_type = 'major' }
18
+ # options = CreateGithubRelease::CommandLine::Options.new { |o| o.release_type = 'major' }
19
19
  # project = CreateGithubRelease::Project.new(options)
20
20
  # task = CreateGithubRelease::Tasks::CommitRelease.new(project)
21
21
  # begin
@@ -16,7 +16,7 @@ module CreateGithubRelease
16
16
  # @example
17
17
  # require 'create_github_release'
18
18
  #
19
- # options = CreateGithubRelease::CommandLineOptions.new { |o| o.release_type = 'major' }
19
+ # options = CreateGithubRelease::CommandLine::Options.new { |o| o.release_type = 'major' }
20
20
  # project = CreateGithubRelease::Project.new(options)
21
21
  # task = CreateGithubRelease::Tasks::CreateGithubRelease.new(project)
22
22
  # begin
@@ -15,7 +15,7 @@ module CreateGithubRelease
15
15
  # @example
16
16
  # require 'create_github_release'
17
17
  #
18
- # options = CreateGithubRelease::CommandLineOptions.new { |o| o.release_type = 'major' }
18
+ # options = CreateGithubRelease::CommandLine::Options.new { |o| o.release_type = 'major' }
19
19
  # project = CreateGithubRelease::Project.new(options)
20
20
  # task = CreateGithubRelease::Tasks::CreateReleaseBranch.new(project)
21
21
  # begin
@@ -15,7 +15,7 @@ module CreateGithubRelease
15
15
  # @example
16
16
  # require 'create_github_release'
17
17
  #
18
- # options = CreateGithubRelease::CommandLineOptions.new { |o| o.release_type = 'major' }
18
+ # options = CreateGithubRelease::CommandLine::Options.new { |o| o.release_type = 'major' }
19
19
  # project = CreateGithubRelease::Project.new(options)
20
20
  # task = CreateGithubRelease::Tasks::CreateReleasePullRequest.new(project)
21
21
  # begin