create_github_release 0.3.0 → 1.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b6346efaa6cdc82095a7e3220d74dd359a10843f24f81c50037d9c85dbdc9dd8
4
- data.tar.gz: 674903481a785730fde4910bd0994f0cbcbed3196e3355e37775058bc1b0215d
3
+ metadata.gz: 4c7135b3a301cc4504b3eb3b5bbb68f8f22d095e7f3edcf95044aa24ce0810b3
4
+ data.tar.gz: 4a59c7be79e6b571b3bafa683213c03b283468dc36e4e5766e0d9264ea70aa6e
5
5
  SHA512:
6
- metadata.gz: bad25c4943faf700f6cb8593e42a5d2b2f879ec9e6f65fdcab120568e0fc4563b8e4972e76a595c8e2bfaabacba8ee5da98a9ab919bbc763a4aafdc889ba8588
7
- data.tar.gz: 61b4028671f28e714cb88cfade742d515f45d7dba45a158865e2d94ea1ec3e609038ae95446274d018839f162a0743f5ae34f954ae1550016ad99b7afa6d07cf
6
+ metadata.gz: f40d6c1141f6e3ff94b5fc2532dd1c73149b2ae5f2c4fba6a7ea2a79597a592080327ae749f9373c45ae0c9c82ef286455b4265b1949575e95f640f47e64dd53
7
+ data.tar.gz: 124bf8d9ed03b6d82d902e63acae142298000062bfb4ff9409e3e31f98f4d83f8c24de85263de788478213c567c6cbf08308003b5d6d846ac044884ef7188dd2
data/.markdownlint.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  default: true
2
2
 
3
3
  # Unordered list indentation
4
- MD007: { indent: 4 }
4
+ MD007: { indent: 2 }
5
5
 
6
6
  # Line length
7
7
  MD013: { line_length: 90, tables: false, code_blocks: false }
data/.rubocop.yml CHANGED
@@ -7,7 +7,7 @@ AllCops:
7
7
  SuggestExtensions: false
8
8
  # RuboCop enforces rules depending on the oldest version of Ruby which
9
9
  # your project supports:
10
- TargetRubyVersion: 2.7
10
+ TargetRubyVersion: 3.0
11
11
 
12
12
  # The default max line length is 80 characters
13
13
  Layout/LineLength:
@@ -18,3 +18,6 @@ Metrics/BlockLength:
18
18
  Exclude:
19
19
  - "spec/**/*_spec.rb"
20
20
  - "*.gemspec"
