create_github_release 1.0.0 → 1.2.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 (45) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +4 -1
  3. data/.solargraph.yml +23 -0
  4. data/.vscode/launch.json +19 -0
  5. data/.yardopts +1 -0
  6. data/CHANGELOG.md +26 -0
  7. data/README.md +165 -47
  8. data/Rakefile +7 -4
  9. data/create_github_release.gemspec +7 -4
  10. data/exe/create-github-release +5 -1
  11. data/lib/create_github_release/assertion_base.rb +0 -2
  12. data/lib/create_github_release/assertions/bundle_is_up_to_date.rb +1 -1
  13. data/lib/create_github_release/assertions/gh_authenticated.rb +1 -1
  14. data/lib/create_github_release/assertions/gh_command_exists.rb +1 -1
  15. data/lib/create_github_release/assertions/git_command_exists.rb +1 -1
  16. data/lib/create_github_release/assertions/in_git_repo.rb +1 -1
  17. data/lib/create_github_release/assertions/in_repo_root_directory.rb +1 -1
  18. data/lib/create_github_release/assertions/local_and_remote_on_same_commit.rb +1 -1
  19. data/lib/create_github_release/assertions/local_release_branch_does_not_exist.rb +1 -1
  20. data/lib/create_github_release/assertions/no_staged_changes.rb +1 -1
  21. data/lib/create_github_release/assertions/no_uncommitted_changes.rb +1 -1
  22. data/lib/create_github_release/assertions/on_default_branch.rb +1 -1
  23. data/lib/create_github_release/assertions/remote_release_branch_does_not_exist.rb +1 -1
  24. data/lib/create_github_release/assertions/remote_release_tag_does_not_exist.rb +1 -1
  25. data/lib/create_github_release/command_line/options.rb +151 -0
  26. data/lib/create_github_release/command_line/parser.rb +253 -0
  27. data/lib/create_github_release/command_line/validations.rb +293 -0
  28. data/lib/create_github_release/command_line/validator.rb +93 -0
  29. data/lib/create_github_release/command_line.rb +43 -0
  30. data/lib/create_github_release/project.rb +136 -76
  31. data/lib/create_github_release/release_assertions.rb +2 -1
  32. data/lib/create_github_release/release_tasks.rb +2 -1
  33. data/lib/create_github_release/tasks/commit_release.rb +1 -1
  34. data/lib/create_github_release/tasks/create_github_release.rb +1 -1
  35. data/lib/create_github_release/tasks/create_release_branch.rb +1 -1
  36. data/lib/create_github_release/tasks/create_release_pull_request.rb +1 -1
  37. data/lib/create_github_release/tasks/create_release_tag.rb +1 -1
  38. data/lib/create_github_release/tasks/push_release.rb +1 -1
  39. data/lib/create_github_release/tasks/update_changelog.rb +1 -1
  40. data/lib/create_github_release/tasks/update_version.rb +13 -14
  41. data/lib/create_github_release/version.rb +1 -1
  42. data/lib/create_github_release.rb +1 -2
  43. metadata +31 -25
  44. data/lib/create_github_release/command_line_options.rb +0 -367
  45. data/lib/create_github_release/command_line_parser.rb +0 -225
