milestoner 11.2.0 → 12.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
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +2 -2
- data/README.adoc +48 -50
- data/bin/milestoner +1 -3
- data/lib/milestoner.rb +9 -10
- data/lib/milestoner/cli/actions/config.rb +35 -0
- data/lib/milestoner/cli/actions/publish.rb +20 -0
- data/lib/milestoner/cli/actions/status.rb +33 -0
- data/lib/milestoner/cli/configuration/content.rb +21 -0
- data/lib/milestoner/cli/configuration/defaults.yml +12 -0
- data/lib/milestoner/cli/configuration/loader.rb +37 -0
- data/lib/milestoner/cli/parsers.rb +11 -0
- data/lib/milestoner/cli/parsers/assembler.rb +34 -0
- data/lib/milestoner/cli/parsers/core.rb +78 -0
- data/lib/milestoner/cli/parsers/security.rb +48 -0
- data/lib/milestoner/cli/shell.rb +51 -0
- data/lib/milestoner/commits/categorizer.rb +51 -0
- data/lib/milestoner/container.rb +40 -0
- data/lib/milestoner/error.rb +7 -0
- data/lib/milestoner/identity.rb +2 -1
- data/lib/milestoner/presenters/commit.rb +34 -0
- data/lib/milestoner/tags/creator.rb +70 -0
- data/lib/milestoner/tags/publisher.rb +26 -0
- data/lib/milestoner/tags/pusher.rb +40 -0
- metadata +56 -18
- metadata.gz.sig +0 -0
- data/lib/milestoner/cli.rb +0 -120
- data/lib/milestoner/commit.rb +0 -24
- data/lib/milestoner/errors/base.rb +0 -12
- data/lib/milestoner/errors/duplicate_tag.rb +0 -9
- data/lib/milestoner/errors/git.rb +0 -12
- data/lib/milestoner/publisher.rb +0 -21
- data/lib/milestoner/pusher.rb +0 -34
- data/lib/milestoner/tagger.rb +0 -89
metadata.gz.sig
CHANGED
Binary file
|
data/lib/milestoner/cli.rb
DELETED
@@ -1,120 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "thor"
|
4
|
-
require "thor/actions"
|
5
|
-
require "runcom"
|
6
|
-
|
7
|
-
module Milestoner
|
8
|
-
# The Command Line Interface (CLI) for the gem.
|
9
|
-
class CLI < Thor
|
10
|
-
include Thor::Actions
|
11
|
-
|
12
|
-
package_name Identity::VERSION_LABEL
|
13
|
-
|
14
|
-
def self.configuration
|
15
|
-
Runcom::Config.new "#{Identity::NAME}/configuration.yml",
|
16
|
-
defaults: {
|
17
|
-
git_commit_prefixes: %w[Fixed Added Updated Removed Refactored],
|
18
|
-
git_tag_sign: false
|
19
|
-
}
|
20
|
-
end
|
21
|
-
|
22
|
-
def initialize args = [], options = {}, config = {}
|
23
|
-
super args, options, config
|
24
|
-
@configuration = self.class.configuration
|
25
|
-
@tagger = Tagger.new commit_prefixes: @configuration.to_h[:git_commit_prefixes]
|
26
|
-
@pusher = Pusher.new
|
27
|
-
@publisher = Publisher.new tagger: tagger, pusher: pusher
|
28
|
-
rescue Runcom::Errors::Base => error
|
29
|
-
abort error.message
|
30
|
-
end
|
31
|
-
|
32
|
-
desc "-C, [--commits]", "Show commits for next milestone."
|
33
|
-
map %w[-C --commits] => :commits
|
34
|
-
def commits
|
35
|
-
tagger.commit_list.each { |commit| say commit }
|
36
|
-
rescue StandardError => error
|
37
|
-
say_status :error, error.message, :red
|
38
|
-
end
|
39
|
-
|
40
|
-
desc "-t, [--tag=VERSION]", "Tag local repository with new version."
|
41
|
-
map %w[-t --tag] => :tag
|
42
|
-
method_option :sign,
|
43
|
-
aliases: "-s",
|
44
|
-
desc: "Sign tag with GPG key.",
|
45
|
-
type: :boolean,
|
46
|
-
default: false
|
47
|
-
def tag version
|
48
|
-
tagger.create version, sign: sign_tag?(options[:sign])
|
49
|
-
say "Repository tagged: #{version}."
|
50
|
-
rescue StandardError => error
|
51
|
-
say_status :error, error.message, :red
|
52
|
-
end
|
53
|
-
|
54
|
-
desc "-p, [--push=VERSION]", "Push local tag to remote repository."
|
55
|
-
map %w[-p --push] => :push
|
56
|
-
def push version
|
57
|
-
pusher.push version
|
58
|
-
say_status :info, "Tags pushed to remote repository.", :green
|
59
|
-
rescue StandardError => error
|
60
|
-
say_status :error, error.message, :red
|
61
|
-
end
|
62
|
-
|
63
|
-
desc "-P, [--publish=VERSION]", "Tag and push milestone to remote repository."
|
64
|
-
map %w[-P --publish] => :publish
|
65
|
-
method_option :sign,
|
66
|
-
aliases: "-s",
|
67
|
-
desc: "Sign tag with GPG key.",
|
68
|
-
type: :boolean,
|
69
|
-
default: false
|
70
|
-
def publish version
|
71
|
-
publisher.publish version, sign: sign_tag?(options[:sign])
|
72
|
-
say_status :info, "Repository tagged and pushed: #{version}.", :green
|
73
|
-
say_status :info, "Milestone published!", :green
|
74
|
-
rescue StandardError => error
|
75
|
-
say_status :error, error.message, :red
|
76
|
-
end
|
77
|
-
|
78
|
-
desc "-c, [--config]", "Manage gem configuration."
|
79
|
-
map %w[-c --config] => :config
|
80
|
-
method_option :edit,
|
81
|
-
aliases: "-e",
|
82
|
-
desc: "Edit gem configuration.",
|
83
|
-
type: :boolean,
|
84
|
-
default: false
|
85
|
-
method_option :info,
|
86
|
-
aliases: "-i",
|
87
|
-
desc: "Print gem configuration.",
|
88
|
-
type: :boolean,
|
89
|
-
default: false
|
90
|
-
def config
|
91
|
-
path = configuration.current
|
92
|
-
|
93
|
-
if options.edit? then `#{ENV["EDITOR"]} #{path}`
|
94
|
-
elsif options.info?
|
95
|
-
path ? say(path) : say("Configuration doesn't exist.")
|
96
|
-
else help :config
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
desc "-v, [--version]", "Show gem version."
|
101
|
-
map %w[-v --version] => :version
|
102
|
-
def version
|
103
|
-
say Identity::VERSION_LABEL
|
104
|
-
end
|
105
|
-
|
106
|
-
desc "-h, [--help=COMMAND]", "Show this message or get help for a command."
|
107
|
-
map %w[-h --help] => :help
|
108
|
-
def help task = nil
|
109
|
-
say and super
|
110
|
-
end
|
111
|
-
|
112
|
-
private
|
113
|
-
|
114
|
-
attr_reader :configuration, :tagger, :pusher, :publisher
|
115
|
-
|
116
|
-
def sign_tag? sign
|
117
|
-
sign | configuration.to_h[:git_tag_sign]
|
118
|
-
end
|
119
|
-
end
|
120
|
-
end
|
data/lib/milestoner/commit.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "forwardable"
|
4
|
-
|
5
|
-
module Milestoner
|
6
|
-
# Wraps the Git Kit Commit for presentation purposes.
|
7
|
-
class Commit
|
8
|
-
extend Forwardable
|
9
|
-
|
10
|
-
delegate [*GitPlus::Commit.members, :fixup?, :squash?] => :source
|
11
|
-
|
12
|
-
def initialize source
|
13
|
-
@source = source
|
14
|
-
end
|
15
|
-
|
16
|
-
def subject_author delimiter: " - "
|
17
|
-
"#{subject}#{delimiter}#{author_name}"
|
18
|
-
end
|
19
|
-
|
20
|
-
private
|
21
|
-
|
22
|
-
attr_reader :source
|
23
|
-
end
|
24
|
-
end
|
data/lib/milestoner/publisher.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Milestoner
|
4
|
-
# Handles the tagging and pushing of a milestone to a remote repository.
|
5
|
-
class Publisher
|
6
|
-
def initialize tagger: Tagger.new, pusher: Pusher.new
|
7
|
-
@tagger = tagger
|
8
|
-
@pusher = pusher
|
9
|
-
end
|
10
|
-
|
11
|
-
# :reek:BooleanParameter
|
12
|
-
def publish version, sign: false
|
13
|
-
tagger.create version, sign: sign
|
14
|
-
pusher.push version
|
15
|
-
end
|
16
|
-
|
17
|
-
private
|
18
|
-
|
19
|
-
attr_reader :tagger, :pusher
|
20
|
-
end
|
21
|
-
end
|
data/lib/milestoner/pusher.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Milestoner
|
4
|
-
# Handles publishing of Git tags to remote repository.
|
5
|
-
class Pusher
|
6
|
-
def initialize repository: GitPlus::Repository.new
|
7
|
-
@repository = repository
|
8
|
-
end
|
9
|
-
|
10
|
-
def push version
|
11
|
-
version = Versionaire::Version version
|
12
|
-
|
13
|
-
fail Errors::Git, "Remote repository not configured." unless repository.config_origin?
|
14
|
-
fail Errors::Git, "Remote tag exists: #{version}." if tag_exists? version
|
15
|
-
return if push_tags
|
16
|
-
|
17
|
-
fail Errors::Git, "Tags could not be pushed to remote repository."
|
18
|
-
end
|
19
|
-
|
20
|
-
private
|
21
|
-
|
22
|
-
attr_reader :repository, :version
|
23
|
-
|
24
|
-
def tag_exists? version
|
25
|
-
repository.tag_remote? version
|
26
|
-
end
|
27
|
-
|
28
|
-
def push_tags
|
29
|
-
repository.tag_push.then do |_stdout, stderr, status|
|
30
|
-
status.success? && stderr.match?(/[new tag]/)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
data/lib/milestoner/tagger.rb
DELETED
@@ -1,89 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "thor"
|
4
|
-
require "versionaire"
|
5
|
-
|
6
|
-
module Milestoner
|
7
|
-
# Handles the tagging of a project repository.
|
8
|
-
# :reek:TooManyInstanceVariables
|
9
|
-
class Tagger
|
10
|
-
attr_reader :commit_prefixes
|
11
|
-
|
12
|
-
def initialize commit_prefixes: [], repository: GitPlus::Repository.new, presenter: Commit
|
13
|
-
@commit_prefixes = commit_prefixes
|
14
|
-
@repository = repository
|
15
|
-
@presenter = presenter
|
16
|
-
@shell = Thor::Shell::Color.new
|
17
|
-
end
|
18
|
-
|
19
|
-
def commit_prefix_regex
|
20
|
-
commit_prefixes.empty? ? Regexp.new("") : Regexp.union(commit_prefixes)
|
21
|
-
end
|
22
|
-
|
23
|
-
def commits
|
24
|
-
groups = build_commit_prefix_groups
|
25
|
-
group_by_commit_prefix groups
|
26
|
-
groups.each_value { |commits| commits.sort_by!(&:subject) }
|
27
|
-
groups.values.flatten.uniq(&:subject)
|
28
|
-
end
|
29
|
-
|
30
|
-
def commit_list
|
31
|
-
commits.map { |source| presenter.new source }
|
32
|
-
.map { |commit| "- #{commit.subject_author}" }
|
33
|
-
end
|
34
|
-
|
35
|
-
# :reek:BooleanParameter
|
36
|
-
# :reek:ControlParameter
|
37
|
-
# :reek:TooManyStatements
|
38
|
-
def create version, sign: false
|
39
|
-
version = Versionaire::Version version
|
40
|
-
|
41
|
-
return if local? version
|
42
|
-
fail Errors::Git, "Unable to tag without commits." if computed_commits.empty?
|
43
|
-
|
44
|
-
content = message version
|
45
|
-
sign ? repository.tag_sign(version, content) : repository.tag_unsign(version, content)
|
46
|
-
end
|
47
|
-
|
48
|
-
private
|
49
|
-
|
50
|
-
attr_reader :repository, :presenter, :shell
|
51
|
-
|
52
|
-
def saved_commits
|
53
|
-
repository.commits
|
54
|
-
end
|
55
|
-
|
56
|
-
def tagged_commits
|
57
|
-
repository.commits "#{repository.tag_last}..HEAD"
|
58
|
-
end
|
59
|
-
|
60
|
-
def computed_commits
|
61
|
-
(repository.tagged? ? tagged_commits : saved_commits)
|
62
|
-
end
|
63
|
-
|
64
|
-
def build_commit_prefix_groups
|
65
|
-
commit_prefixes.map
|
66
|
-
.with_object({}) { |prefix, group| group.merge! prefix => [] }
|
67
|
-
.merge! "Other" => []
|
68
|
-
end
|
69
|
-
|
70
|
-
def group_by_commit_prefix groups = {}
|
71
|
-
computed_commits.each do |commit|
|
72
|
-
prefix = commit.subject[commit_prefix_regex]
|
73
|
-
key = groups.key?(prefix) ? prefix : "Other"
|
74
|
-
groups[key] << commit
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
def message version
|
79
|
-
%(Version #{version}\n\n#{commit_list.join "\n"}\n\n)
|
80
|
-
end
|
81
|
-
|
82
|
-
def local? version
|
83
|
-
return false unless repository.tag_local? version
|
84
|
-
|
85
|
-
shell.say_status :warn, "Local tag exists: #{version}. Skipped.", :yellow
|
86
|
-
true
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|