create_github_release 1.4.0 → 1.5.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: 992d339f1f9a903ed6ad37567e05e66008d3a47c5af83f34c9b14e68cfb64b53
4
- data.tar.gz: 5549566d6d953cff76fd554b8e90fb5b3229f939127d8d7b887bd1c39878d8b4
3
+ metadata.gz: 312da511d779225d398925e66001d292366c70883f24c739b0e6288e0082891f
4
+ data.tar.gz: d5dc70f33050b9b1cbd0d8d228782c294bca9c73143e0b4724869224c802f59d
5
5
  SHA512:
6
- metadata.gz: a3ef1922049a7f3901f5d8ab88475ec33e49e290cc3a29ac3744bf40a2e9cc5850ce35eb3ca386642c0936270b5815018d5ad56fe874257aebe97991fd859147
7
- data.tar.gz: 711efa3fb69ddd9d4b746752ec5a5229ec30717d17b93b81b4be9af95cc2560dfa82615452044621ddfa9799d986abaa630abf04f1e6fc0387016118b4d5acc9
6
+ metadata.gz: e3bd21e337933bb66b61f8eda03f7b9e932b547427161a2970d61d6d7f6009a395dc5db64cf3ac56b44480bac4bc5b6c9903b2702fc606803533373b6691db3c
7
+ data.tar.gz: 6302667c91366596ca30aacfa2114e7c62bbfbfdaa5ff5f6c0b7b05af4e52da82e4e4dd9d43d17172474ea5146bdfeadb6c6b45c8fbc24564e0d5763a6c7a6b5
data/CHANGELOG.md CHANGED
@@ -5,6 +5,18 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## v1.5.0 (2024-09-10)
9
+
10
+ [Full Changelog](https://github.com/main-branch/create_github_release/compare/v1.4.0..v1.5.0)
11
+
12
+ Changes since v1.4.0:
13
+
14
+ * fdc35ee Optionally apply a release label to release PRs
15
+ * c122e7f Add Semver PR Label Check workflow
16
+ * afc3883 Update to the latest version of the CodeClimate test coverage reporter
17
+ * 0a57cbd Fix test errors due to array being in different order
18
+ * 30d46fb Fix rubocop offense from new Gemspec/AddRuntimeDependency cop
19
+
8
20
  ## v1.4.0 (2024-05-10)
9
21
 
10
22
  [Full Changelog](https://jcouball@github.com/main-branch/create_github_release/compare/v1.3.4..v1.4.0)
@@ -35,7 +35,7 @@ Gem::Specification.new do |spec|
35
35
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
36
36
  spec.require_paths = ['lib']
37
37
 
38
- spec.add_runtime_dependency 'version_boss', '~> 0.1'
38
+ spec.add_dependency 'version_boss', '~> 0.1'
39
39
 
40
40
  spec.add_development_dependency 'bundler-audit', '~> 0.9'
41
41
  spec.add_development_dependency 'debug', '~> 1.9'
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'English'
4
+ require 'create_github_release/assertion_base'
5
+
6
+ module CreateGithubRelease
7
+ module Assertions
8
+ # Assert that the release tag does not exist in the local repository
9
+ #
10
+ # @api public
11
+ #
12
+ class ReleasePrLabelExists < AssertionBase
13
+ # Assert that the release pr label is defined in GitHub
14
+ #
15
+ # @example
16
+ # require 'create_github_release'
17
+ #
18
+ # options = CreateGithubRelease::Options.new { |o| o.release_type = 'major', o.release_pr_label = 'release' }
19
+ # assertion = CreateGithubRelease::Assertions::LastReleaseTagExists.new(options)
20
+ # begin
21
+ # assertion.assert
22
+ # puts 'Assertion passed'
23
+ # rescue SystemExit
24
+ # puts 'Assertion failed'
25
+ # end
26
+ #
27
+ # @return [void]
28
+ #
29
+ # @raise [SystemExit] if the assertion fails
30
+ #
31
+ def assert
32
+ return if project.release_pr_label.nil?
33
+
34
+ print "Checking that release pr label '#{project.release_pr_label}' exists..."
35
+
36
+ if labels.include?(project.release_pr_label)
37
+ puts 'OK'
38
+ else
39
+ error "Release pr label '#{project.release_pr_label}' does not exist"
40
+ end
41
+ end
42
+
43
+ private
44
+
45
+ # Get the list of labels for the current repository from GitHub
46
+ # @return [Array<String>] The list of labels for the current repository
47
+ # @api private
48
+ def labels
49
+ output = `gh label list`
50
+ error 'Could not list pr labels' unless $CHILD_STATUS.success?
51
+
52
+ output.lines.map(&:chomp).map { |line| line.split("\t").first }
53
+ end
54
+ end
55
+ end
56
+ end
@@ -21,5 +21,6 @@ require_relative 'assertions/local_release_tag_does_not_exist'
21
21
  require_relative 'assertions/no_staged_changes'
22
22
  require_relative 'assertions/no_uncommitted_changes'
23
23
  require_relative 'assertions/on_default_branch'
24
+ require_relative 'assertions/release_pr_label_exists'
24
25
  require_relative 'assertions/remote_release_branch_does_not_exist'
25
26
  require_relative 'assertions/remote_release_tag_does_not_exist'
@@ -63,6 +63,13 @@ module CreateGithubRelease
63
63
  # @return [String]
64
64
  # @api public
65
65
 
66
+ # @!attribute release_pr_label [rw] the label to apply to the release pull request
67
+ # @example
68
+ # options = CreateGithubRelease::CommandLine::Options.new(release_pr_label: 'release')
69
+ # options.release_pr_label #=> 'release'
70
+ # @return [String]
71
+ # @api public
72
+
66
73
  # @attribute changelog_path [rw] the path to the changelog file
67
74
  # @example
68
75
  # options = CreateGithubRelease::CommandLine::Options.new(changelog_path: 'CHANGELOG.md')
@@ -140,10 +140,20 @@ module CreateGithubRelease
140
140
  %i[
141
141
  define_help_option define_default_branch_option define_release_branch_option define_pre_option
142
142
  define_pre_type_option define_remote_option define_last_release_version_option define_version_option
143
- define_next_release_version_option define_changelog_path_option define_quiet_option define_verbose_option
143
+ define_next_release_version_option define_release_pr_label_option define_changelog_path_option
144
+ define_quiet_option define_verbose_option
144
145
  ].each { |m| send(m) }
145
146
  end
146
147
 
148
+ # Define the release_pr_label option which requires a value
149
+ # @return [void]
150
+ # @api private
151
+ def define_release_pr_label_option
152
+ option_parser.on('--release-pr-label=LABEL', 'The label to apply to the release pull request') do |label|
153
+ options.release_pr_label = label
154
+ end
155
+ end
156
+
147
157
  # Define the pre option
148
158
  # @return [void]
149
159
  # @api private
@@ -32,7 +32,7 @@ module CreateGithubRelease
32
32
  # @return [Array<Symbol>]
33
33
  ALLOWED_OPTIONS = %i[
34
34
  release_type pre pre_type default_branch release_branch remote last_release_version
35
- next_release_version changelog_path quiet verbose
35
+ next_release_version release_pr_label changelog_path quiet verbose
36
36
  ].freeze
37
37
  end
38
38
  end
@@ -69,7 +69,8 @@ module CreateGithubRelease
69
69
  :release_type, :pre, :pre_type, :release_url, :remote, :remote_base_url,
70
70
  :remote_repository, :remote_url, :changelog_path, :changes,
71
71
  :next_release_description, :last_release_changelog, :next_release_changelog,
72
- :first_commit, :verbose, :quiet, :release_pr_number, :release_pr_url
72
+ :first_commit, :verbose, :quiet, :release_pr_number, :release_pr_url,
73
+ :release_pr_label
73
74
 
74
75
  # attr_writer :first_release
75
76
 
@@ -292,6 +293,34 @@ module CreateGithubRelease
292
293
  @release_branch ||= options.release_branch || "release-#{next_release_tag}"
293
294
  end
294
295
 
296
+ # @!attribute [rw] release_pr_label
297
+ #
298
+ # The name of the label to apply to the release pull request
299
+ #
300
+ # @example By default, `release_pr_label` is nil indicating no label should be applied
301
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
302
+ # project = CreateGithubRelease::Project.new(options)
303
+ # project.release_pr_label #=> nil
304
+ #
305
+ # @example Set to 'release'
306
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major', release_pr_label: 'release')
307
+ # project = CreateGithubRelease::Project.new(options)
308
+ # project.release_pr_label #=> 'release'
309
+ #
310
+ # @example It can also be set explicitly
311
+ # options = CreateGithubRelease::CommandLine::Options.new(release_type: 'major')
312
+ # project = CreateGithubRelease::Project.new(options)
313
+ # project.release_pr_label = 'release' # could be set to nil to remove the label
314
+ # project.release_pr_label #=> 'release'
315
+ #
316
+ # @return [String, nil]
317
+ #
318
+ # @api public
319
+ #
320
+ def release_pr_label
321
+ @release_pr_label ||= options.release_pr_label || nil
322
+ end
323
+
295
324
  # @!attribute [rw] release_log_url
296
325
  #
297
326
  # The URL of the page containing a list of the changes in the release
@@ -61,7 +61,8 @@ module CreateGithubRelease
61
61
  CreateGithubRelease::Assertions::LocalReleaseBranchDoesNotExist,
62
62
  CreateGithubRelease::Assertions::RemoteReleaseBranchDoesNotExist,
63
63
  CreateGithubRelease::Assertions::GhCommandExists,
64
- CreateGithubRelease::Assertions::GhAuthenticated
64
+ CreateGithubRelease::Assertions::GhAuthenticated,
65
+ CreateGithubRelease::Assertions::ReleasePrLabelExists
65
66
  ].freeze
66
67
 
67
68
  # Run all assertions
@@ -48,7 +48,7 @@ module CreateGithubRelease
48
48
  print 'Creating GitHub pull request...'
49
49
  tag = project.next_release_tag
50
50
  default_branch = project.default_branch
51
- `gh pr create --title 'Release #{tag}' --body-file '#{path}' --base '#{default_branch}'`
51
+ `#{command(tag, path, default_branch)}`
52
52
  if $CHILD_STATUS.success?
53
53
  puts 'OK'
54
54
  else
@@ -56,6 +56,23 @@ module CreateGithubRelease
56
56
  end
57
57
  end
58
58
 
59
+ # The command to create the release pull request
60
+ # @param tag [String] The tag for the release
61
+ # @param path [String] The path to the file with the PR body
62
+ # @param default_branch [String] The default branch for the repository
63
+ # @return [String] The command to create the release pull request
64
+ # @api private
65
+ def command(tag, path, default_branch)
66
+ command = [
67
+ 'gh', 'pr', 'create',
68
+ '--title', "'Release #{tag}'",
69
+ '--body-file', "'#{path}'",
70
+ '--base', "'#{default_branch}'"
71
+ ]
72
+ command += ['--label', "'#{project.release_pr_label}'"] if project.release_pr_label
73
+ command.join(' ')
74
+ end
75
+
59
76
  # Write the changelog to a new temporary file
60
77
  # @return [String] the path to the temporary file
61
78
  # @raise [SystemExit] if the temp could not be created
@@ -2,5 +2,5 @@
2
2
 
3
3
  module CreateGithubRelease
4
4
  # The version of this gem
5
- VERSION = '1.4.0'
5
+ VERSION = '1.5.0'
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: create_github_release
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-05-10 00:00:00.000000000 Z
11
+ date: 2024-09-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: version_boss
@@ -219,6 +219,7 @@ files:
219
219
  - lib/create_github_release/assertions/no_staged_changes.rb
220
220
  - lib/create_github_release/assertions/no_uncommitted_changes.rb
221
221
  - lib/create_github_release/assertions/on_default_branch.rb
222
+ - lib/create_github_release/assertions/release_pr_label_exists.rb
222
223
  - lib/create_github_release/assertions/remote_release_branch_does_not_exist.rb
223
224
  - lib/create_github_release/assertions/remote_release_tag_does_not_exist.rb
224
225
  - lib/create_github_release/backtick_debug.rb
@@ -250,8 +251,8 @@ metadata:
250
251
  allowed_push_host: https://rubygems.org
251
252
  homepage_uri: https://github.com/main-branch/create_github_release
252
253
  source_code_uri: https://github.com/main-branch/create_github_release
253
- changelog_uri: https://rubydoc.info/gems/create_github_release/1.4.0/file/CHANGELOG.md
254
- documentation_uri: https://rubydoc.info/gems/create_github_release/1.4.0
254
+ changelog_uri: https://rubydoc.info/gems/create_github_release/1.5.0/file/CHANGELOG.md
255
+ documentation_uri: https://rubydoc.info/gems/create_github_release/1.5.0
255
256
  rubygems_mfa_required: 'true'
256
257
  post_install_message:
257
258
  rdoc_options: []
@@ -268,7 +269,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
268
269
  - !ruby/object:Gem::Version
269
270
  version: '0'
270
271
  requirements: []
271
- rubygems_version: 3.5.9
272
+ rubygems_version: 3.5.16
272
273
  signing_key:
273
274
  specification_version: 4
274
275
  summary: A script to create a GitHub release for a Ruby Gem