@@ -0,0 +1,93 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'validations'
4
+
5
+ module CreateGithubRelease
6
+ module CommandLine
7
+ # Validates a set of options after the options have been fully initialized
8
+ # @api private
9
+ class Validator
10
+ # Create a new instance of this class
11
+ # @param options [CreateGithubRelease::CommandLine::Options] the options to validate
12
+ # @api private
13
+ def initialize(options)
14
+ @options = options
15
+ end
16
+
17
+ # Returns `true` if all options are valid and `false` otherwise
18
+ #
19
+ # * If the options are valid, returns `true` clears the `#errors` array
20
+ # * If the options are not valid, returns `false` and populates the `#errors` array
21
+ #
22
+ # @example when all options are valid
23
+ # options = CreateGithubRelease::CommandLine::Options.new
24
+ # options.release_type = 'major'
25
+ # options.valid? #=> true
26
+ # options.errors #=> []
27
+ #
28
+ # @example when one or more options are not valid
29
+ # options = CreateGithubRelease::CommandLine::Options.new
30
+ # options.release_type #=> nil
31
+ # options.valid? #=> false
32
+ # options.errors #=> ["--release-type must be given and be one of 'major', 'minor', 'patch'"]
33
+ #
34
+ # @return [Boolean]
35
+ #
36
+ def valid?
37
+ @errors = []
38
+ validation_classes.each do |validation_class|
39
+ validation = validation_class.new(options)
40
+ @errors << validation.error unless validation.valid?
41
+ end
42
+ @errors.empty?
43
+ end
44
+
45
+ # Returns an array of error messages
46
+ #
47
+ # * If the options are valid, returns an empty array
48
+ # * If the options are not valid, returns an array of error messages
49
+ #
50
+ # @example when all options are valid
51
+ # options = CreateGithubRelease::CommandLine::Options.new
52
+ # options.release_type = 'major'
53
+ # options.valid? #=> true
54
+ # options.errors #=> []
55
+ #
56
+ # @example when one or more options are not valid
57
+ # options = CreateGithubRelease::CommandLine::Options.new
58
+ # options.release_type #=> nil
59
+ # options.quiet = options.verbose = true
60
+ # options.valid? #=> false
61
+ # options.errors #=> [
62
+ # "Both --quiet and --verbose cannot be given",
63
+ # "--release-type must be given and be one of 'major', 'minor', 'patch'"
64
+ # ]
65
+ #
66
+ # @return [Array<String>] an array of error messages
67
+ #
68
+ def errors
69
+ valid?
70
+ @errors
71
+ end
72
+
73
+ private
74
+
75
+ # The options to validate
76
+ # @return [CreateGithubRelease::CommandLine::Options]
77
+ # @api private
78
+ attr_reader :options
79
+
80
+ # Returns an array of validation classes
81
+ # @return [Array<CreateGithubRelease::Validations::Base>]
82
+ # @api private
83
+ def validation_classes
84
+ [].tap do |validation_classes|
85
+ CreateGithubRelease::CommandLine::Validations.constants.each do |constant_name|
86
+ constant = Validations.const_get(constant_name)
87
+ validation_classes << constant if constant.is_a?(Class) && constant_name.to_s.start_with?('Validate')
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CreateGithubRelease
4
+ # This module has all the classes and modules for the command line interface
5
+ #
6
+ # The Parser class is the main interface. It parses and validates the command line
7
+ # arguments and returns an instance of the Options class.
8
+ #
9
+ # @example
10
+ # parser = CreateGithubRelease::CommandLine::Parser.new
11
+ # options = parser.parse(*ARGV)
12
+ # if !option.valid?
13
+ # puts options.errors
14
+ # exit 1
15
+ # end
16
+ # # ... do something with the options
17
+ #
18
+ # @api public
19
+ #
20
+ module CommandLine
21
+ # An array of the valid release types
22
+ # @return [Array<String>]
23
+ # @api private
24
+ VALID_RELEASE_TYPES = %w[major minor patch pre release first].freeze
25
+
26
+ # Regex pattern for a [valid git reference](https://git-scm.com/docs/git-check-ref-format)
27
+ # @return [Regexp]
28
+ # @api private
29
+ VALID_REF_PATTERN = /^(?:(?:[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*)|(?:[a-zA-Z0-9-]+))$/
30
+
31
+ # An array of the allowed options that can be passed to `.new`
32
+ # @return [Array<Symbol>]
33
+ ALLOWED_OPTIONS = %i[
34
+ release_type pre pre_type default_branch release_branch remote last_release_version
35
+ next_release_version changelog_path quiet verbose
36
+ ].freeze
37
+ end
38
+ end
39
+
40
+ require_relative 'command_line/options'
41
+ require_relative 'command_line/parser'
42
+ require_relative 'command_line/validations'
43
+ require_relative 'command_line/validator'