21
+
22
+ Gemspec/DevelopmentDependencies:
23
+ EnforcedStyle: gemspec
data/.solargraph.yml ADDED
@@ -0,0 +1,23 @@
1
+ ---
2
+ include:
3
+ - "**/*.rb"
4
+ exclude:
5
+ - spec/**/*
6
+ - test/**/*
7
+ - vendor/**/*
8
+ - ".bundle/**/*"
9
+ require: []
10
+ domains: []
11
+ reporters:
12
+ - rubocop
13
+ - require_not_found
14
+ - typecheck:strict
15
+ formatter:
16
+ rubocop:
17
+ cops: safe
18
+ except: []
19
+ only: []
20
+ extra_args: []
21
+ require_paths: []
22
+ plugins: []
23
+ max_files: 5000
@@ -0,0 +1,19 @@
1
+ {
2
+ // Test
3
+ "version": "0.2.0",
4
+ "configurations": [
5
+ {
6
+ "type": "rdbg",
7
+ "name": "Debug current file with rdbg",
8
+ "request": "launch",
9
+ "script": "${file}",
10
+ "args": [],
11
+ "askParameters": false
12
+ },
13
+ {
14
+ "type": "rdbg",
15
+ "name": "Attach with rdbg",
16
+ "request": "attach"
17
+ }
18
+ ]
19
+ }
data/CHANGELOG.md CHANGED
@@ -5,6 +5,33 @@ 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.1.0 (2023-10-15)
9
+
10
+ [Full Changelog](https://github.com/main-branch/create_github_release/compare/v1.0.0..v1.1.0)
11
+
12
+ Changes since v1.0.0:
13
+
14
+ * 5088cd0 Add instruction for publishing the resulting gem (#41)
15
+ * 60553b0 Integrate solargraph:typecheck into Rake and fix any problems (#40)
16
+ * c0dd2d8 Improve reporting of code not covered by tests (#38)
17
+ * 5dff0b5 Tell rubocop development dependencies go in the gemspec (#39)
18
+ * d55f2f4 Merge pull request #37 from main-branch/debugging_support
19
+ * 4a28c4c Allow the build to continue if the Ruby head build fails
20
+ * 2814761 Add launch.json to run the ruby debugger in VS Code
21
+ * c3de36d Require 'debug' in spec_helper so `binding.break` can be used
22
+ * 3f3276d Add gems needed for debugging
23
+ * e299d97 Replace 'bump' with 'semverify' (#35)
24
+ * 68fa672 Drop support for Ruby 2.7 and require at least Ruby 3.0 (#36)
25
+
26
+ ## v1.0.0 (2023-02-05)
27
+
28
+ [Full Changelog](https://github.com/main-branch/create_github_release/compare/v0.3.0..v1.0.0)
29
+
30
+ Changes since v0.3.0:
31
+
32
+ * bfd40e6 Handle the first release of a gem (#32)
33
+ * 7a76148 Release v0.3.0 (#31)
34
+
8
35
  ## v0.3.0 (2023-01-29)
9
36
 
10
37
  [Full Changelog](https://github.com/main-branch/create_github_release/compare/v0.2.1..v0.3.0)
data/README.md CHANGED
@@ -5,65 +5,272 @@
5
5
  [![Maintainability](https://api.codeclimate.com/v1/badges/b8c0af10b15a0ffeb1a1/maintainability)](https://codeclimate.com/github/main-branch/create_github_release/maintainability)
6
6
  [![Test Coverage](https://api.codeclimate.com/v1/badges/b8c0af10b15a0ffeb1a1/test_coverage)](https://codeclimate.com/github/main-branch/create_github_release/test_coverage)
7
7
 
8
- Create a GitHub release for a new gem version.
8
+ A script to manage your gem version and create a GitHub branch, PR, and release
9
+ for a new gem version.
9
10
 
10
- The `create-github-release` script does the following:
11
+ Since this script builds a changelog by listing the commits on the default branch,
12
+ it works best if you are disciplined about squashing PR commits to the
13
+ minimum number of commits necessary (usually one) in order to avoid a noisy changelog.
11
14
 
12
- * Bumps the project's version
13
- * Updates the project's changelog
14
- * Creates a release branch
15
- * Commits the version change and changelog update
16
- * Creates a version tag
17
- * Pushes the release branch to GitHub
18
- * Creates a GitHub release and GitHub pull request for the release
15
+ Tested on Ruby 2.7+
19
16
 
20
- You should merge the pull request once it is reviewed and approved.
17
+ * [The create\_github\_release Gem](#the-create_github_release-gem)
18
+ * [Installation](#installation)
19
+ * [Usage](#usage)
20
+ * [First release using this script when there were NO prior releases](#first-release-using-this-script-when-there-were-no-prior-releases)
21
+ * [First release using this script when there were prior releases](#first-release-using-this-script-when-there-were-prior-releases)
22
+ * [Subsequent releases using this script](#subsequent-releases-using-this-script)
23
+ * [After Running create-github-release](#after-running-create-github-release)
24
+ * [How the changelog is updated](#how-the-changelog-is-updated)
25
+ * [Limitations](#limitations)
26
+ * [Development](#development)
27
+ * [Contributing](#contributing)
28
+ * [License](#license)
21
29
 
22
- Pull the changes from the default branch and publish your gem with the `rake release` command.
30
+ ## Installation
31
+
32
+ Add `create_github_release` as a development dependency in your project's gemspec:
33
+
34
+ ```ruby
35
+ spec.add_development_dependency 'create_github_release', '~> 0.1'
36
+ ```
37
+
38
+ and then install using `bundle update`.
39
+
40
+ ## Usage
23
41
 
24
- Here is the command line --help output:
42
+ This gem installs the `create-guthub-release` command line tool:
25
43
 
26
44
  ```text
27
45
  Usage:
28
46
  create-github-release --help | RELEASE_TYPE [options]
29
47
 
30
- RELEASE_TYPE must be 'major', 'minor', or 'patch'
48
+ RELEASE_TYPE must be 'major', 'minor', 'patch', or 'first'
31
49
 
32
50
  Options:
33
51
  --default-branch=BRANCH_NAME Override the default branch
34
52
  --release-branch=BRANCH_NAME Override the release branch to create
35
53
  --remote=REMOTE_NAME Use this remote name instead of 'origin'
36
54
  --last-release-version=VERSION
37
- Use this version instead `bump current`
55
+ Use this version instead `semverify current`
38
56
  --next-release-version=VERSION
39
- Use this version instead `bump RELEASE_TYPE`
57
+ Use this version instead `semverify RELEASE_TYPE`
40
58
  --changelog-path=PATH Use this file instead of CHANGELOG.md
41
59
  -q, --[no-]quiet Do not show output
42
60
  -v, --[no-]verbose Show extra output
43
61
  -h, --help Show this message
44
62
  ```
45
63
 
46
- The following conditions must be met in order to create a release:
64
+ The RELEASE_TYPE should follow [Semantic Versioning](https://semver.org) rules:
47
65
 
48
- * The bundle must be up to date (via bundle update)
49
- * You current directory must be in the top level of the git repository
50
- * The default branch must be checked out
51
- * There are no uncommitted changes
52
- * The local and remote must be on the same commit
53
- * The last release tag must exist
54
- * The new release tag must not already exist either locally or remotely
55
- * The new release branch must not already exist either locally or remotely
56
- * The gh command must be installed
66
+ * A **major** release includes incompatible API changes
67
+ * A **minor** release includes added functionality in a backwards compatible manner
68
+ * A **patch** release includes backwards compatible bug fixes or other inconsequential changes
57
69
 
58
- ## Installation
70
+ This script will be used for three different use cases:
59
71
 
60
- Add `create_github_release` as a development dependency in your project's gemspec:
72
+ ### First release using this script when there were NO prior releases
61
73
 
62
- ```ruby
63
- spec.add_development_dependency 'create_github_release', '~> 0.1'
74
+ If this is to be the first release of this gem follow these instructions.
75
+
76
+ For this use case, let's assume the following:
77
+
78
+ * the default branch is `main` (this is the HEAD branch returned by `git remote show origin`)
79
+ * the current version of the gem is `0.1.0` (as returned by `semverify current`)
80
+
81
+ If a different first version number is desired, update the version number in the
82
+ source code making sure that `semverify current` returns the desired version number.
83
+ Then commit the change to the default branch on the remote before running this
84
+ script.
85
+
86
+ You should start with a CHANGELOG.md that just has frontmatter. An empty file or
87
+ no file is also acceptable. It is not recommended to go with the CHANGELOG.md generated
88
+ by `bundle gem`. Here are suggested CHANGELOG.md contents prior to the first release:
89
+
90
+ ```markdown
91
+ # Change Log
92
+
93
+ Changes for each release are listed in this file.
94
+
95
+ This project adheres to [Semantic Versioning](https://semver.org/) for its releases.
64
96
  ```
65
97
 
66
- and then install using `bundle update`.
98
+ See [How the changelog is updated](#how-the-changelog-is-updated) for more information.
99
+
100
+ The following prerequisites are checked by this script:
101
+
102
+ * The current directory must be in the top level of the git repository
103
+ * The HEAD commit of the default branch (`main`) must be checked out
104
+ * The HEAD commit of the default branch of the local repository must match the
105
+ HEAD commit of the default branch of the remote repository
106
+ * There are no uncommitted or unstaged changes
107
+ * The bundle must be up to date (the script will attempt to update the bundle if needed)
108
+ * The next-release tag (`v0.1.0`) must NOT already exist
109
+ * The next-release branch (`release-v0.1.0`) must NOT already exist
110
+ * The gh command must be installed and authenticated via `gh auth`
111
+
112
+ You should run:
113
+
114
+ ```shell
115
+ create-github-release first
116
+ ```
117
+
118
+ The `create-github-release` script will do the following:
119
+
120
+ * Determine the next-release version (`v0.1.0`) using `semverify current`
121
+ * Update the project's changelog file `CHANGELOG.md`
122
+ * Create a release branch `release-v0.1.0`
123
+ * Commit the changes to the changelog and create a release tag (`v0.1.0`) pointing
124
+ to that commit
125
+ * Push the release branch to GitHub
126
+ * Create a GitHub release and pull request for the release
127
+
128
+ See [After running create-github-release](#after-running-create-github-release)
129
+ for instructions for completing your release.
130
+
131
+ ### First release using this script when there were prior releases
132
+
133
+ In order to start using `create-github-release` after you have used some other
134
+ method for managing the gem version and creating releases, you need to ensure the
135
+ following prerequisites are met:
136
+
137
+ 1. that `semverify current` is the version of the last release (let's use `1.3.1` as an
138
+ example).
139
+ 2. that there is a corresponding release tag that points to the last commit on the
140
+ default branch of the previous release. If the last version was `1.3.1`, then
141
+ the last-release tag should be `v1.3.1`.
142
+
143
+ Changes to the changelog file to ensure the next-release description is added correctly
144
+ may need to be done. See [How the changelog is updated](#how-the-changelog-is-updated)
145
+ for details.
146
+
147
+ Any changes needed to make sure these prerequisites are met should merged or pushed
148
+ to the default branch on the remote.
149
+
150
+ Once these prerequisites are met and any adjustments have been done, follow the
151
+ directions in [Subserquent releases using this script](#subsequent-releases-using-this-script).
152
+
153
+ See [After running create-github-release](#after-running-create-github-release)
154
+ for instructions for completing your release.
155
+
156
+ ### Subsequent releases using this script
157
+
158
+ For this use case, let's assume the following:
159
+
160
+ * you want to create a `major` release
161
+ * the default branch is `main` (this is the HEAD branch returned by `git remote show origin`)
162
+ * the current version of the gem is `0.1.0` (as returned by `semverify current`)
163
+
164
+ The following prerequisites must be met:
165
+
166
+ * The current directory must be in the top level of the git repository
167
+ * The HEAD commit of the default branch (`main`) must be checked out
168
+ * The HEAD commit of the default branch of the local repository must match the
169
+ HEAD commit of the default branch of the remote repository
170
+ * There are no uncommitted or unstaged changes
171
+ * The bundle must be up to date (the script will attempt to update the bundle if needed)
172
+ * The last-release tag (`v0.1.0`) must already exist
173
+ * The next-release tag (`v1.0.0`) must NOT already exist
174
+ * The next-release branch (`release-v1.0.0`) must NOT already exist
175
+ * The gh command must be installed and authenticated via `gh auth`
176
+
177
+ You should run:
178
+
179
+ ```shell
180
+ create-github-release major
181
+ ```
182
+
183
+ The `create-github-release` script will do the following:
184
+
185
+ * Determine the last-release version using `semverify current`
186
+ * Determine the next-release version using `semverify RELEASE_TYPE --dry-run`
187
+ * Increment the project's version using `semverify RELEASE_TYPE`
188
+ * Update the project's changelog file `CHANGELOG.md`
189
+ * Create a release branch `release-v1.0.0`
190
+ * Commit the changes to the version and changelog AND create a release tag (`v1.0.0`) pointing
191
+ to that commit
192
+ * Push the release branch to GitHub
193
+ * Create a GitHub release and pull request for the release
194
+
195
+ See [After running create-github-release](#after-running-create-github-release)
196
+ for instructions for completing your release.
197
+
198
+ ## After Running create-github-release
199
+
200
+ If you want to make additional updates to the ChangeLog or make changes as
201
+ part of the release PR, it is best to do them before running this script. If
202
+ you must make changes after running this script, you should do so in additional
203
+ commits on the release branch. Before merging to the default branch, you should
204
+ squash all commits down to ONE commit on the release branch and make sure that
205
+ the new release tag (`v1.0.0` in this example) points to this commit.
206
+
207
+ If you are happy with the PR, you should approve it in GitHub.
208
+
209
+ Next, merge the release branch into the default branch **MANUALLY AT THE COMMAND
210
+ LINE** using a fast forward merge with the following commands:
211
+
212
+ ```shell
213
+ git checkout main
214
+ git merge --ff-only release-v1.0.0
215
+ git push
216
+ ```
217
+
218
+ GitHub will automatically close the PR after the `git push` command. These commands
219
+ are output by `create-github-release` so you do not have to memorize them ;)
220
+
221
+ It is important to use a fast foward marge to ensure that the release tag points
222
+ to the right commit after the merge. GitHub does not allow fast forward merges when
223
+ merging a PR.
224
+
225
+ Finally, publish your gem to rubygems.org with the `rake release` command.
226
+
227
+ ## How the changelog is updated
228
+
229
+ A release description is generated by listing the commits between the last release
230
+ and the next release.
231
+
232
+ As an example, let's assume the following:
233
+
234
+ * the last release version was `0.1.0`
235
+ * the next release version will be `1.0.0`
236
+ * there were two changes in the next release:
237
+ * The first commit has sha `1111111` and a commit message starting with the
238
+ line 'Add feature 1'
239
+ * The second commit has sha `2222222` and a commit message starting with the
240
+ line 'Add feature 2'
241
+
242
+ The release description will look like this:
243
+
244
+ ```text
245
+ ## Release v1.0.0
246
+
247
+ Full Changelog
248
+
249
+ Changes since v0.1.0:
250
+
251
+ * 2222222 Add feature 2
252
+ * 1111111 Add feature 1
253
+ ```
254
+
255
+ The existing changelog file is read and split into two parts: front matter and
256
+ body.
257
+
258
+ The front matter is everything before the first markdown H2 header. If there is
259
+ no H2 header, the entire file is considered front matter.
260
+
261
+ The body is everything else in the file (if the file contains an H2 header)
262
+
263
+ The resulting updated changelog file has the following sections:
264
+
265
+ 1. front matter
266
+ 2. next release description
267
+ 3. body (including past release descriptions)
268
+
269
+ ## Limitations
270
+
271
+ * Does not work on Windows
272
+ * Has only been tested on MRI Ruby
273
+ *
67
274
 
68
275
  ## Development
69
276
 
data/Rakefile CHANGED
@@ -3,7 +3,7 @@
3
3
  # The default task
4
4
 
5
5
  desc 'Run the same tasks that the CI build will run'
6
- task default: %w[spec rubocop yard yard:audit yard:coverage bundle:audit build]
6
+ task default: %w[spec rubocop yard yard:audit yard:coverage solargraph:typecheck bundle:audit build]
7
7
 
8
8
  # Bundler Audit
9
9
 
@@ -26,10 +26,6 @@ end
26
26
  CLEAN << 'pkg'
27
27
  CLOBBER << 'Gemfile.lock'
28
28
 
29
- # Bump
30
-
31
- require 'bump/tasks'
32
-
33
29
  # RSpec
34
30
 
35
31
  require 'rspec/core/rake_task'
@@ -79,6 +75,13 @@ Yardstick::Rake::Verify.new(:'yard:coverage') do |verify|
79
75
  verify.threshold = 100
80
76
  end
81
77
 
78
+ # Solargraph typecheck
79
+
80
+ desc 'Run the solargraph type checker'
81
+ task :'solargraph:typecheck' do
82
+ sh 'bundle exec solargraph typecheck --level=typed'
83
+ end
84
+
82
85
  # Additional cleanup
83
86
 
84
87
  CLEAN << 'tmp'
@@ -8,11 +8,14 @@ Gem::Specification.new do |spec|
8
8
  spec.authors = ['James']
9
9
  spec.email = ['jcouball@yahoo.com']
10
10
 
11
- spec.summary = 'Create a GitHub release PR for a Ruby Gem'
12
- spec.description = spec.summary
11
+ spec.summary = 'A script to create a GitHub release for a Ruby Gem'
12
+ spec.description = <<~DESCRIPTION
13
+ A script that manages your gem version and creates a GitHub branch, PR, and
14
+ release for a new gem version.
15
+ DESCRIPTION
13
16
  spec.homepage = 'https://github.com/main-branch/create_github_release'
14
17
  spec.license = 'MIT'
15
- spec.required_ruby_version = '>= 2.7.0'
18
+ spec.required_ruby_version = '>= 3.0.0'
16
19
 
17
20
  spec.metadata['allowed_push_host'] = 'https://rubygems.org'
18
21
 
@@ -31,15 +34,18 @@ Gem::Specification.new do |spec|
31
34
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
32
35
  spec.require_paths = ['lib']
33
36
 
34
- spec.add_development_dependency 'bump', '~> 0.10'
37
+ spec.add_runtime_dependency 'semverify', '~> 0.3'
38
+
35
39
  spec.add_development_dependency 'bundler-audit', '~> 0.9'
40
+ spec.add_development_dependency 'debug', '~> 1.7'
36
41
  spec.add_development_dependency 'rake', '~> 13.0'
37
42
  spec.add_development_dependency 'redcarpet', '~> 3.5'
38
43
  spec.add_development_dependency 'rspec', '~> 3.10'
39
44
  spec.add_development_dependency 'rubocop', '~> 1.36'
45
+ spec.add_development_dependency 'ruby-debug-ide', '~> 0.7'
40
46
  spec.add_development_dependency 'simplecov', '~> 0.21'
41
47
  spec.add_development_dependency 'simplecov-lcov', '~> 0.8'
42
- spec.add_development_dependency 'solargraph', '~> 0.47'
48
+ spec.add_development_dependency 'solargraph', '~> 0.49'
43
49
  spec.add_development_dependency 'timecop', '~> 0.9'
44
50
  spec.add_development_dependency 'yard', '~> 0.9'
45
51
  spec.add_development_dependency 'yardstick', '~> 0.9'
@@ -23,4 +23,8 @@ puts <<~MESSAGE unless project.quiet
23
23
  git checkout #{project.default_branch}
24
24
  git merge --ff-only #{project.release_branch}
25
25
  git push
26
+
27
+ Wait for the CI build to pass and then release the gem with the following command:
28
+
29
+ rake release:rubygem_push
26
30
  MESSAGE
@@ -30,8 +30,6 @@ module CreateGithubRelease
30
30
  raise NotImplementedError
31
31
  end
32
32
 
33
- # @!attribute [r] options
34
- #
35
33
  # The project passed to the assertion object
36
34
  # @return [CreateGithubRelease::Project] the project to create a release for
37
35
  # @api private
@@ -29,6 +29,8 @@ module CreateGithubRelease
29
29
  # @raise [SystemExit] if the assertion fails
30
30
  #
31
31
  def assert
32
+ return if project.first_release?
33
+
32
34
  print "Checking that last release tag '#{project.last_release_tag}' exists..."
33
35
 
34
36
  tags = `git tag --list "#{project.last_release_tag}"`.chomp
@@ -2,18 +2,23 @@
2
2
 
3
3
  require 'uri'
4
4
 
5
- # rubocop:disable Metrics/ModuleLength
6
-
7
5
  module CreateGithubRelease
8
6
  # An array of the valid release types
9
7
  # @return [Array<String>]
10
8
  # @api private
11
- VALID_RELEASE_TYPES = %w[major minor patch].freeze
9
+ VALID_RELEASE_TYPES = %w[major minor patch first].freeze
12
10
 
13
11
  # Regex pattern for a [valid git reference](https://git-scm.com/docs/git-check-ref-format)
14
12
  # @return [Regexp]
15
13
  # @api private
16
- VALID_REF_PATTERN = /^(?:(?:[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*)|(?:[a-zA-Z0-9-]+))$/.freeze
14
+ VALID_REF_PATTERN = /^(?:(?:[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*)|(?:[a-zA-Z0-9-]+))$/
15
+
16
+ # An array of the allowed options that can be passed to `.new`
17
+ # @return [Array<Symbol>]
18
+ ALLOWED_OPTIONS = %i[
19
+ release_type default_branch release_branch remote last_release_version
20
+ next_release_version changelog_path quiet verbose
21
+ ].freeze
17
22
 
18
23
  # rubocop:disable Metrics/ClassLength
19
24
 
@@ -27,14 +32,12 @@ module CreateGithubRelease
27
32
  #
28
33
  # @api public
29
34
  #
30
- CommandLineOptions = Struct.new(
31
- :release_type, :default_branch, :release_branch, :remote, :last_release_version,
32
- :next_release_version, :changelog_path, :quiet, :verbose,
33
- keyword_init: true
34
- ) do
35
+ class CommandLineOptions
36
+ ALLOWED_OPTIONS.each { |option| attr_accessor option }
37
+
35
38
  # @attribute release_type [rw] the type of release to create
36
39
  #
37
- # Must be one of 'major', 'minor', or 'patch'
40
+ # Must be one of the VALID_RELEASE_TYPES
38
41
  #
39
42
  # @example
40
43
  # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
@@ -129,11 +132,14 @@ module CreateGithubRelease
129
132
  # @yieldparam self [CreateGithubRelease::CommandLineOptions] the instance being initialized
130
133
  # @yieldreturn [void] the return value is ignored
131
134
  #
132
- def initialize(*)
133
- super
135
+ def initialize(**options)
136
+ assert_no_unknown_options(options)
137
+ options.each { |k, v| instance_variable_set("@#{k}", v) }
138
+
134
139
  self.quiet ||= false
135
140
  self.verbose ||= false
136
141
  @errors = []
142
+
137
143
  yield(self) if block_given?
138
144
  end
139
145
 
@@ -192,6 +198,17 @@ module CreateGithubRelease
192
198
 
193
199
  private
194
200
 
201
+ # Raise ArgumentError if options has a key not in ALLOWED_OPTIONS
202
+ # @return [void]
203
+ # @api private
204
+ def assert_no_unknown_options(options)
205
+ unknown_options = options.keys - ALLOWED_OPTIONS
206
+ return if unknown_options.empty?
207
+
208
+ message = "Unknown keywords: #{unknown_options.join(', ')}"
209
+ raise ArgumentError, message
210
+ end
211
+
195
212
  # Returns `true` if the given name is a valid git reference
196
213
  # @return [Boolean]
197
214
  # @api private
@@ -229,19 +246,13 @@ module CreateGithubRelease
229
246
  false
230
247
  end
231
248
 
232
- # Returns a string representation of the valid release types
233
- # @return [String]
234
- # @api private
235
- def valid_release_types
236
- "'#{VALID_RELEASE_TYPES.join("', '")}'"
237
- end
238
-
239
249
  # Returns `true` if the `#release_type` is not nil
240
250
  # @return [Boolean]
241
251
  # @api private
242
252
  def validate_release_type_given
243
253
  return true unless release_type.nil?
244
254
 
255
+ valid_release_types = "'#{VALID_RELEASE_TYPES.join("', '")}'"
245
256
  @errors << "RELEASE_TYPE must be given and be one of #{valid_release_types}"
246
257
  false
247
258
  end
@@ -252,6 +263,7 @@ module CreateGithubRelease
252
263
  def validate_release_type
253
264
  return true if release_type.nil? || VALID_RELEASE_TYPES.include?(release_type)
254
265
 
266
+ valid_release_types = "'#{VALID_RELEASE_TYPES.join("', '")}'"
255
267
  @errors << "RELEASE_TYPE '#{release_type}' is not valid. Must be one of #{valid_release_types}"
256
268
  false
257
269
  end
@@ -364,4 +376,3 @@ module CreateGithubRelease
364
376
  end
365
377
  # rubocop:enable Metrics/ClassLength
366
378
  end
367
- # rubocop:enable Metrics/ModuleLength
@@ -46,7 +46,7 @@ module CreateGithubRelease
46
46
  #
47
47
  # @param args [Array<String>] the command line arguments
48
48
  #
49
- # @return [CreateGithubRelease::Options] the options
49
+ # @return [CreateGithubRelease::CommandLineOptions] the options
50
50
  #
51
51
  def parse(*args)
52
52
  begin
@@ -72,7 +72,7 @@ module CreateGithubRelease
72
72
  # options = parser.options
73
73
  # options.release_type # => 'major'
74
74
  #
75
- # @return [CreateGithubRelease::Options] the options
75
+ # @return [CreateGithubRelease::CommandLineOptions] the options
76
76
  #
77
77
  # @api private
78
78
  #
@@ -128,6 +128,7 @@ module CreateGithubRelease
128
128
  # @return [void]
129
129
  # @api private
130
130
  def define_options
131
+ # @sg-ignore
131
132
  option_parser.banner = "Usage:\n#{command_template}"
132
133
  option_parser.separator ''
133
134
  option_parser.separator "RELEASE_TYPE must be 'major', 'minor', or 'patch'"
@@ -199,7 +200,7 @@ module CreateGithubRelease
199
200
  # @return [void]
200
201
  # @api private
201
202
  def define_last_release_version_option
202
- option_parser.on('--last-release-version=VERSION', 'Use this version instead `bump current`') do |version|
203
+ option_parser.on('--last-release-version=VERSION', 'Use this version instead `semverify current`') do |version|
203
204
  options.last_release_version = version
204
205
  end
205
206
  end
@@ -208,7 +209,10 @@ module CreateGithubRelease
208
209
  # @return [void]
209
210
  # @api private
210
211
  def define_next_release_version_option
211
- option_parser.on('--next-release-version=VERSION', 'Use this version instead `bump RELEASE_TYPE`') do |version|
212
+ option_parser.on(
213
+ '--next-release-version=VERSION',
214
+ 'Use this version instead `semverify next-RELEASE_TYPE`'
215
+ ) do |version|
212
216
  options.next_release_version = version
213
217
  end
214
218
  end
@@ -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
@@ -22,7 +22,8 @@ module CreateGithubRelease
22
22
  #
23
23
  # The recommended way to set the attributes is to use method 2 to override values
24
24
  # and otherwise method 3 to use the default value. Method 1 is only recommended for testing
25
- # or if there is no other way to accomplish what you need.
25
+ # or if there is no other way to accomplish what you need. Method 1 should ONLY be
26
+ # used in the block passed to the initializer.
26
27
  #
27
28
  # @example calling `.new` without a block
28
29
  # options = CreateGithubRelease::CommandLineOptions.new { |o| o.release_type = 'minor' }
@@ -45,6 +46,8 @@ module CreateGithubRelease
45
46
  def initialize(options)
46
47
  @options = options
47
48
  yield self if block_given?
49
+
50
+ setup_first_release if release_type == 'first'
48
51
  end
49
52
 
50
53
  # @!attribute options [r]
@@ -65,7 +68,9 @@ module CreateGithubRelease
65
68
  :last_release_tag, :last_release_version, :release_branch, :release_log_url,
66
69
  :release_type, :release_url, :remote, :remote_base_url, :remote_repository, :remote_url,
67
70
  :changelog_path, :changes, :next_release_description, :last_release_changelog,
68
- :next_release_changelog, :verbose, :quiet
71
+ :next_release_changelog, :first_commit, :verbose, :quiet
72
+
73
+ # attr_writer :first_release
69
74
 
70
75
  # @!attribute [rw] default_branch
71
76
  #
@@ -188,7 +193,7 @@ module CreateGithubRelease
188
193
  #
189
194
  # The version of the next release
190
195
  #
191
- # @example By default, `next_release_version` is based on the value returned by `bump show-next <release_type>`
196
+ # @example By default, `next_release_version` is based on the value returned by `semverify <release_type> --dry-run`
192
197
  # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
193
198
  # project = CreateGithubRelease::Project.new(options)
194
199
  # project.next_release_version #=> '1.0.0'
@@ -201,17 +206,12 @@ module CreateGithubRelease
201
206
  #
202
207
  # @return [String]
203
208
  #
204
- # @raise [RuntimeError] if the bump command fails
209
+ # @raise [RuntimeError] if the semverify command fails
205
210
  #
206
211
  # @api public
207
212
  #
208
213
  def next_release_version
209
- @next_release_version ||= options.next_release_version || begin
210
- output = `bump show-next #{release_type}`
211
- raise 'Could not determine next version using bump' unless $CHILD_STATUS.success?
212
-
213
- output.lines.last.chomp
214
- end
214
+ @next_release_version ||= options.next_release_version || next_version
215
215
  end
216
216
 
217
217
  # @!attribute [rw] last_release_tag
@@ -237,14 +237,14 @@ module CreateGithubRelease
237
237
  # @api public
238
238
  #
239
239
  def last_release_tag
240
- @last_release_tag ||= "v#{last_release_version}"
240
+ @last_release_tag ||= (first_release? ? '' : "v#{last_release_version}")
241
241
  end
242
242
 
243
243
  # @!attribute [rw] last_release_version
244
244
  #
245
245
  # The version of the last release
246
246
  #
247
- # @example By default, `last_release_version` is based on the value returned by `bump current`
247
+ # @example By default, `last_release_version` is based on the value returned by `semverify current`
248
248
  # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
249
249
  # project = CreateGithubRelease::Project.new(options)
250
250
  # project.last_release_version #=> '0.0.1'
@@ -257,17 +257,12 @@ module CreateGithubRelease
257
257
  #
258
258
  # @return [String]
259
259
  #
260
- # @raise [RuntimeError] if the bump command fails
260
+ # @raise [RuntimeError] if the semverify command fails
261
261
  #
262
262
  # @api public
263
263
  #
264
264
  def last_release_version
265
- @last_release_version ||= options.last_release_version || begin
266
- output = `bump current`
267
- raise 'Could not determine current version using bump' unless $CHILD_STATUS.success?
268
-
269
- output.lines.last.chomp
270
- end
265
+ @last_release_version ||= options.last_release_version || current_version
271
266
  end
272
267
 
273
268
  # @!attribute [rw] release_branch
@@ -288,7 +283,7 @@ module CreateGithubRelease
288
283
  #
289
284
  # @return [String]
290
285
  #
291
- # @raise [RuntimeError] if the bump command fails
286
+ # @raise [RuntimeError] if the semverify command fails
292
287
  #
293
288
  # @api public
294
289
  #
@@ -316,19 +311,23 @@ module CreateGithubRelease
316
311
  #
317
312
  # @return [URI]
318
313
  #
319
- # @raise [RuntimeError] if the bump command fails
314
+ # @raise [RuntimeError] if the semverify command fails
320
315
  #
321
316
  # @api public
322
317
  #
323
318
  def release_log_url
324
- @release_log_url ||= URI.parse("#{remote_url}/compare/#{last_release_tag}..#{next_release_tag}")
319
+ @release_log_url ||= begin
320
+ from = first_release? ? first_commit : last_release_tag
321
+ to = next_release_tag
322
+ URI.parse("#{remote_url}/compare/#{from}..#{to}")
323
+ end
325
324
  end
326
325
 
327
326
  # @!attribute [rw] release_type
328
327
  #
329
328
  # The type of the release being created (e.g. 'major', 'minor', 'patch')
330
329
  #
331
- # @note this must be one of the values accepted by the `bump` command
330
+ # @note this must be one of the values accepted by the `semverify` command
332
331
  #
333
332
  # @example By default, this value comes from the options object
334
333
  # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
@@ -368,7 +367,7 @@ module CreateGithubRelease
368
367
  # project.release_url = URI.parse('https://github.com/org/repo/releases/tag/v1.0.0')
369
368
  # project.release_url #=> #<URI::HTTPS https://github.com/org/repo/releases/tag/v1.0.0>
370
369
  #
371
- # @return [URI]
370
+ # @return [URI::Generic]
372
371
  #
373
372
  # @api public
374
373
  #
@@ -420,7 +419,7 @@ module CreateGithubRelease
420
419
  # project.remote_base_url = URI.parse('https://github.com/')
421
420
  # project.remote_base_url #=> #<URI::HTTPS https://github.com/>
422
421
  #
423
- # @return [URI]
422
+ # @return [URI::Generic]
424
423
  #
425
424
  # @api public
426
425
  #
@@ -536,7 +535,9 @@ module CreateGithubRelease
536
535
  #
537
536
  def changes
538
537
  @changes ||= begin
539
- command = "git log 'HEAD' '^#{last_release_tag}' --oneline --format='format:%h\t%s'"
538
+ tip = "'HEAD'"
539
+ base = first_release? ? '' : "'^#{last_release_tag}' "
540
+ command = "git log #{tip} #{base}--oneline --format='format:%h\t%s'"
540
541
  git_log = `#{command}`
541
542
  raise "Could not determine changes since #{last_release_tag}" unless $CHILD_STATUS.success?
542
543
 
@@ -573,15 +574,18 @@ module CreateGithubRelease
573
574
  # @api public
574
575
  #
575
576
  def next_release_description
576
- @next_release_description ||= <<~DESCRIPTION
577
- ## #{next_release_tag} (#{next_release_date.strftime('%Y-%m-%d')})
577
+ @next_release_description ||= begin
578
+ header = first_release? ? 'Changes:' : "Changes since #{last_release_tag}:"
579
+ <<~DESCRIPTION
580
+ ## #{next_release_tag} (#{next_release_date.strftime('%Y-%m-%d')})
578
581
 
579
- [Full Changelog](#{release_log_url})
582
+ [Full Changelog](#{release_log_url})
580
583
 
581
- Changes since #{last_release_tag}:
584
+ #{header}
582
585
 
583
- #{list_of_changes}
584
- DESCRIPTION
586
+ #{list_of_changes}
587
+ DESCRIPTION
588
+ end
585
589
  end
586
590
 
587
591
  # @!attribute [rw] last_release_changelog
@@ -689,6 +693,7 @@ module CreateGithubRelease
689
693
  #
690
694
  def to_s
691
695
  <<~OUTPUT
696
+ first_release: #{first_release}
692
697
  default_branch: #{default_branch}
693
698
  next_release_tag: #{next_release_tag}
694
699
  next_release_date: #{next_release_date}
@@ -758,8 +763,84 @@ module CreateGithubRelease
758
763
 
759
764
  alias quiet? quiet
760
765
 
766
+ # @!attribute [rw] last_release_changelog
767
+ #
768
+ # true if release_type is 'first' otherwise false
769
+ #
770
+ # @example Returns true if release_type is 'first'
771
+ # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'first')
772
+ # project = CreateGithubRelease::Project.new(options)
773
+ # project.first_release? #=> true
774
+ #
775
+ # @example Returnss false if release_type is not 'first'
776
+ # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
777
+ # project = CreateGithubRelease::Project.new(options)
778
+ # project.first_release? #=> false
779
+ #
780
+ # @return [Boolean]
781
+ #
782
+ # @api public
783
+ #
784
+ def first_release
785
+ @first_release ||= release_type == 'first'
786
+ end
787
+
788
+ alias first_release? first_release
789
+
790
+ # @!attribute [rw] first_commit
791
+ #
792
+ # The SHA of the oldest commit that is an ancestor of HEAD
793
+ #
794
+ # @example
795
+ # options = CreateGithubRelease::CommandLineOptions.new(release_type: 'major')
796
+ # project = CreateGithubRelease::Project.new(options)
797
+ # project.first_commit? #=> '1234567'
798
+ #
799
+ # @return [String]
800
+ #
801
+ # @api public
802
+ #
803
+ def first_commit
804
+ @first_commit ||= begin
805
+ command = "git log 'HEAD' --oneline --format='format:%h'"
806
+ git_log = `#{command}`
807
+ raise "Could not list changes from first commit up to #{last_release_tag}" unless $CHILD_STATUS.success?
808
+
809
+ git_log.split("\n").last.chomp
810
+ end
811
+ end
812
+
761
813
  private
762
814
 
815
+ # The current version of the project as determined by semverify
816
+ # @return [String] The current version of the project
817
+ # @api private
818
+ def current_version
819
+ output = `semverify current`
820
+ raise 'Could not determine current version using semverify' unless $CHILD_STATUS.success?
821
+
822
+ output.lines.last.chomp
823
+ end
824
+
825
+ # The next version of the project as determined by semverify and release_type
826
+ # @return [String] The next version of the project
827
+ # @api private
828
+ def next_version
829
+ output = `semverify next-#{release_type} --dry-run`
830
+ raise 'Could not determine next version using semverify' unless $CHILD_STATUS.success?
831
+
832
+ output.lines.last.chomp
833
+ end
834
+
835
+ # Setup versions and tags for a first release
836
+ # @return [void]
837
+ # @api private
838
+ def setup_first_release
839
+ self.next_release_version = @next_release_version || current_version
840
+ self.last_release_version = ''
841
+ self.last_release_tag = ''
842
+ end
843
+
763
844
  # The list of changes in the release as a string
764
845
  # @return [String] The list of changes in the release as a string
765
846
  # @api private
@@ -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::CommandLineOptions]
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::CommandLineOptions]
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
@@ -5,12 +5,12 @@ require 'create_github_release/task_base'
5
5
 
6
6
  module CreateGithubRelease
7
7
  module Tasks
8
- # Update the gem version using Bump
8
+ # Update the gem version using semverify
9
9
  #
10
10
  # @api public
11
11
  #
12
12
  class UpdateVersion < TaskBase
13
- # Update the gem version using Bump
13
+ # Update the gem version using semverify
14
14
  #
15
15
  # @example
16
16
  # require 'create_github_release'
@@ -30,11 +30,37 @@ module CreateGithubRelease
30
30
  # @raise [SystemExit] if the task fails
31
31
  #
32
32
  def run
33
+ return if project.first_release?
34
+
33
35
  print 'Updating version...'
34
- message, result = Bump::Bump.run(project.release_type, commit: false)
35
- error "Could not bump version: #{message}" unless result.zero?
36
+ increment_version
37
+ stage_version_file
38
+ end
39
+
40
+ private
41
+
42
+ # Increment the version using semverify
43
+ # @return [void]
44
+ # @api private
45
+ def increment_version
46
+ `semverify next-#{project.release_type}`
47
+ error 'Could not increment version' unless $CHILD_STATUS.success?
48
+ end
49
+
50
+ # Return the path the the version file using semverify
51
+ # @return [String]
52
+ # @api private
53
+ def version_file
54
+ output = `semverify file`
55
+ error 'Semverify could determine the version file' unless $CHILD_STATUS.success?
36
56
 
37
- version_file = Bump::Bump.file
57
+ output.lines.last.chomp
58
+ end
59
+
60
+ # Identify the version file using semverify and stage the change to it
61
+ # @return [void]
62
+ # @api private
63
+ def stage_version_file
38
64
  `git add "#{version_file}"`
39
65
  if $CHILD_STATUS.success?
40
66
  puts 'OK'
@@ -2,5 +2,5 @@
2
2
 
3
3
  module CreateGithubRelease
4
4
  # The version of this gem
5
- VERSION = '0.3.0'
5
+ VERSION = '1.1.0'
6
6
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: create_github_release
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-01-30 00:00:00.000000000 Z
11
+ date: 2023-10-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bump
14
+ name: semverify
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.10'
20
- type: :development
19
+ version: '0.3'
20
+ type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.10'
26
+ version: '0.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler-audit
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.9'
41
+ - !ruby/object:Gem::Dependency
42
+ name: debug
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.7'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.7'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rake
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +108,20 @@ dependencies:
94
108
  - - "~>"
95
109
  - !ruby/object:Gem::Version
96
110
  version: '1.36'
111
+ - !ruby/object:Gem::Dependency
112
+ name: ruby-debug-ide
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0.7'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0.7'
97
125
  - !ruby/object:Gem::Dependency
98
126
  name: simplecov
99
127
  requirement: !ruby/object:Gem::Requirement
@@ -128,14 +156,14 @@ dependencies:
128
156
  requirements:
129
157
  - - "~>"
130
158
  - !ruby/object:Gem::Version
131
- version: '0.47'
159
+ version: '0.49'
132
160
  type: :development
133
161
  prerelease: false
134
162
  version_requirements: !ruby/object:Gem::Requirement
135
163
  requirements:
136
164
  - - "~>"
137
165
  - !ruby/object:Gem::Version
138
- version: '0.47'
166
+ version: '0.49'
139
167
  - !ruby/object:Gem::Dependency
140
168
  name: timecop
141
169
  requirement: !ruby/object:Gem::Requirement
@@ -178,7 +206,9 @@ dependencies:
178
206
  - - "~>"
179
207
  - !ruby/object:Gem::Version
180
208
  version: '0.9'
181
- description: Create a GitHub release PR for a Ruby Gem
209
+ description: |
210
+ A script that manages your gem version and creates a GitHub branch, PR, and
211
+ release for a new gem version.
182
212
  email:
183
213
  - jcouball@yahoo.com
184
214
  executables:
@@ -189,6 +219,8 @@ files:
189
219
  - ".markdownlint.yml"
190
220
  - ".rspec"
191
221
  - ".rubocop.yml"
222
+ - ".solargraph.yml"
223
+ - ".vscode/launch.json"
192
224
  - ".yardopts"
193
225
  - CHANGELOG.md
194
226
  - Gemfile
@@ -251,15 +283,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
251
283
  requirements:
252
284
  - - ">="
253
285
  - !ruby/object:Gem::Version
254
- version: 2.7.0
286
+ version: 3.0.0
255
287
  required_rubygems_version: !ruby/object:Gem::Requirement
256
288
  requirements:
257
289
  - - ">="
258
290
  - !ruby/object:Gem::Version
259
291
  version: '0'
260
292
  requirements: []
261
- rubygems_version: 3.2.3
293
+ rubygems_version: 3.4.14
262
294
  signing_key:
263
295
  specification_version: 4
264
- summary: Create a GitHub release PR for a Ruby Gem
296
+ summary: A script to create a GitHub release for a Ruby Gem
265
297
  test_files: []