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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +12 -0
  3. data/LICENSE.txt +1 -1
  4. data/README.md +36 -21
  5. data/create_github_release.gemspec +1 -0
  6. data/exe/create-github-release +12 -8
  7. data/lib/create_github_release/assertion_base.rb +25 -11
  8. data/lib/create_github_release/assertions/bundle_is_up_to_date.rb +4 -3
  9. data/lib/create_github_release/assertions/{docker_is_running.rb → gh_authenticated.rb} +9 -8
  10. data/lib/create_github_release/assertions/gh_command_exists.rb +3 -2
  11. data/lib/create_github_release/assertions/git_command_exists.rb +3 -2
  12. data/lib/create_github_release/assertions/in_git_repo.rb +3 -2
  13. data/lib/create_github_release/assertions/in_repo_root_directory.rb +3 -2
  14. data/lib/create_github_release/assertions/last_release_tag_exists.rb +45 -0
  15. data/lib/create_github_release/assertions/local_and_remote_on_same_commit.rb +4 -3
  16. data/lib/create_github_release/assertions/local_release_branch_does_not_exist.rb +6 -5
  17. data/lib/create_github_release/assertions/local_release_tag_does_not_exist.rb +3 -3
  18. data/lib/create_github_release/assertions/no_staged_changes.rb +3 -2
  19. data/lib/create_github_release/assertions/no_uncommitted_changes.rb +3 -2
  20. data/lib/create_github_release/assertions/on_default_branch.rb +5 -4
  21. data/lib/create_github_release/assertions/remote_release_branch_does_not_exist.rb +6 -5
  22. data/lib/create_github_release/assertions/remote_release_tag_does_not_exist.rb +6 -5
  23. data/lib/create_github_release/assertions.rb +2 -2
  24. data/lib/create_github_release/backtick_debug.rb +69 -0
  25. data/lib/create_github_release/change.rb +73 -0
  26. data/lib/create_github_release/changelog.rb +40 -68
  27. data/lib/create_github_release/command_line_options.rb +367 -0
  28. data/lib/create_github_release/command_line_parser.rb +113 -25
  29. data/lib/create_github_release/project.rb +787 -0
  30. data/lib/create_github_release/release_assertions.rb +3 -3
  31. data/lib/create_github_release/release_tasks.rb +1 -1
  32. data/lib/create_github_release/task_base.rb +25 -11
  33. data/lib/create_github_release/tasks/commit_release.rb +4 -3
  34. data/lib/create_github_release/tasks/create_github_release.rb +16 -35
  35. data/lib/create_github_release/tasks/create_release_branch.rb +6 -5
  36. data/lib/create_github_release/tasks/create_release_pull_request.rb +10 -42
  37. data/lib/create_github_release/tasks/create_release_tag.rb +6 -5
  38. data/lib/create_github_release/tasks/push_release.rb +5 -4
  39. data/lib/create_github_release/tasks/update_changelog.rb +16 -67
  40. data/lib/create_github_release/tasks/update_version.rb +4 -3
  41. data/lib/create_github_release/version.rb +1 -1
  42. data/lib/create_github_release.rb +4 -2
  43. metadata +23 -8
  44. data/.vscode/settings.json +0 -7
  45. data/lib/create_github_release/assertions/changelog_docker_container_exists.rb +0 -73
  46. data/lib/create_github_release/options.rb +0 -397
  47. data/lib/create_github_release/release.rb +0 -82
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f086029c9ddf7585de3b2872c59a6d6b4d5449038327cc26703a5dcf31fc5302
4
- data.tar.gz: 5c3eba003d79b8c676b8040f1fd359eb1b9a0271c873d70d930cd283eda743bd
3
+ metadata.gz: b6346efaa6cdc82095a7e3220d74dd359a10843f24f81c50037d9c85dbdc9dd8
4
+ data.tar.gz: 674903481a785730fde4910bd0994f0cbcbed3196e3355e37775058bc1b0215d
5
5
  SHA512:
