create_github_release 0.2.1 → 1.0.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 +4 -4
- data/.markdownlint.yml +1 -1
- data/CHANGELOG.md +21 -0
- data/LICENSE.txt +1 -1
- data/README.md +254 -32
- data/create_github_release.gemspec +6 -2
- data/exe/create-github-release +12 -8
- data/lib/create_github_release/assertion_base.rb +25 -11
- data/lib/create_github_release/assertions/bundle_is_up_to_date.rb +4 -3
- data/lib/create_github_release/assertions/{docker_is_running.rb → gh_authenticated.rb} +9 -8
- data/lib/create_github_release/assertions/gh_command_exists.rb +3 -2
- data/lib/create_github_release/assertions/git_command_exists.rb +3 -2
- data/lib/create_github_release/assertions/in_git_repo.rb +3 -2
- data/lib/create_github_release/assertions/in_repo_root_directory.rb +3 -2
- data/lib/create_github_release/assertions/last_release_tag_exists.rb +47 -0
- data/lib/create_github_release/assertions/local_and_remote_on_same_commit.rb +4 -3
- data/lib/create_github_release/assertions/local_release_branch_does_not_exist.rb +6 -5
- data/lib/create_github_release/assertions/local_release_tag_does_not_exist.rb +3 -3
- data/lib/create_github_release/assertions/no_staged_changes.rb +3 -2
- data/lib/create_github_release/assertions/no_uncommitted_changes.rb +3 -2
- data/lib/create_github_release/assertions/on_default_branch.rb +5 -4
- data/lib/create_github_release/assertions/remote_release_branch_does_not_exist.rb +6 -5
- data/lib/create_github_release/assertions/remote_release_tag_does_not_exist.rb +6 -5
- data/lib/create_github_release/assertions.rb +2 -2
- data/lib/create_github_release/backtick_debug.rb +69 -0
- data/lib/create_github_release/change.rb +73 -0
- data/lib/create_github_release/changelog.rb +40 -68
- data/lib/create_github_release/command_line_options.rb +367 -0
- data/lib/create_github_release/command_line_parser.rb +113 -25
- data/lib/create_github_release/project.rb +868 -0
- data/lib/create_github_release/release_assertions.rb +3 -3
- data/lib/create_github_release/release_tasks.rb +1 -1
- data/lib/create_github_release/task_base.rb +25 -11
- data/lib/create_github_release/tasks/commit_release.rb +4 -3
- data/lib/create_github_release/tasks/create_github_release.rb +16 -35
- data/lib/create_github_release/tasks/create_release_branch.rb +6 -5
- data/lib/create_github_release/tasks/create_release_pull_request.rb +10 -42
- data/lib/create_github_release/tasks/create_release_tag.rb +6 -5
- data/lib/create_github_release/tasks/push_release.rb +5 -4
- data/lib/create_github_release/tasks/update_changelog.rb +16 -67
- data/lib/create_github_release/tasks/update_version.rb +33 -5
- data/lib/create_github_release/version.rb +1 -1
- data/lib/create_github_release.rb +4 -2
- metadata +27 -10
- data/.vscode/settings.json +0 -7
- data/lib/create_github_release/assertions/changelog_docker_container_exists.rb +0 -73
- data/lib/create_github_release/options.rb +0 -397
- data/lib/create_github_release/release.rb +0 -82
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: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-02-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bump
|
@@ -136,6 +136,20 @@ dependencies:
|
|
136
136
|
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0.47'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: timecop
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0.9'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0.9'
|
139
153
|
- !ruby/object:Gem::Dependency
|
140
154
|
name: yard
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -164,7 +178,9 @@ dependencies:
|
|
164
178
|
- - "~>"
|
165
179
|
- !ruby/object:Gem::Version
|
166
180
|
version: '0.9'
|
167
|
-
description:
|
181
|
+
description: |
|
182
|
+
A script that manages your gem version and creates a GitHub branch, PR, and
|
183
|
+
release for a new gem version.
|
168
184
|
email:
|
169
185
|
- jcouball@yahoo.com
|
170
186
|
executables:
|
@@ -175,7 +191,6 @@ files:
|
|
175
191
|
- ".markdownlint.yml"
|
176
192
|
- ".rspec"
|
177
193
|
- ".rubocop.yml"
|
178
|
-
- ".vscode/settings.json"
|
179
194
|
- ".yardopts"
|
180
195
|
- CHANGELOG.md
|
181
196
|
- Gemfile
|
@@ -188,12 +203,12 @@ files:
|
|
188
203
|
- lib/create_github_release/assertion_base.rb
|
189
204
|
- lib/create_github_release/assertions.rb
|
190
205
|
- lib/create_github_release/assertions/bundle_is_up_to_date.rb
|
191
|
-
- lib/create_github_release/assertions/
|
192
|
-
- lib/create_github_release/assertions/docker_is_running.rb
|
206
|
+
- lib/create_github_release/assertions/gh_authenticated.rb
|
193
207
|
- lib/create_github_release/assertions/gh_command_exists.rb
|
194
208
|
- lib/create_github_release/assertions/git_command_exists.rb
|
195
209
|
- lib/create_github_release/assertions/in_git_repo.rb
|
196
210
|
- lib/create_github_release/assertions/in_repo_root_directory.rb
|
211
|
+
- lib/create_github_release/assertions/last_release_tag_exists.rb
|
197
212
|
- lib/create_github_release/assertions/local_and_remote_on_same_commit.rb
|
198
213
|
- lib/create_github_release/assertions/local_release_branch_does_not_exist.rb
|
199
214
|
- lib/create_github_release/assertions/local_release_tag_does_not_exist.rb
|
@@ -202,10 +217,12 @@ files:
|
|
202
217
|
- lib/create_github_release/assertions/on_default_branch.rb
|
203
218
|
- lib/create_github_release/assertions/remote_release_branch_does_not_exist.rb
|
204
219
|
- lib/create_github_release/assertions/remote_release_tag_does_not_exist.rb
|
220
|
+
- lib/create_github_release/backtick_debug.rb
|
221
|
+
- lib/create_github_release/change.rb
|
205
222
|
- lib/create_github_release/changelog.rb
|
223
|
+
- lib/create_github_release/command_line_options.rb
|
206
224
|
- lib/create_github_release/command_line_parser.rb
|
207
|
-
- lib/create_github_release/
|
208
|
-
- lib/create_github_release/release.rb
|
225
|
+
- lib/create_github_release/project.rb
|
209
226
|
- lib/create_github_release/release_assertions.rb
|
210
227
|
- lib/create_github_release/release_tasks.rb
|
211
228
|
- lib/create_github_release/task_base.rb
|
@@ -243,8 +260,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
243
260
|
- !ruby/object:Gem::Version
|
244
261
|
version: '0'
|
245
262
|
requirements: []
|
246
|
-
rubygems_version: 3.
|
263
|
+
rubygems_version: 3.4.1
|
247
264
|
signing_key:
|
248
265
|
specification_version: 4
|
249
|
-
summary:
|
266
|
+
summary: A script to create a GitHub release for a Ruby Gem
|
250
267
|
test_files: []
|
data/.vscode/settings.json
DELETED
@@ -1,73 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'English'
|
4
|
-
require 'tmpdir'
|
5
|
-
require 'create_github_release/assertion_base'
|
6
|
-
|
7
|
-
module CreateGithubRelease
|
8
|
-
module Assertions
|
9
|
-
# Assert that the changelog docker container exists
|
10
|
-
#
|
11
|
-
# @api public
|
12
|
-
#
|
13
|
-
class ChangelogDockerContainerExists < AssertionBase
|
14
|
-
# Make sure the changelog docker container exists
|
15
|
-
#
|
16
|
-
# @example
|
17
|
-
# require 'create_github_release'
|
18
|
-
#
|
19
|
-
# options = CreateGithubRelease::Options.new { |o| o.release_type = 'major' }
|
20
|
-
# assertion = CreateGithubRelease::Assertions::ChangelogDockerContainerExists.new(options)
|
21
|
-
# begin
|
22
|
-
# assertion.assert
|
23
|
-
# puts 'Assertion passed'
|
24
|
-
# rescue SystemExit
|
25
|
-
# puts 'Assertion failed'
|
26
|
-
# end
|
27
|
-
#
|
28
|
-
# @return [void]
|
29
|
-
#
|
30
|
-
# @raise [SystemExit] if the assertion fails
|
31
|
-
#
|
32
|
-
def assert
|
33
|
-
Dir.mktmpdir do |dir|
|
34
|
-
@dir = dir
|
35
|
-
@docker_file = "#{dir}/Dockerfile"
|
36
|
-
File.write(@docker_file, DOCKERFILE)
|
37
|
-
assert_changelog_docker_container_exists
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
private
|
42
|
-
|
43
|
-
# Create the changelog docker container
|
44
|
-
# @return [void]
|
45
|
-
# @raise [SystemExit] if docker build fails
|
46
|
-
# @api private
|
47
|
-
def assert_changelog_docker_container_exists
|
48
|
-
print 'Checking that the changelog docker container exists (might take time to build)...'
|
49
|
-
`docker build --file "#{@docker_file}" --tag changelog-rs . 1>/dev/null 2>#{@dir}/stderr`
|
50
|
-
if $CHILD_STATUS.success?
|
51
|
-
puts 'OK'
|
52
|
-
else
|
53
|
-
error 'Failed to build the changelog-rs docker container'
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
DOCKERFILE = <<~CONTENTS
|
58
|
-
FROM rust
|
59
|
-
|
60
|
-
# Build the docker image (from this project's root directory):
|
61
|
-
# docker build --file Dockerfile.changelog-rs --tag changelog-rs .
|
62
|
-
#
|
63
|
-
# Use this image to output a changelog (from this project's root directory):
|
64
|
-
# docker run --rm --volume "$PWD:/worktree" changelog-rs v1.9.1 v1.10.0
|
65
|
-
|
66
|
-
RUN cargo install changelog-rs
|
67
|
-
WORKDIR /worktree
|
68
|
-
|
69
|
-
ENTRYPOINT ["/usr/local/cargo/bin/changelog-rs", "/worktree"]
|
70
|
-
CONTENTS
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
@@ -1,397 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'bump'
|
4
|
-
require 'uri'
|
5
|
-
|
6
|
-
module CreateGithubRelease
|
7
|
-
# Captures the options for this script
|
8
|
-
#
|
9
|
-
# @api public
|
10
|
-
#
|
11
|
-
class Options
|
12
|
-
# Initialize a new instance of Options
|
13
|
-
#
|
14
|
-
# @example Without a block
|
15
|
-
# options = Options.new
|
16
|
-
# options.release_type = 'minor'
|
17
|
-
#
|
18
|
-
# @example With a block
|
19
|
-
# options = Options.new do |o|
|
20
|
-
# o.release_type = 'minor'
|
21
|
-
# end
|
22
|
-
#
|
23
|
-
# @yield [self] an initialization block
|
24
|
-
# @yieldparam self [Options] the instance being initialized
|
25
|
-
# @yieldreturn [void] the return value is ignored
|
26
|
-
#
|
27
|
-
def initialize
|
28
|
-
yield self if block_given?
|
29
|
-
end
|
30
|
-
|
31
|
-
# @!attribute [rw] branch
|
32
|
-
#
|
33
|
-
# The release branch based on the `next_tag`
|
34
|
-
#
|
35
|
-
# @example By default, `branch` is based on the tag
|
36
|
-
# options = Options.new
|
37
|
-
# options.tag = 'v1.2.3'
|
38
|
-
# options.branch # => 'release-v1.2.3'
|
39
|
-
#
|
40
|
-
# @example `branch` can be set explicitly
|
41
|
-
# options = Options.new
|
42
|
-
# options.branch = 'prod-v9.9.9'
|
43
|
-
# options.branch # => 'prod-v9.9.9'
|
44
|
-
#
|
45
|
-
# @return [String] the release branch
|
46
|
-
#
|
47
|
-
def branch
|
48
|
-
@branch ||= "release-#{tag}"
|
49
|
-
end
|
50
|
-
|
51
|
-
# @!attribute [rw] current_tag
|
52
|
-
#
|
53
|
-
# The git tag of the previous release
|
54
|
-
#
|
55
|
-
# @example By default, `current_tag` is based on `current_version`
|
56
|
-
# options = Options.new
|
57
|
-
# options.current_version = '0.1.0'
|
58
|
-
# options.current_tag # => 'v0.1.0'
|
59
|
-
#
|
60
|
-
# @example `current_tag` can be set explicitly
|
61
|
-
# options = Options.new
|
62
|
-
# options.current_tag = 'v9.9.9'
|
63
|
-
# options.current_tag # => 'v9.9.9'
|
64
|
-
#
|
65
|
-
# @return [String] the current tag
|
66
|
-
#
|
67
|
-
def current_tag
|
68
|
-
@current_tag ||= "v#{current_version}"
|
69
|
-
end
|
70
|
-
|
71
|
-
# @!attribute [rw] current_version
|
72
|
-
#
|
73
|
-
# The current version of the project's gem as determined by `Bump::Bump.current`
|
74
|
-
#
|
75
|
-
# @example By default, `current_version` is based on `Bump::Bump.current`
|
76
|
-
# options = Options.new
|
77
|
-
# options.current_version # => 'v0.1.0'
|
78
|
-
#
|
79
|
-
# @example `current_version` can be set explicitly
|
80
|
-
# options = Options.new
|
81
|
-
# options.current_version = '9.9.9'
|
82
|
-
# options.current_version # => '9.9.9'
|
83
|
-
#
|
84
|
-
# @return [String] the current version
|
85
|
-
#
|
86
|
-
def current_version
|
87
|
-
@current_version ||= Bump::Bump.current
|
88
|
-
end
|
89
|
-
|
90
|
-
def current_version=(current_version)
|
91
|
-
self.current_tag = self.next_version = nil
|
92
|
-
@current_version = current_version
|
93
|
-
end
|
94
|
-
|
95
|
-
# @!attribute [rw] default_branch
|
96
|
-
#
|
97
|
-
# The default branch of the remote repository
|
98
|
-
#
|
99
|
-
# This is the default branch as reported by the `HEAD branch` returned by
|
100
|
-
# `git remote show #{remote}`.
|
101
|
-
#
|
102
|
-
# Uses the value of `remote` to determine the remote repository to query.
|
103
|
-
#
|
104
|
-
# @example By default, `default_branch` is based on `git remote show`
|
105
|
-
# options = Options.new
|
106
|
-
# options.default_branch # => 'main'
|
107
|
-
#
|
108
|
-
# @example `default_branch` can be set explicitly
|
109
|
-
# options = Options.new
|
110
|
-
# options.default_branch = 'master'
|
111
|
-
# options.current_version # => 'master'
|
112
|
-
#
|
113
|
-
# @return [String] the default branch of the remote repository
|
114
|
-
#
|
115
|
-
def default_branch
|
116
|
-
@default_branch ||= `git remote show '#{remote}'`.match(/HEAD branch: (.*?)$/)[1]
|
117
|
-
end
|
118
|
-
|
119
|
-
# @!attribute [rw] next_tag
|
120
|
-
#
|
121
|
-
# The tag to use for the next release based on `next_version`
|
122
|
-
#
|
123
|
-
# @example By default, `next_tag` is based on `next_version`
|
124
|
-
# options = Options.new
|
125
|
-
# options.next_version = '0.2.0'
|
126
|
-
# options.next_tag # => 'v0.2.0 '
|
127
|
-
#
|
128
|
-
# @example `next_tag` can be set explicitly
|
129
|
-
# options = Options.new
|
130
|
-
# options.next_tag = 'v9.9.9'
|
131
|
-
# options.next_tag # => 'v9.9.9'
|
132
|
-
#
|
133
|
-
# @return [String] the tag to use for the next release
|
134
|
-
#
|
135
|
-
def next_tag
|
136
|
-
@next_tag ||= "v#{next_version}"
|
137
|
-
end
|
138
|
-
|
139
|
-
def next_tag=(next_tag)
|
140
|
-
self.branch = self.release_url = nil
|
141
|
-
@next_tag = next_tag
|
142
|
-
end
|
143
|
-
|
144
|
-
alias tag next_tag
|
145
|
-
alias tag= next_tag=
|
146
|
-
|
147
|
-
# @!attribute [rw] next_version
|
148
|
-
#
|
149
|
-
# The version of the next release
|
150
|
-
#
|
151
|
-
# Both `release_type` and `current_version` are used to determine the next
|
152
|
-
# version using `Bump::Bump.next_version(release_type, current_version)`.
|
153
|
-
#
|
154
|
-
# @example `next_version` is determined by `release_type` and `current_version`
|
155
|
-
# options = Options.new
|
156
|
-
# options.release_type = 'major'
|
157
|
-
# options.current_version = '0.1.0'
|
158
|
-
# options.next_version # => '2.0.0'
|
159
|
-
#
|
160
|
-
# @example `next_version` can be set explicitly
|
161
|
-
# options = Options.new
|
162
|
-
# options.next_version = '9.9.9'
|
163
|
-
# options.next_version # => '9.9.9'
|
164
|
-
#
|
165
|
-
# @return [String] the version of the next release
|
166
|
-
#
|
167
|
-
def next_version
|
168
|
-
@next_version ||= Bump::Bump.next_version(release_type, current_version)
|
169
|
-
end
|
170
|
-
|
171
|
-
def next_version=(next_version)
|
172
|
-
self.tag = nil
|
173
|
-
@next_version = next_version
|
174
|
-
end
|
175
|
-
|
176
|
-
# Valid values for the `release_type` attribute
|
177
|
-
#
|
178
|
-
VALID_RELEASE_TYPES = %w[major minor patch].freeze
|
179
|
-
|
180
|
-
# @!attribute [rw] release_type
|
181
|
-
#
|
182
|
-
# The type of release to make: major, minor, or patch
|
183
|
-
#
|
184
|
-
# This is passed to `Bump` when determining the next version. `release_type`
|
185
|
-
# must be set before it is read.
|
186
|
-
#
|
187
|
-
# Reading this attribute when it has not been explicitly set will raise a RuntimeError.
|
188
|
-
# Writing anything by major, minor, or path will raise an ArgumentError.
|
189
|
-
#
|
190
|
-
# @example `release_type` can be set explicitly
|
191
|
-
# options = Options.new
|
192
|
-
# options.release_type = 'major'
|
193
|
-
# options.release_type # => 'major'
|
194
|
-
#
|
195
|
-
# @return [String] the release type
|
196
|
-
#
|
197
|
-
def release_type
|
198
|
-
raise 'release_type not set. Must be major, minor, or patch' if @release_type.nil?
|
199
|
-
|
200
|
-
@release_type
|
201
|
-
end
|
202
|
-
|
203
|
-
def release_type=(release_type)
|
204
|
-
unless VALID_RELEASE_TYPES.include?(release_type)
|
205
|
-
raise(ArgumentError, "Invalid release_type #{release_type}: must be major, minor, or patch")
|
206
|
-
end
|
207
|
-
|
208
|
-
self.next_version = nil
|
209
|
-
@release_type = release_type
|
210
|
-
end
|
211
|
-
|
212
|
-
# @!attribute [rw] quiet
|
213
|
-
#
|
214
|
-
# Run the script without no or minimal output
|
215
|
-
#
|
216
|
-
# @example By default, `quiet` is false
|
217
|
-
# options = Options.new
|
218
|
-
# options.quiet # => false
|
219
|
-
#
|
220
|
-
# @example `quiet` can be set explicitly
|
221
|
-
# options = Options.new
|
222
|
-
# options.quiet = true
|
223
|
-
# options.quiet # => true
|
224
|
-
#
|
225
|
-
# @return [Boolean] the quiet flag
|
226
|
-
#
|
227
|
-
def quiet
|
228
|
-
@quiet = false unless instance_variable_defined?(:@quiet)
|
229
|
-
@quiet
|
230
|
-
end
|
231
|
-
|
232
|
-
# @!attribute [rw] release_url
|
233
|
-
#
|
234
|
-
# The address of the GitHub release notes for the next release
|
235
|
-
#
|
236
|
-
# `remote_url` and `next_tag` are used to determine the release URL.
|
237
|
-
#
|
238
|
-
# @example Given the remote_url is https://github.com/user/repo.git and `next_tag` is v0.2.0
|
239
|
-
# options = Options.new
|
240
|
-
# options.release_url # => https://github.com/user/repo/releases/tag/v1.0.0
|
241
|
-
#
|
242
|
-
# @example `release_url` can be set explicitly
|
243
|
-
# options = Options.new
|
244
|
-
# options.release_url = "https://github.com/user/repo/releases/tag/v9.9.9"
|
245
|
-
# options.release_url # => "https://github.com/user/repo/releases/tag/v9.9.9"
|
246
|
-
#
|
247
|
-
# @return [String] the address of the GitHub release notes for the next release
|
248
|
-
#
|
249
|
-
def release_url
|
250
|
-
@release_url ||= begin
|
251
|
-
url = remote_url.to_s.sub(/\.git$/, '')
|
252
|
-
"#{url}/releases/tag/#{next_tag}"
|
253
|
-
end
|
254
|
-
end
|
255
|
-
|
256
|
-
# @!attribute [rw] remote
|
257
|
-
#
|
258
|
-
# The Git remote to use to get the remote repository URL
|
259
|
-
#
|
260
|
-
# The default is 'origin'.
|
261
|
-
#
|
262
|
-
# @example The default `remote`` is origin
|
263
|
-
# options = Options.new
|
264
|
-
# options.remote # => "origin"
|
265
|
-
#
|
266
|
-
# @example `remote` can be set explicitly
|
267
|
-
# options = Options.new
|
268
|
-
# options.remote = 'upstream'
|
269
|
-
# options.remote # => "upstream"
|
270
|
-
#
|
271
|
-
# @return [String] the address of the GitHub release notes for the next release
|
272
|
-
#
|
273
|
-
def remote
|
274
|
-
@remote ||= 'origin'
|
275
|
-
end
|
276
|
-
|
277
|
-
def remote=(remote)
|
278
|
-
self.default_branch = self.remote_url = nil
|
279
|
-
@remote = remote
|
280
|
-
end
|
281
|
-
|
282
|
-
# @!attribute [rw] remote_url
|
283
|
-
#
|
284
|
-
# The URL of the remote repository
|
285
|
-
#
|
286
|
-
# Uses the value of `remote` to determine the remote repository URL. This is
|
287
|
-
# the URL reported by `git remote get-url #{remote}`.
|
288
|
-
#
|
289
|
-
# @example
|
290
|
-
# options = Options.new
|
291
|
-
# options.remote_url # => "https://github.com/user/repo.git"
|
292
|
-
#
|
293
|
-
# @example Using a different `remote`
|
294
|
-
# options = Options.new
|
295
|
-
# options.remote = 'upstream'
|
296
|
-
# options.remote_url # => "https://github.com/another_user/upstream_repo.git"
|
297
|
-
#
|
298
|
-
# @return [URI] the URL of the remote repository
|
299
|
-
#
|
300
|
-
def remote_url
|
301
|
-
@remote_url ||= URI.parse(`git remote get-url '#{remote}'`.chomp)
|
302
|
-
end
|
303
|
-
|
304
|
-
def remote_url=(remote_url)
|
305
|
-
self.remote_base_url = self.remote_repository = self.release_url = nil
|
306
|
-
|
307
|
-
@remote_url = remote_url.nil? || remote_url.is_a?(URI) ? remote_url : URI.parse(remote_url)
|
308
|
-
end
|
309
|
-
|
310
|
-
# @!attribute [rw] remote_base_url
|
311
|
-
#
|
312
|
-
# The base URL of the remote repository
|
313
|
-
#
|
314
|
-
# This is the part of the `remote_url` excluding the path.
|
315
|
-
#
|
316
|
-
# @example Given the `remote_url` is https://github.com/user/repo.git
|
317
|
-
# options = Options.new
|
318
|
-
# options.remote_base_url # => "https://github.com/"
|
319
|
-
#
|
320
|
-
# @example `remote_base_url` can be set explicitly
|
321
|
-
# options = Options.new
|
322
|
-
# options.remote_base_url = 'https://gitlab.com/'
|
323
|
-
# options.remote_base_url # => "https://gitlab.com/"
|
324
|
-
#
|
325
|
-
# @return [String] the bsae URL of the remote repository
|
326
|
-
#
|
327
|
-
def remote_base_url
|
328
|
-
@remote_base_url ||= remote_url.to_s[0..-remote_url.path.length]
|
329
|
-
end
|
330
|
-
|
331
|
-
# @!attribute [rw] remote_repository
|
332
|
-
#
|
333
|
-
# The user and repository name of the remote repository
|
334
|
-
#
|
335
|
-
# This is the extracted from the `remote_url`.
|
336
|
-
#
|
337
|
-
# @example Given the `remote_url` is https://github.com/user/repo.git
|
338
|
-
# options = Options.new
|
339
|
-
# options.remote_repository # => "user/repo"
|
340
|
-
#
|
341
|
-
# @example `remote_repository` can be set explicitly
|
342
|
-
# options = Options.new
|
343
|
-
# options.remote_repository = 'foo/bar'
|
344
|
-
# options.remote_repository # => "foo/bar"
|
345
|
-
#
|
346
|
-
# @return [String] the bsae URL of the remote repository
|
347
|
-
#
|
348
|
-
def remote_repository
|
349
|
-
@remote_repository ||= remote_url.path.sub(%r{^/}, '').sub(/\.git$/, '')
|
350
|
-
end
|
351
|
-
|
352
|
-
attr_writer :branch, :current_tag, :default_branch, :quiet, :remote_base_url, :remote_repository, :release_url
|
353
|
-
|
354
|
-
# Returns a string representation of the options
|
355
|
-
#
|
356
|
-
# @example
|
357
|
-
# # Given that:
|
358
|
-
# # * the remote is 'origin'
|
359
|
-
# # * the url of origin is 'http://githib.com/main-branch/create_github_release.git'
|
360
|
-
# # * the default branch is 'main'
|
361
|
-
# # * the current version is '0.1.0'
|
362
|
-
# options = Options.new { |o| o.release_type = 'major' }
|
363
|
-
# puts options.to_s
|
364
|
-
# branch='release-v1.0.0'
|
365
|
-
# current_tag='v0.1.0'
|
366
|
-
# current_version='0.1.0'
|
367
|
-
# default_branch='main'
|
368
|
-
# next_tag='v1.0.0'
|
369
|
-
# next_version='1.0.0'
|
370
|
-
# quiet=false
|
371
|
-
# release_type='major'
|
372
|
-
# remote='origin'
|
373
|
-
# remote_url='https://github.com/main-branch/create_github_release.git'
|
374
|
-
# remote_base_url='https://github.com/'
|
375
|
-
# remote_repository='main-branch/create_github_release'
|
376
|
-
#
|
377
|
-
# @return [String] a string representation of the options
|
378
|
-
#
|
379
|
-
def to_s
|
380
|
-
<<~OUTPUT
|
381
|
-
branch='#{branch}'
|
382
|
-
current_tag='#{current_tag}'
|
383
|
-
current_version='#{current_version}'
|
384
|
-
default_branch='#{default_branch}'
|
385
|
-
next_tag='#{next_tag}'
|
386
|
-
next_version='#{next_version}'
|
387
|
-
quiet=#{quiet}
|
388
|
-
release_type='#{release_type}'
|
389
|
-
remote='#{remote}'
|
390
|
-
remote_url='#{remote_url}'
|
391
|
-
remote_base_url='#{remote_base_url}'
|
392
|
-
remote_repository='#{remote_repository}'
|
393
|
-
tag='#{tag}'
|
394
|
-
OUTPUT
|
395
|
-
end
|
396
|
-
end
|
397
|
-
end
|
@@ -1,82 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module CreateGithubRelease
|
4
|
-
# The release information needed to generate a changelog
|
5
|
-
#
|
6
|
-
# @api public
|
7
|
-
#
|
8
|
-
class Release
|
9
|
-
# Create a new release object
|
10
|
-
#
|
11
|
-
# @example
|
12
|
-
# tag = 'v0.1.1'
|
13
|
-
# date = Date.new(2022, 11, 7)
|
14
|
-
# description = <<~DESCRIPTION
|
15
|
-
# * e718690 Release v0.1.1 (#3)
|
16
|
-
# * a92453c Bug fix (#2)
|
17
|
-
# DESCRIPTION
|
18
|
-
#
|
19
|
-
# release = CreateGithubRelease::Release.new(tag, date, description)
|
20
|
-
# release.tag # => 'v0.1.1'
|
21
|
-
# release.date # => #<Date: 2022-11-07 ((2459773j,0s,0n),+0s,2299161j)>
|
22
|
-
# release.description # => "* e718690 Release v0.1.1 (#3)\n* a92453c Bug fix (#2)\n"
|
23
|
-
#
|
24
|
-
# @param tag [String] The tag of the release
|
25
|
-
# @param date [Date] The date of the release
|
26
|
-
# @param description [String] The description of the release (usually a bullet list of changes)
|
27
|
-
#
|
28
|
-
def initialize(tag, date, description)
|
29
|
-
@tag = tag
|
30
|
-
@date = date
|
31
|
-
@description = description
|
32
|
-
end
|
33
|
-
|
34
|
-
# The Git release tag
|
35
|
-
#
|
36
|
-
# @example
|
37
|
-
# tag = 'v0.1.1'
|
38
|
-
# date = Date.new(2022, 11, 7)
|
39
|
-
# description = <<~DESCRIPTION
|
40
|
-
# * e718690 Release v0.1.1 (#3)
|
41
|
-
# * a92453c Bug fix (#2)
|
42
|
-
# DESCRIPTION
|
43
|
-
#
|
44
|
-
# release = CreateGithubRelease::Release.new(tag, date, description)
|
45
|
-
# release.tag # => 'v0.1.1'
|
46
|
-
#
|
47
|
-
# @return [String] The Git release tag
|
48
|
-
attr_reader :tag
|
49
|
-
|
50
|
-
# The date the release tag was created
|
51
|
-
#
|
52
|
-
# @example
|
53
|
-
# tag = 'v0.1.1'
|
54
|
-
# date = Date.new(2022, 11, 7)
|
55
|
-
# description = <<~DESCRIPTION
|
56
|
-
# * e718690 Release v0.1.1 (#3)
|
57
|
-
# * a92453c Bug fix (#2)
|
58
|
-
# DESCRIPTION
|
59
|
-
#
|
60
|
-
# release = CreateGithubRelease::Release.new(tag, date, description)
|
61
|
-
# release.date # => #<Date: 2022-11-07 ((2459773j,0s,0n),+0s,2299161j)>
|
62
|
-
#
|
63
|
-
# @return [Date] The date the release tag was created
|
64
|
-
attr_reader :date
|
65
|
-
|
66
|
-
# The description of the release
|
67
|
-
#
|
68
|
-
# @example
|
69
|
-
# tag = 'v0.1.1'
|
70
|
-
# date = Date.new(2022, 11, 7)
|
71
|
-
# description = <<~DESCRIPTION
|
72
|
-
# * e718690 Release v0.1.1 (#3)
|
73
|
-
# * a92453c Bug fix (#2)
|
74
|
-
# DESCRIPTION
|
75
|
-
#
|
76
|
-
# release = CreateGithubRelease::Release.new(tag, date, description)
|
77
|
-
# release.description # => "* e718690 Release v0.1.1 (#3)\n* a92453c Bug fix (#2)\n"
|
78
|
-
#
|
79
|
-
# @return [String] The description of the release
|
80
|
-
attr_reader :description
|
81
|
-
end
|
82
|
-
end
|