create_github_release 0.2.1 → 0.3.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/CHANGELOG.md +12 -0
- data/LICENSE.txt +1 -1
- data/README.md +36 -21
- data/create_github_release.gemspec +1 -0
- 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 +45 -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 +787 -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 +4 -3
- data/lib/create_github_release/version.rb +1 -1
- data/lib/create_github_release.rb +4 -2
- metadata +23 -8
- 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
@@ -55,13 +55,13 @@ module CreateGithubRelease
|
|
55
55
|
CreateGithubRelease::Assertions::NoUncommittedChanges,
|
56
56
|
CreateGithubRelease::Assertions::NoStagedChanges,
|
57
57
|
CreateGithubRelease::Assertions::LocalAndRemoteOnSameCommit,
|
58
|
+
CreateGithubRelease::Assertions::LastReleaseTagExists,
|
58
59
|
CreateGithubRelease::Assertions::LocalReleaseTagDoesNotExist,
|
59
60
|
CreateGithubRelease::Assertions::RemoteReleaseTagDoesNotExist,
|
60
61
|
CreateGithubRelease::Assertions::LocalReleaseBranchDoesNotExist,
|
61
62
|
CreateGithubRelease::Assertions::RemoteReleaseBranchDoesNotExist,
|
62
|
-
CreateGithubRelease::Assertions::
|
63
|
-
CreateGithubRelease::Assertions::
|
64
|
-
CreateGithubRelease::Assertions::GhCommandExists
|
63
|
+
CreateGithubRelease::Assertions::GhCommandExists,
|
64
|
+
CreateGithubRelease::Assertions::GhAuthenticated
|
65
65
|
].freeze
|
66
66
|
|
67
67
|
# Run all assertions
|
@@ -46,11 +46,11 @@ module CreateGithubRelease
|
|
46
46
|
# @return [Array<Class>] The tasks that will be run to create a new Github release
|
47
47
|
#
|
48
48
|
TASKS = [
|
49
|
-
CreateGithubRelease::Tasks::CreateReleaseTag,
|
50
49
|
CreateGithubRelease::Tasks::CreateReleaseBranch,
|
51
50
|
CreateGithubRelease::Tasks::UpdateVersion,
|
52
51
|
CreateGithubRelease::Tasks::UpdateChangelog,
|
53
52
|
CreateGithubRelease::Tasks::CommitRelease,
|
53
|
+
CreateGithubRelease::Tasks::CreateReleaseTag,
|
54
54
|
CreateGithubRelease::Tasks::PushRelease,
|
55
55
|
CreateGithubRelease::Tasks::CreateGithubRelease,
|
56
56
|
CreateGithubRelease::Tasks::CreateReleasePullRequest
|
@@ -9,11 +9,14 @@ module CreateGithubRelease
|
|
9
9
|
# @api private
|
10
10
|
#
|
11
11
|
class TaskBase
|
12
|
-
# Create a new tasks object and save the given `
|
13
|
-
# @param
|
12
|
+
# Create a new tasks object and save the given `project`
|
13
|
+
# @param project [CreateGithubRelease::Project] the project to create the release for
|
14
14
|
# @api private
|
15
|
-
def initialize(
|
16
|
-
|
15
|
+
def initialize(project)
|
16
|
+
raise ArgumentError, 'project must be a CreateGithubRelease::Project' unless
|
17
|
+
project.is_a?(CreateGithubRelease::Project)
|
18
|
+
|
19
|
+
@project = project
|
17
20
|
end
|
18
21
|
|
19
22
|
# This method must be overriden by a subclass
|
@@ -27,27 +30,27 @@ module CreateGithubRelease
|
|
27
30
|
raise NotImplementedError
|
28
31
|
end
|
29
32
|
|
30
|
-
# @!attribute [r]
|
33
|
+
# @!attribute [r] project
|
31
34
|
#
|
32
|
-
# The
|
33
|
-
# @return [CreateGithubRelease::
|
35
|
+
# The project passed to the task object
|
36
|
+
# @return [CreateGithubRelease::Project]
|
34
37
|
# @api private
|
35
|
-
attr_reader :
|
38
|
+
attr_reader :project
|
36
39
|
|
37
40
|
# Calls `Kernel.print` if the `quiet` flag is not set in the `options`
|
38
41
|
# @param args [Array] the arguments to pass to `Kernel.print`
|
39
42
|
# @return [void]
|
40
43
|
# @api private
|
41
44
|
def print(*args)
|
42
|
-
super unless
|
45
|
+
super unless project.quiet?
|
43
46
|
end
|
44
47
|
|
45
|
-
# Calls `Kernel.puts` if the `quiet` flag is not set in the `
|
48
|
+
# Calls `Kernel.puts` if the `quiet` flag is not set in the `project`
|
46
49
|
# @param args [Array] the arguments to pass to `Kernel.puts`
|
47
50
|
# @return [void]
|
48
51
|
# @api private
|
49
52
|
def puts(*args)
|
50
|
-
super unless
|
53
|
+
super unless project.quiet?
|
51
54
|
end
|
52
55
|
|
53
56
|
# Writes a message to stderr and exits with exitcode 1
|
@@ -58,5 +61,16 @@ module CreateGithubRelease
|
|
58
61
|
warn "ERROR: #{message}"
|
59
62
|
exit 1
|
60
63
|
end
|
64
|
+
|
65
|
+
# `true` if the `project.verbose?` flag is `true`
|
66
|
+
# @return [Boolean]
|
67
|
+
# @api private
|
68
|
+
def backtick_debug?
|
69
|
+
project.verbose?
|
70
|
+
end
|
71
|
+
|
72
|
+
# This overrides the backtick operator for this class to output debug
|
73
|
+
# information if `verbose?` is true
|
74
|
+
include CreateGithubRelease::BacktickDebug
|
61
75
|
end
|
62
76
|
end
|
@@ -15,8 +15,9 @@ module CreateGithubRelease
|
|
15
15
|
# @example
|
16
16
|
# require 'create_github_release'
|
17
17
|
#
|
18
|
-
# options = CreateGithubRelease::
|
19
|
-
#
|
18
|
+
# options = CreateGithubRelease::CommandLineOptions.new { |o| o.release_type = 'major' }
|
19
|
+
# project = CreateGithubRelease::Project.new(options)
|
20
|
+
# task = CreateGithubRelease::Tasks::CommitRelease.new(project)
|
20
21
|
# begin
|
21
22
|
# task.run
|
22
23
|
# puts 'Task completed successfully'
|
@@ -30,7 +31,7 @@ module CreateGithubRelease
|
|
30
31
|
#
|
31
32
|
def run
|
32
33
|
print 'Making release commit...'
|
33
|
-
`git commit -s -m 'Release #{
|
34
|
+
`git commit -s -m 'Release #{project.next_release_tag}'`
|
34
35
|
if $CHILD_STATUS.success?
|
35
36
|
puts 'OK'
|
36
37
|
else
|
@@ -16,8 +16,9 @@ module CreateGithubRelease
|
|
16
16
|
# @example
|
17
17
|
# require 'create_github_release'
|
18
18
|
#
|
19
|
-
# options = CreateGithubRelease::
|
20
|
-
#
|
19
|
+
# options = CreateGithubRelease::CommandLineOptions.new { |o| o.release_type = 'major' }
|
20
|
+
# project = CreateGithubRelease::Project.new(options)
|
21
|
+
# task = CreateGithubRelease::Tasks::CreateGithubRelease.new(project)
|
21
22
|
# begin
|
22
23
|
# task.run
|
23
24
|
# puts 'Task completed successfully'
|
@@ -30,7 +31,7 @@ module CreateGithubRelease
|
|
30
31
|
# @raise [SystemExit] if the task fails
|
31
32
|
#
|
32
33
|
def run
|
33
|
-
path =
|
34
|
+
path = write_release_description_to_tmp_file(project.next_release_description)
|
34
35
|
begin
|
35
36
|
create_github_release(path)
|
36
37
|
ensure
|
@@ -43,10 +44,10 @@ module CreateGithubRelease
|
|
43
44
|
# Create the gh command to create the Github release
|
44
45
|
# @return [String] the command to run
|
45
46
|
# @api private
|
46
|
-
def gh_command(default_branch, tag,
|
47
|
+
def gh_command(default_branch, tag, tmp_path)
|
47
48
|
"gh release create '#{tag}' " \
|
48
49
|
"--title 'Release #{tag}' " \
|
49
|
-
"--notes-file '#{
|
50
|
+
"--notes-file '#{tmp_path}' " \
|
50
51
|
"--target '#{default_branch}'"
|
51
52
|
end
|
52
53
|
|
@@ -54,9 +55,9 @@ module CreateGithubRelease
|
|
54
55
|
# @return [void]
|
55
56
|
# @raise [SystemExit] if the gh command fails
|
56
57
|
# @api private
|
57
|
-
def create_github_release(
|
58
|
-
print "Creating GitHub release '#{
|
59
|
-
`#{gh_command(
|
58
|
+
def create_github_release(tmp_path)
|
59
|
+
print "Creating GitHub release '#{project.next_release_tag}'..."
|
60
|
+
`#{gh_command(project.default_branch, project.next_release_tag, tmp_path)}`
|
60
61
|
if $CHILD_STATUS.success?
|
61
62
|
puts 'OK'
|
62
63
|
else
|
@@ -64,43 +65,23 @@ module CreateGithubRelease
|
|
64
65
|
end
|
65
66
|
end
|
66
67
|
|
67
|
-
# Writes the
|
68
|
-
#
|
68
|
+
# Writes the release_description to a tmp file and returns the tmp file path
|
69
|
+
#
|
70
|
+
# The tmp file must be deleted by the caller.
|
71
|
+
#
|
72
|
+
# @return [String] the path to the tmp file that was create
|
69
73
|
# @raise [SystemExit] if a temp file could not be created
|
70
74
|
# @api private
|
71
|
-
def
|
75
|
+
def write_release_description_to_tmp_file(release_description)
|
72
76
|
begin
|
73
77
|
f = Tempfile.create
|
74
78
|
rescue StandardError => e
|
75
79
|
error "Could not create a temporary file: #{e.message}"
|
76
80
|
end
|
77
|
-
f.write(
|
81
|
+
f.write(release_description)
|
78
82
|
f.close
|
79
83
|
f.path
|
80
84
|
end
|
81
|
-
|
82
|
-
# Build the command that generates the description of the new release
|
83
|
-
# @return [String] the command to run
|
84
|
-
# @api private
|
85
|
-
def docker_command(git_dir, from_tag, to_tag)
|
86
|
-
"docker run --rm --volume '#{git_dir}:/worktree' changelog-rs '#{from_tag}' '#{to_tag}'"
|
87
|
-
end
|
88
|
-
|
89
|
-
# Generate the description of the new release using docker
|
90
|
-
# @return [void]
|
91
|
-
# @raise [SystemExit] if the docker command fails
|
92
|
-
# @api private
|
93
|
-
def generate_changelog
|
94
|
-
print 'Generating changelog...'
|
95
|
-
command = docker_command(FileUtils.pwd, options.current_tag, options.next_tag)
|
96
|
-
`#{command}`.rstrip.lines[1..].join.tap do
|
97
|
-
if $CHILD_STATUS.success?
|
98
|
-
puts 'OK'
|
99
|
-
else
|
100
|
-
error 'Could not generate the changelog'
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
85
|
end
|
105
86
|
end
|
106
87
|
end
|
@@ -15,8 +15,9 @@ module CreateGithubRelease
|
|
15
15
|
# @example
|
16
16
|
# require 'create_github_release'
|
17
17
|
#
|
18
|
-
# options = CreateGithubRelease::
|
19
|
-
#
|
18
|
+
# options = CreateGithubRelease::CommandLineOptions.new { |o| o.release_type = 'major' }
|
19
|
+
# project = CreateGithubRelease::Project.new(options)
|
20
|
+
# task = CreateGithubRelease::Tasks::CreateReleaseBranch.new(project)
|
20
21
|
# begin
|
21
22
|
# task.run
|
22
23
|
# puts 'Task completed successfully'
|
@@ -29,12 +30,12 @@ module CreateGithubRelease
|
|
29
30
|
# @raise [SystemExit] if the task fails
|
30
31
|
#
|
31
32
|
def run
|
32
|
-
print "Creating branch '#{
|
33
|
-
`git checkout -b '#{
|
33
|
+
print "Creating branch '#{project.release_branch}'..."
|
34
|
+
`git checkout -b '#{project.release_branch}' > /dev/null 2>&1`
|
34
35
|
if $CHILD_STATUS.success?
|
35
36
|
puts 'OK'
|
36
37
|
else
|
37
|
-
error "Could not create branch '#{
|
38
|
+
error "Could not create branch '#{project.release_branch}'" unless $CHILD_STATUS.success?
|
38
39
|
end
|
39
40
|
end
|
40
41
|
end
|
@@ -15,8 +15,9 @@ module CreateGithubRelease
|
|
15
15
|
# @example
|
16
16
|
# require 'create_github_release'
|
17
17
|
#
|
18
|
-
# options = CreateGithubRelease::
|
19
|
-
#
|
18
|
+
# options = CreateGithubRelease::CommandLineOptions.new { |o| o.release_type = 'major' }
|
19
|
+
# project = CreateGithubRelease::Project.new(options)
|
20
|
+
# task = CreateGithubRelease::Tasks::CreateReleasePullRequest.new(project)
|
20
21
|
# begin
|
21
22
|
# task.run
|
22
23
|
# puts 'Task completed successfully'
|
@@ -29,11 +30,11 @@ module CreateGithubRelease
|
|
29
30
|
# @raise [SystemExit] if the task fails
|
30
31
|
#
|
31
32
|
def run
|
32
|
-
|
33
|
+
tmp_path = write_pr_body_to_tmp_file
|
33
34
|
begin
|
34
|
-
create_release_pr(
|
35
|
+
create_release_pr(tmp_path)
|
35
36
|
ensure
|
36
|
-
File.unlink(
|
37
|
+
File.unlink(tmp_path)
|
37
38
|
end
|
38
39
|
end
|
39
40
|
|
@@ -45,8 +46,8 @@ module CreateGithubRelease
|
|
45
46
|
# @api private
|
46
47
|
def create_release_pr(path)
|
47
48
|
print 'Creating GitHub pull request...'
|
48
|
-
tag =
|
49
|
-
default_branch =
|
49
|
+
tag = project.next_release_tag
|
50
|
+
default_branch = project.default_branch
|
50
51
|
`gh pr create --title 'Release #{tag}' --body-file '#{path}' --base '#{default_branch}'`
|
51
52
|
if $CHILD_STATUS.success?
|
52
53
|
puts 'OK'
|
@@ -55,53 +56,20 @@ module CreateGithubRelease
|
|
55
56
|
end
|
56
57
|
end
|
57
58
|
|
58
|
-
# The body of the pull request
|
59
|
-
# @return [String] the body of the pull request
|
60
|
-
# @api private
|
61
|
-
def pr_body(changelog)
|
62
|
-
<<~BODY.chomp
|
63
|
-
## Change Log
|
64
|
-
#{changelog}
|
65
|
-
BODY
|
66
|
-
end
|
67
|
-
|
68
59
|
# Write the changelog to a new temporary file
|
69
60
|
# @return [String] the path to the temporary file
|
70
61
|
# @raise [SystemExit] if the temp could not be created
|
71
62
|
# @api private
|
72
|
-
def
|
63
|
+
def write_pr_body_to_tmp_file
|
73
64
|
begin
|
74
65
|
f = Tempfile.create
|
75
66
|
rescue StandardError => e
|
76
67
|
error "Could not create a temporary file: #{e.message}"
|
77
68
|
end
|
78
|
-
f.write(
|
69
|
+
f.write("# Release PR\n\n#{project.next_release_description}")
|
79
70
|
f.close
|
80
71
|
f.path
|
81
72
|
end
|
82
|
-
|
83
|
-
# The command to list the changes in the relese
|
84
|
-
# @return [String] the command to run
|
85
|
-
# @api private
|
86
|
-
def docker_command(git_dir, from_tag, to_tag)
|
87
|
-
"docker run --rm --volume '#{git_dir}:/worktree' changelog-rs '#{from_tag}' '#{to_tag}'"
|
88
|
-
end
|
89
|
-
|
90
|
-
# Generate the list of changes in the release using docker
|
91
|
-
# @return [String] the list of changes
|
92
|
-
# @raise [SystemExit] if the docker command fails
|
93
|
-
# @api private
|
94
|
-
def generate_changelog
|
95
|
-
print 'Generating changelog...'
|
96
|
-
command = docker_command(FileUtils.pwd, options.current_tag, options.next_tag)
|
97
|
-
`#{command}`.rstrip.lines[1..].join.tap do
|
98
|
-
if $CHILD_STATUS.success?
|
99
|
-
puts 'OK'
|
100
|
-
else
|
101
|
-
error 'Could not generate the changelog'
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
73
|
end
|
106
74
|
end
|
107
75
|
end
|
@@ -15,8 +15,9 @@ module CreateGithubRelease
|
|
15
15
|
# @example
|
16
16
|
# require 'create_github_release'
|
17
17
|
#
|
18
|
-
# options = CreateGithubRelease::
|
19
|
-
#
|
18
|
+
# options = CreateGithubRelease::CommandLineOptions.new { |o| o.release_type = 'major' }
|
19
|
+
# project = CreateGithubRelease::Project.new(options)
|
20
|
+
# task = CreateGithubRelease::Tasks::CreateReleaseTag.new(project)
|
20
21
|
# begin
|
21
22
|
# task.run
|
22
23
|
# puts 'Task completed successfully'
|
@@ -29,12 +30,12 @@ module CreateGithubRelease
|
|
29
30
|
# @raise [SystemExit] if the task fails
|
30
31
|
#
|
31
32
|
def run
|
32
|
-
print "Creating tag '#{
|
33
|
-
`git tag '#{
|
33
|
+
print "Creating tag '#{project.next_release_tag}'..."
|
34
|
+
`git tag '#{project.next_release_tag}'`
|
34
35
|
if $CHILD_STATUS.success?
|
35
36
|
puts 'OK'
|
36
37
|
else
|
37
|
-
error "Could not create tag '#{
|
38
|
+
error "Could not create tag '#{project.next_release_tag}'"
|
38
39
|
end
|
39
40
|
end
|
40
41
|
end
|
@@ -15,8 +15,9 @@ module CreateGithubRelease
|
|
15
15
|
# @example
|
16
16
|
# require 'create_github_release'
|
17
17
|
#
|
18
|
-
# options = CreateGithubRelease::
|
19
|
-
#
|
18
|
+
# options = CreateGithubRelease::CommandLineOptions.new { |o| o.release_type = 'major' }
|
19
|
+
# project = CreateGithubRelease::Project.new(options)
|
20
|
+
# task = CreateGithubRelease::Tasks::PushRelease.new(project)
|
20
21
|
# begin
|
21
22
|
# task.run
|
22
23
|
# puts 'Task completed successfully'
|
@@ -29,8 +30,8 @@ module CreateGithubRelease
|
|
29
30
|
# @raise [SystemExit] if the task fails
|
30
31
|
#
|
31
32
|
def run
|
32
|
-
print "Pushing branch '#{
|
33
|
-
`git push --tags --set-upstream '#{
|
33
|
+
print "Pushing branch '#{project.release_branch}' to remote..."
|
34
|
+
`git push --tags --set-upstream '#{project.remote}' '#{project.release_branch}' > /dev/null 2>&1`
|
34
35
|
if $CHILD_STATUS.success?
|
35
36
|
puts 'OK'
|
36
37
|
else
|
@@ -13,11 +13,15 @@ module CreateGithubRelease
|
|
13
13
|
class UpdateChangelog < TaskBase
|
14
14
|
# Update the changelog file with changes made since the last release
|
15
15
|
#
|
16
|
+
# The changes since the last release are determined by using git log of all
|
17
|
+
# changes after the previous release tag up to and including HEAD.
|
18
|
+
#
|
16
19
|
# @example
|
17
20
|
# require 'create_github_release'
|
18
21
|
#
|
19
|
-
# options = CreateGithubRelease::
|
20
|
-
#
|
22
|
+
# options = CreateGithubRelease::CommandLineOptions.new { |o| o.release_type = 'major' }
|
23
|
+
# project = CreateGithubRelease::Project.new(options)
|
24
|
+
# task = CreateGithubRelease::Tasks::UpdateChangelog.new(project)
|
21
25
|
# begin
|
22
26
|
# task.run
|
23
27
|
# puts 'Task completed successfully'
|
@@ -30,11 +34,7 @@ module CreateGithubRelease
|
|
30
34
|
# @raise [SystemExit] if the task fails
|
31
35
|
#
|
32
36
|
def run
|
33
|
-
|
34
|
-
next_tag = options.next_tag
|
35
|
-
next_tag_date = next_tag_date(next_tag)
|
36
|
-
new_release = new_release(current_tag, next_tag, next_tag_date)
|
37
|
-
update_changelog(existing_changelog, new_release)
|
37
|
+
update_changelog
|
38
38
|
stage_updated_changelog
|
39
39
|
end
|
40
40
|
|
@@ -45,65 +45,13 @@ module CreateGithubRelease
|
|
45
45
|
# @raise [SystemExit] if the git command fails
|
46
46
|
# @api private
|
47
47
|
def stage_updated_changelog
|
48
|
-
print
|
49
|
-
|
50
|
-
`git add CHANGELOG.md`
|
51
|
-
if $CHILD_STATUS.success?
|
52
|
-
puts 'OK'
|
53
|
-
else
|
54
|
-
error 'Could not stage changes to CHANGELOG.md'
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
# Read the existing changelog file
|
59
|
-
# @return [String] the contents of the changelog file
|
60
|
-
# @raise [SystemExit] if the file cannot be read
|
61
|
-
# @api private
|
62
|
-
def existing_changelog
|
63
|
-
@existing_changelog ||= begin
|
64
|
-
File.read('CHANGELOG.md')
|
65
|
-
rescue Errno::ENOENT
|
66
|
-
''
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
# Find the date the release tag was created using git
|
71
|
-
# @return [Date] the date the release tag was created
|
72
|
-
# @raise [SystemExit] if the git command fails
|
73
|
-
# @api private
|
74
|
-
def next_tag_date(next_tag)
|
75
|
-
@next_tag_date ||= begin
|
76
|
-
print "Determining date #{next_tag} was created..."
|
77
|
-
date = `git show --format=format:%aI --quiet "#{next_tag}"`
|
78
|
-
if $CHILD_STATUS.success?
|
79
|
-
puts 'OK'
|
80
|
-
Date.parse(date)
|
81
|
-
else
|
82
|
-
error 'Could not stage changes to CHANGELOG.md'
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
48
|
+
print "Staging #{project.changelog_path}..."
|
86
49
|
|
87
|
-
|
88
|
-
# @return [String] the command to list the changes since the last release
|
89
|
-
# @api private
|
90
|
-
def docker_command(git_dir, from_tag, to_tag)
|
91
|
-
"docker run --rm --volume '#{git_dir}:/worktree' changelog-rs '#{from_tag}' '#{to_tag}'"
|
92
|
-
end
|
93
|
-
|
94
|
-
# Generate the new release section of the changelog
|
95
|
-
# @return [CreateGithubRelease::Release] the new release section of the changelog
|
96
|
-
# @raise [SystemExit] if the docker command fails
|
97
|
-
# @api private
|
98
|
-
def new_release(current_tag, next_tag, next_tag_date)
|
99
|
-
print 'Generating release notes...'
|
100
|
-
command = docker_command(FileUtils.pwd, current_tag, next_tag)
|
101
|
-
release_description = `#{command}`.rstrip.lines[1..].join
|
50
|
+
`git add #{project.changelog_path}`
|
102
51
|
if $CHILD_STATUS.success?
|
103
52
|
puts 'OK'
|
104
|
-
::CreateGithubRelease::Release.new(next_tag, next_tag_date, release_description)
|
105
53
|
else
|
106
|
-
error
|
54
|
+
error "Could not stage changes to #{project.changelog_path}"
|
107
55
|
end
|
108
56
|
end
|
109
57
|
|
@@ -111,13 +59,14 @@ module CreateGithubRelease
|
|
111
59
|
# @return [void]
|
112
60
|
# @raise [SystemExit] if the file cannot be written
|
113
61
|
# @api private
|
114
|
-
def update_changelog
|
115
|
-
print
|
116
|
-
changelog = ::CreateGithubRelease::Changelog.new(existing_changelog, new_release)
|
62
|
+
def update_changelog
|
63
|
+
print "Updating #{project.changelog_path}..."
|
117
64
|
begin
|
118
|
-
File.
|
65
|
+
# File.open('debug.txt', 'w') { |f| f.write("CHANGELOG:\n#{project.next_release_changelog}") }
|
66
|
+
File.write(project.changelog_path, project.next_release_changelog)
|
119
67
|
rescue StandardError => e
|
120
|
-
|
68
|
+
# File.open('debug.txt', 'w') { |f| f.write("#{project.changelog_path}\n\nERROR:\n#{e.message}") }
|
69
|
+
error "Could not update #{project.changelog_path}: #{e.message}"
|
121
70
|
end
|
122
71
|
puts 'OK'
|
123
72
|
end
|
@@ -15,8 +15,9 @@ module CreateGithubRelease
|
|
15
15
|
# @example
|
16
16
|
# require 'create_github_release'
|
17
17
|
#
|
18
|
-
# options = CreateGithubRelease::
|
19
|
-
#
|
18
|
+
# options = CreateGithubRelease::CommandLineOptions.new { |o| o.release_type = 'major' }
|
19
|
+
# project = CreateGithubRelease::Project.new(options)
|
20
|
+
# task = CreateGithubRelease::Tasks::UpdateVersion.new(project)
|
20
21
|
# begin
|
21
22
|
# task.run
|
22
23
|
# puts 'Task completed successfully'
|
@@ -30,7 +31,7 @@ module CreateGithubRelease
|
|
30
31
|
#
|
31
32
|
def run
|
32
33
|
print 'Updating version...'
|
33
|
-
message, result = Bump::Bump.run(
|
34
|
+
message, result = Bump::Bump.run(project.release_type, commit: false)
|
34
35
|
error "Could not bump version: #{message}" unless result.zero?
|
35
36
|
|
36
37
|
version_file = Bump::Bump.file
|
@@ -1,10 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'create_github_release/backtick_debug'
|
4
|
+
require 'create_github_release/command_line_options'
|
3
5
|
require 'create_github_release/command_line_parser'
|
6
|
+
require 'create_github_release/project'
|
4
7
|
|
8
|
+
require 'create_github_release/change'
|
5
9
|
require 'create_github_release/changelog'
|
6
|
-
require 'create_github_release/options'
|
7
|
-
require 'create_github_release/release'
|
8
10
|
|
9
11
|
require 'create_github_release/assertion_base'
|
10
12
|
require 'create_github_release/assertions'
|
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: 0.3.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-01-30 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
|
@@ -175,7 +189,6 @@ files:
|
|
175
189
|
- ".markdownlint.yml"
|
176
190
|
- ".rspec"
|
177
191
|
- ".rubocop.yml"
|
178
|
-
- ".vscode/settings.json"
|
179
192
|
- ".yardopts"
|
180
193
|
- CHANGELOG.md
|
181
194
|
- Gemfile
|
@@ -188,12 +201,12 @@ files:
|
|
188
201
|
- lib/create_github_release/assertion_base.rb
|
189
202
|
- lib/create_github_release/assertions.rb
|
190
203
|
- 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
|
204
|
+
- lib/create_github_release/assertions/gh_authenticated.rb
|
193
205
|
- lib/create_github_release/assertions/gh_command_exists.rb
|
194
206
|
- lib/create_github_release/assertions/git_command_exists.rb
|
195
207
|
- lib/create_github_release/assertions/in_git_repo.rb
|
196
208
|
- lib/create_github_release/assertions/in_repo_root_directory.rb
|
209
|
+
- lib/create_github_release/assertions/last_release_tag_exists.rb
|
197
210
|
- lib/create_github_release/assertions/local_and_remote_on_same_commit.rb
|
198
211
|
- lib/create_github_release/assertions/local_release_branch_does_not_exist.rb
|
199
212
|
- lib/create_github_release/assertions/local_release_tag_does_not_exist.rb
|
@@ -202,10 +215,12 @@ files:
|
|
202
215
|
- lib/create_github_release/assertions/on_default_branch.rb
|
203
216
|
- lib/create_github_release/assertions/remote_release_branch_does_not_exist.rb
|
204
217
|
- lib/create_github_release/assertions/remote_release_tag_does_not_exist.rb
|
218
|
+
- lib/create_github_release/backtick_debug.rb
|
219
|
+
- lib/create_github_release/change.rb
|
205
220
|
- lib/create_github_release/changelog.rb
|
221
|
+
- lib/create_github_release/command_line_options.rb
|
206
222
|
- lib/create_github_release/command_line_parser.rb
|
207
|
-
- lib/create_github_release/
|
208
|
-
- lib/create_github_release/release.rb
|
223
|
+
- lib/create_github_release/project.rb
|
209
224
|
- lib/create_github_release/release_assertions.rb
|
210
225
|
- lib/create_github_release/release_tasks.rb
|
211
226
|
- lib/create_github_release/task_base.rb
|
@@ -243,7 +258,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
243
258
|
- !ruby/object:Gem::Version
|
244
259
|
version: '0'
|
245
260
|
requirements: []
|
246
|
-
rubygems_version: 3.3
|
261
|
+
rubygems_version: 3.2.3
|
247
262
|
signing_key:
|
248
263
|
specification_version: 4
|
249
264
|
summary: Create a GitHub release PR for a Ruby Gem
|