6
- metadata.gz: 101af2b61d0a4a78b9ad776bf265981152a11134170c67133910e7f7ab3081f169bc5361b490dda4c5a218c2b46e2a22812a30613582d879ffc7080d058225f5
7
- data.tar.gz: 6cb1bbdcaa1bc974ef0a684648fb82df1be00ff67de2d50503130ce642bd3f0022935d77a2fdd2af7c4bbd992bde05167e48142d9a3b048ff5b779cd63f57a70
6
+ metadata.gz: bad25c4943faf700f6cb8593e42a5d2b2f879ec9e6f65fdcab120568e0fc4563b8e4972e76a595c8e2bfaabacba8ee5da98a9ab919bbc763a4aafdc889ba8588
7
+ data.tar.gz: 61b4028671f28e714cb88cfade742d515f45d7dba45a158865e2d94ea1ec3e609038ae95446274d018839f162a0743f5ae34f954ae1550016ad99b7afa6d07cf
data/CHANGELOG.md CHANGED
@@ -5,6 +5,18 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## v0.3.0 (2023-01-29)
9
+
10
+ [Full Changelog](https://github.com/main-branch/create_github_release/compare/v0.2.1..v0.3.0)
11
+
12
+ Changes since v0.2.1:
13
+
14
+ * 92ce55a Report "no changes" in the release description (#30)
15
+ * 1b3505b Assert that gh has been authenticated (#29)
16
+ * c7bd12d Complete redesign of this gem (#28)
17
+ * d75e1e9 Create release tag after committing release changes (#27)
18
+ * 24bdd02 Release v0.2.1
19
+
8
20
  ## v0.2.1 (2022-11-16)
9
21
 
10
22
  [Full Changelog](https://github.com/main-branch/create_github_release/compare/v0.2.0...v0.2.1)
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2022 James Couball
3
+ Copyright (c) 2023 James Couball
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -7,11 +7,40 @@
7
7
 
8
8
  Create a GitHub release for a new gem version.
9
9
 
10
- To create a new GitHub release for a gem, run the following from the top level
11
- project directory with the default branch selected:
12
-
13
- ```shell
14
- create-github-release [major|minor|patch]
10
+ The `create-github-release` script does the following:
11
+
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
19
+
20
+ You should merge the pull request once it is reviewed and approved.
21
+
22
+ Pull the changes from the default branch and publish your gem with the `rake release` command.
23
+
24
+ Here is the command line --help output:
25
+
26
+ ```text
27
+ Usage:
28
+ create-github-release --help | RELEASE_TYPE [options]
29
+
30
+ RELEASE_TYPE must be 'major', 'minor', or 'patch'
31
+
32
+ Options:
33
+ --default-branch=BRANCH_NAME Override the default branch
34
+ --release-branch=BRANCH_NAME Override the release branch to create
35
+ --remote=REMOTE_NAME Use this remote name instead of 'origin'
36
+ --last-release-version=VERSION
37
+ Use this version instead `bump current`
38
+ --next-release-version=VERSION
39
+ Use this version instead `bump RELEASE_TYPE`
40
+ --changelog-path=PATH Use this file instead of CHANGELOG.md
41
+ -q, --[no-]quiet Do not show output
42
+ -v, --[no-]verbose Show extra output
43
+ -h, --help Show this message
15
44
  ```
16
45
 
17
46
  The following conditions must be met in order to create a release:
@@ -21,21 +50,11 @@ The following conditions must be met in order to create a release:
21
50
  * The default branch must be checked out
22
51
  * There are no uncommitted changes
23
52
  * The local and remote must be on the same commit
53
+ * The last release tag must exist
24
54
  * The new release tag must not already exist either locally or remotely
25
55
  * The new release branch must not already exist either locally or remotely
26
- * Docker must be running
27
- * The changelog docker container must already exist or be able to be built
28
56
  * The gh command must be installed
29
57
 
30
- The result of running this command is:
31
- * A new release branch is created
32
- * CHANGELOG.md is updated with a list of PRs since the last release
33
- * The Gem version is updated via Bump
34
- * The CHANGELOG.md and version changes are committed and tagged on the new release branch
35
- * The new release branch is pushed to the remote
36
- * A release is created on GitHub
37
- * A release PR is created on GitHub
38
-
39
58
  ## Installation
40
59
 
41
60
  Add `create_github_release` as a development dependency in your project's gemspec:
@@ -52,11 +71,7 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
52
71
  `rake spec` to run the tests. You can also run `bin/console` for an interactive
53
72
  prompt that will allow you to experiment.
54
73
 
55
- To install this gem onto your local machine, run `bundle exec rake install`. To
56
- release a new version, update the version number in `version.rb`, and then run
57
- `bundle exec rake release`, which will create a git tag for the version, push git
58
- commits and the created tag, and push the `.gem` file to
59
- [rubygems.org](https://rubygems.org).
74
+ To install this gem onto your local machine, run `bundle exec rake install`.
60
75
 
61
76
  ## Contributing
62
77
 
@@ -40,6 +40,7 @@ Gem::Specification.new do |spec|
40
40
  spec.add_development_dependency 'simplecov', '~> 0.21'
41
41
  spec.add_development_dependency 'simplecov-lcov', '~> 0.8'
42
42
  spec.add_development_dependency 'solargraph', '~> 0.47'
43
+ spec.add_development_dependency 'timecop', '~> 0.9'
43
44
  spec.add_development_dependency 'yard', '~> 0.9'
44
45
  spec.add_development_dependency 'yardstick', '~> 0.9'
45
46
 
@@ -3,20 +3,24 @@
3
3
 
4
4
  require 'create_github_release'
5
5
 
6
- options = CreateGithubRelease::CommandLineParser.new.parse(ARGV)
7
- CreateGithubRelease::ReleaseAssertions.new(options).make_assertions
6
+ options = CreateGithubRelease::CommandLineParser.new.parse(*ARGV)
7
+ pp options if options.verbose
8
+
9
+ project = CreateGithubRelease::Project.new(options)
10
+
11
+ CreateGithubRelease::ReleaseAssertions.new(project).make_assertions
8
12
  puts unless options.quiet
9
- CreateGithubRelease::ReleaseTasks.new(options).run
13
+ CreateGithubRelease::ReleaseTasks.new(project).run
10
14
 
11
- puts <<~MESSAGE unless options.quiet
12
- Release '#{options.tag}' created successfully
13
- See the release notes at #{options.release_url}
15
+ puts <<~MESSAGE unless project.quiet
16
+ Release '#{project.next_release_tag}' created successfully
17
+ See the release notes at #{project.release_url}
14
18
 
15
19
  Next steps:
16
20
  * Get someone to review and approve the release pull request
17
21
  * Merge the pull request manually from the command line with the following commands:
18
22
 
19
- git checkout #{options.default_branch}
20
- git merge --ff-only #{options.branch}
23
+ git checkout #{project.default_branch}
24
+ git merge --ff-only #{project.release_branch}
21
25
  git push
22
26
  MESSAGE
@@ -9,11 +9,14 @@ module CreateGithubRelease
9
9
  # @api private
10
10
  #
11
11
  class AssertionBase
12
- # Create a new assertion object and save the given `options`
13
- # @param options [CreateGithubRelease::Options] the options
12
+ # Create a new assertion object and save the given `project`
13
+ # @param project [CreateGithubRelease::Project] the project to create a release for
14
14
  # @api private
15
- def initialize(options)
16
- @options = options
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
@@ -29,25 +32,25 @@ module CreateGithubRelease
29
32
 
30
33
  # @!attribute [r] options
31
34
  #
32
- # The options passed to the assertion object
33
- # @return [CreateGithubRelease::Options] the options
35
+ # The project passed to the assertion object
36
+ # @return [CreateGithubRelease::Project] the project to create a release for
34
37
  # @api private
35
- attr_reader :options
38
+ attr_reader :project
36
39
 
37
- # Calls `Kernel.print` if the `quiet` flag is not set in the `options`
40
+ # Calls `Kernel.print` if the `quiet` flag is not set in the `project`
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 options.quiet
45
+ super unless project.quiet?
43
46
  end
44
47
 
45
- # Calls `Kernel.puts` if the `quiet` flag is not set in the `options`
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 options.quiet
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
@@ -5,7 +5,7 @@ require 'create_github_release/assertion_base'
5
5
 
6
6
  module CreateGithubRelease
7
7
  module Assertions
8
- # Assert that options.branch does not exist
8
+ # Assert that project.release+branch does not exist
9
9
  #
10
10
  # Checks both the local repository and the remote repository.
11
11
  #
@@ -17,8 +17,9 @@ module CreateGithubRelease
17
17
  # @example
18
18
  # require 'create_github_release'
19
19
  #
20
- # options = CreateGithubRelease::Options.new { |o| o.release_type = 'major' }
21
- # assertion = CreateGithubRelease::Assertions::BundleIsUpToDate.new(options)
20
+ # options = CreateGithubRelease::CommandLineOptions.new { |o| o.release_type = 'major' }
21
+ # project = CreateGithubRelease::Project.new(options)
22
+ # assertion = CreateGithubRelease::Assertions::BundleIsUpToDate.new(project)
22
23
  # begin
23
24
  # assertion.assert
24
25
  # puts 'Assertion passed'
@@ -5,18 +5,19 @@ require 'create_github_release/assertion_base'
5
5
 
6
6
  module CreateGithubRelease
7
7
  module Assertions
8
- # Assert that docker is running
8
+ # Assert that the 'gh' command is in the path
9
9
  #
10
10
  # @api public
11
11
  #
12
- class DockerIsRunning < AssertionBase
13
- # Make sure that docker is running
12
+ class GhAuthenticated < AssertionBase
13
+ # Make sure that the 'gh' command is authenticated
14
14
  #
15
15
  # @example
16
16
  # require 'create_github_release'
17
17
  #
18
- # options = CreateGithubRelease::Options.new { |o| o.release_type = 'major' }
19
- # assertion = CreateGithubRelease::Assertions::DockerIsRunning.new(options)
18
+ # options = CreateGithubRelease::CommandLineOptions.new { |o| o.release_type = 'major' }
19
+ # project = CreateGithubRelease::Project.new(options)
20
+ # assertion = CreateGithubRelease::Assertions::GhAuthenticated.new(project)
20
21
  # begin
21
22
  # assertion.assert
22
23
  # puts 'Assertion passed'
@@ -29,12 +30,12 @@ module CreateGithubRelease
29
30
  # @raise [SystemExit] if the assertion fails
30
31
  #
31
32
  def assert
32
- print 'Checking that docker is installed and running...'
33
- `docker info > /dev/null 2>&1`
33
+ print 'Checking that the gh command is authenticated...'
34
+ output = `gh auth status 2>&1`
34
35
  if $CHILD_STATUS.success?
35
36
  puts 'OK'
36
37
  else
37
- error 'Docker is not installed or not running'
38
+ error "gh not authenticated:\n#{output}"
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::Options.new { |o| o.release_type = 'major' }
19
- # assertion = CreateGithubRelease::Assertions::GhCommandExists.new(options)
18
+ # options = CreateGithubRelease::CommandLineOptions.new { |o| o.release_type = 'major' }
19
+ # project = CreateGithubRelease::Project.new(options)
20
+ # assertion = CreateGithubRelease::Assertions::GhCommandExists.new(project)
20
21
  # begin
21
22
  # assertion.assert
22
23
  # puts 'Assertion passed'
@@ -15,8 +15,9 @@ module CreateGithubRelease
15
15
  # @example
16
16
  # require 'create_github_release'
17
17
  #
18
- # options = CreateGithubRelease::Options.new { |o| o.release_type = 'major' }
19
- # assertion = CreateGithubRelease::Assertions::GitCommandExists.new(options)
18
+ # options = CreateGithubRelease::CommandLineOptions.new { |o| o.release_type = 'major' }
19
+ # project = CreateGithubRelease::Project.new(options)
20
+ # assertion = CreateGithubRelease::Assertions::GitCommandExists.new(project)
20
21
  # begin
21
22
  # assertion.assert
22
23
  # puts 'Assertion passed'
@@ -17,8 +17,9 @@ module CreateGithubRelease
17
17
  # @example
18
18
  # require 'create_github_release'
19
19
  #
20
- # options = CreateGithubRelease::Options.new { |o| o.release_type = 'major' }
21
- # assertion = CreateGithubRelease::Assertions::InGitRepo.new(options)
20
+ # options = CreateGithubRelease::CommandLineOptions.new { |o| o.release_type = 'major' }
21
+ # project = CreateGithubRelease::Project.new(options)
22
+ # assertion = CreateGithubRelease::Assertions::InGitRepo.new(project)
22
23
  # begin
23
24
  # assertion.assert
24
25
  # puts 'Assertion passed'
@@ -18,8 +18,9 @@ module CreateGithubRelease
18
18
  # @example
19
19
  # require 'create_github_release'
20
20
  #
21
- # options = CreateGithubRelease::Options.new { |o| o.release_type = 'major' }
22
- # assertion = CreateGithubRelease::Assertions::InRepoRootDirectory.new(options)
21
+ # options = CreateGithubRelease::CommandLineOptions.new { |o| o.release_type = 'major' }
22
+ # project = CreateGithubRelease::Project.new(options)
23
+ # assertion = CreateGithubRelease::Assertions::InRepoRootDirectory.new(project)
23
24
  # begin
24
25
  # assertion.assert
25
26
  # puts 'Assertion passed'
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'English'
4
+ require 'create_github_release/assertion_base'
5
+
6
+ module CreateGithubRelease
7
+ module Assertions
8
+ # Assert that the release tag does not exist in the local repository
9
+ #
10
+ # @api public
11
+ #
12
+ class LastReleaseTagExists < AssertionBase
13
+ # Assert that the last release tag exists in the local repository
14
+ #
15
+ # @example
16
+ # require 'create_github_release'
17
+ #
18
+ # options = CreateGithubRelease::Options.new { |o| o.release_type = 'major' }
19
+ # assertion = CreateGithubRelease::Assertions::LastReleaseTagExists.new(options)
20
+ # begin
21
+ # assertion.assert
22
+ # puts 'Assertion passed'
23
+ # rescue SystemExit
24
+ # puts 'Assertion failed'
25
+ # end
26
+ #
27
+ # @return [void]
28
+ #
29
+ # @raise [SystemExit] if the assertion fails
30
+ #
31
+ def assert
32
+ print "Checking that last release tag '#{project.last_release_tag}' exists..."
33
+
34
+ tags = `git tag --list "#{project.last_release_tag}"`.chomp
35
+ error 'Could not list tags' unless $CHILD_STATUS.success?
36
+
37
+ if tags == ''
38
+ error "Last release tag '#{project.last_release_tag}' does not exist"
39
+ else
40
+ puts 'OK'
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -17,8 +17,9 @@ module CreateGithubRelease
17
17
  # @example
18
18
  # require 'create_github_release'
19
19
  #
20
- # options = CreateGithubRelease::Options.new { |o| o.release_type = 'major' }
21
- # assertion = CreateGithubRelease::Assertions::LocalAndRemoteOnSameCommit.new(options)
20
+ # options = CreateGithubRelease::CommandLineOptions.new { |o| o.release_type = 'major' }
21
+ # project = CreateGithubRelease::Project.new(options)
22
+ # assertion = CreateGithubRelease::Assertions::LocalAndRemoteOnSameCommit.new(project)
22
23
  # begin
23
24
  # assertion.assert
24
25
  # puts 'Assertion passed'
@@ -33,7 +34,7 @@ module CreateGithubRelease
33
34
  def assert
34
35
  print 'Checking that local and remote are on the same commit...'
35
36
  local_commit = `git rev-parse HEAD`.chomp
36
- remote_commit = `git ls-remote '#{options.remote}' '#{options.default_branch}' | cut -f 1`.chomp
37
+ remote_commit = `git ls-remote '#{project.remote}' '#{project.default_branch}' | cut -f 1`.chomp
37
38
  if local_commit == remote_commit
38
39
  puts 'OK'
39
40
  else
@@ -15,8 +15,9 @@ module CreateGithubRelease
15
15
  # @example
16
16
  # require 'create_github_release'
17
17
  #
18
- # options = CreateGithubRelease::Options.new { |o| o.release_type = 'major' }
19
- # assertion = CreateGithubRelease::Assertions::LocalReleaseBranchDoesNotExist.new(options)
18
+ # options = CreateGithubRelease::CommandLineOptions.new { |o| o.release_type = 'major' }
19
+ # project = CreateGithubRelease::Project.new(options)
20
+ # assertion = CreateGithubRelease::Assertions::LocalReleaseBranchDoesNotExist.new(project)
20
21
  # begin
21
22
  # assertion.assert
22
23
  # puts 'Assertion passed'
@@ -29,15 +30,15 @@ module CreateGithubRelease
29
30
  # @raise [SystemExit] if the assertion fails
30
31
  #
31
32
  def assert
32
- print "Checking that local branch ' #{options.branch}' does not exist..."
33
+ print "Checking that local branch ' #{project.release_branch}' does not exist..."
33
34
 
34
- branches = `git branch --list "#{options.branch}"`.chomp
35
+ branches = `git branch --list "#{project.release_branch}"`.chomp
35
36
  error 'Could not list branches' unless $CHILD_STATUS.success?
36
37
 
37
38
  if branches == ''
38
39
  puts 'OK'
39
40
  else
40
- error "Local branch '#{options.branch}' already exists"
41
+ error "Local branch '#{project.release_branch}' already exists"
41
42
  end
42
43
  end
43
44
  end
@@ -29,15 +29,15 @@ module CreateGithubRelease
29
29
  # @raise [SystemExit] if the assertion fails
30
30
  #
31
31
  def assert
32
- print "Checking that local tag '#{options.tag}' does not exist..."
32
+ print "Checking that local tag '#{project.next_release_tag}' does not exist..."
33
33
 
34
- tags = `git tag --list "#{options.tag}"`.chomp
34
+ tags = `git tag --list "#{project.next_release_tag}"`.chomp
35
35
  error 'Could not list tags' unless $CHILD_STATUS.success?
36
36
 
37
37
  if tags == ''
38
38
  puts 'OK'
39
39
  else
40
- error "Local tag '#{options.tag}' already exists"
40
+ error "Local tag '#{project.next_release_tag}' already exists"
41
41
  end
42
42
  end
43
43
  end
@@ -17,8 +17,9 @@ module CreateGithubRelease
17
17
  # @example
18
18
  # require 'create_github_release'
19
19
  #
20
- # options = CreateGithubRelease::Options.new { |o| o.release_type = 'major' }
21
- # assertion = CreateGithubRelease::Assertions::NoStagedChanges.new(options)
20
+ # options = CreateGithubRelease::CommandLineOptions.new { |o| o.release_type = 'major' }
21
+ # project = CreateGithubRelease::Project.new(options)
22
+ # assertion = CreateGithubRelease::Assertions::NoStagedChanges.new(project)
22
23
  # begin
23
24
  # assertion.assert
24
25
  # puts 'Assertion passed'
@@ -17,8 +17,9 @@ module CreateGithubRelease
17
17
  # @example
18
18
  # require 'create_github_release'
19
19
  #
20
- # options = CreateGithubRelease::Options.new { |o| o.release_type = 'major' }
21
- # assertion = CreateGithubRelease::Assertions::NoUncommittedChanges.new(options)
20
+ # options = CreateGithubRelease::CommandLineOptions.new { |o| o.release_type = 'major' }
21
+ # project = CreateGithubRelease::Project.new(options)
22
+ # assertion = CreateGithubRelease::Assertions::NoUncommittedChanges.new(project)
22
23
  # begin
23
24
  # assertion.assert
24
25
  # puts 'Assertion passed'
@@ -17,8 +17,9 @@ module CreateGithubRelease
17
17
  # @example
18
18
  # require 'create_github_release'
19
19
  #
20
- # options = CreateGithubRelease::Options.new { |o| o.release_type = 'major' }
21
- # assertion = CreateGithubRelease::Assertions::OnDefaultBranch.new(options)
20
+ # options = CreateGithubRelease::CommandLineOptions.new { |o| o.release_type = 'major' }
21
+ # project = CreateGithubRelease::Project.new(options)
22
+ # assertion = CreateGithubRelease::Assertions::OnDefaultBranch.new(project)
22
23
  # begin
23
24
  # assertion.assert
24
25
  # puts 'Assertion passed'
@@ -33,10 +34,10 @@ module CreateGithubRelease
33
34
  def assert
34
35
  print 'Checking that you are on the default branch...'
35
36
  current_branch = `git branch --show-current`.chomp
36
- if current_branch == options.default_branch
37
+ if current_branch == project.default_branch
37
38
  puts 'OK'
38
39
  else
39
- error "You are not on the default branch '#{options.default_branch}'"
40
+ error "You are not on the default branch '#{project.default_branch}'"
40
41
  end
41
42
  end
42
43
  end
@@ -15,8 +15,9 @@ module CreateGithubRelease
15
15
  # @example
16
16
  # require 'create_github_release'
17
17
  #
18
- # options = CreateGithubRelease::Options.new { |o| o.release_type = 'major' }
19
- # assertion = CreateGithubRelease::Assertions::RemoteReleaseBranchDoesNotExist.new(options)
18
+ # options = CreateGithubRelease::CommandLineOptions.new { |o| o.release_type = 'major' }
19
+ # project = CreateGithubRelease::Project.new(options)
20
+ # assertion = CreateGithubRelease::Assertions::RemoteReleaseBranchDoesNotExist.new(project)
20
21
  # begin
21
22
  # assertion.assert
22
23
  # puts 'Assertion passed'
@@ -29,13 +30,13 @@ module CreateGithubRelease
29
30
  # @raise [SystemExit] if the assertion fails
30
31
  #
31
32
  def assert
32
- print "Checking that the remote branch '#{options.branch}' does not exist..."
33
- `git ls-remote --heads --exit-code '#{options.remote}' '#{options.branch}' >/dev/null 2>&1`
33
+ print "Checking that the remote branch '#{project.release_branch}' does not exist..."
34
+ `git ls-remote --heads --exit-code '#{project.remote}' '#{project.release_branch}' >/dev/null 2>&1`
34
35
  if $CHILD_STATUS.exitstatus == 2
35
36
  puts 'OK'
36
37
  else
37
38
  error 'Could not list branches' unless $CHILD_STATUS.success?
38
- error "'#{options.branch}' already exists"
39
+ error "'#{project.release_branch}' already exists"
39
40
  end
40
41
  end
41
42
  end
@@ -15,8 +15,9 @@ module CreateGithubRelease
15
15
  # @example
16
16
  # require 'create_github_release'
17
17
  #
18
- # options = CreateGithubRelease::Options.new { |o| o.release_type = 'major' }
19
- # assertion = CreateGithubRelease::Assertions::RemoteReleaseTagDoesNotExist.new(options)
18
+ # options = CreateGithubRelease::CommandLineOptions.new { |o| o.release_type = 'major' }
19
+ # project = CreateGithubRelease::Project.new(options)
20
+ # assertion = CreateGithubRelease::Assertions::RemoteReleaseTagDoesNotExist.new(project)
20
21
  # begin
21
22
  # assertion.assert
22
23
  # puts 'Assertion passed'
@@ -29,13 +30,13 @@ module CreateGithubRelease
29
30
  # @raise [SystemExit] if the assertion fails
30
31
  #
31
32
  def assert
32
- print "Checking that the remote tag '#{options.tag}' does not exist..."
33
- `git ls-remote --tags --exit-code '#{options.remote}' #{options.tag} >/dev/null 2>&1`
33
+ print "Checking that the remote tag '#{project.next_release_tag}' does not exist..."
34
+ `git ls-remote --tags --exit-code '#{project.remote}' #{project.next_release_tag} >/dev/null 2>&1`
34
35
  if $CHILD_STATUS.exitstatus == 2
35
36
  puts 'OK'
36
37
  else
37
38
  error 'Could not list tags' unless $CHILD_STATUS.success?
38
- error "Remote tag '#{options.tag}' already exists"
39
+ error "Remote tag '#{project.next_release_tag}' already exists"
39
40
  end
40
41
  end
41
42
  end
@@ -9,12 +9,12 @@ module CreateGithubRelease
9
9
  end
10
10
 
11
11
  require_relative 'assertions/bundle_is_up_to_date'
12
- require_relative 'assertions/changelog_docker_container_exists'
13
- require_relative 'assertions/docker_is_running'
12
+ require_relative 'assertions/gh_authenticated'
14
13
  require_relative 'assertions/gh_command_exists'
15
14
  require_relative 'assertions/git_command_exists'
16
15
  require_relative 'assertions/in_git_repo'
17
16
  require_relative 'assertions/in_repo_root_directory'
17
+ require_relative 'assertions/last_release_tag_exists'
18
18
  require_relative 'assertions/local_and_remote_on_same_commit'
19
19
  require_relative 'assertions/local_release_branch_does_not_exist'
20
20
  require_relative 'assertions/local_release_tag_does_not_exist'