milestoner 15.2.2 → 16.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/README.adoc +29 -27
- data/lib/milestoner/cli/actions/publish.rb +17 -3
- data/lib/milestoner/cli/actions/status.rb +10 -4
- data/lib/milestoner/cli/shell.rb +20 -17
- data/lib/milestoner/commits/categorizer.rb +1 -1
- data/lib/milestoner/configuration/contract.rb +16 -0
- data/lib/milestoner/configuration/defaults.yml +3 -3
- data/lib/milestoner/configuration/model.rb +13 -0
- data/lib/milestoner/container.rb +16 -3
- data/milestoner.gemspec +12 -10
- data.tar.gz.sig +0 -0
- metadata +56 -34
- metadata.gz.sig +0 -0
- data/lib/milestoner/cli/actions/config.rb +0 -33
- data/lib/milestoner/cli/actions/container.rb +0 -20
- data/lib/milestoner/cli/actions/import.rb +0 -11
- data/lib/milestoner/cli/parser.rb +0 -35
- data/lib/milestoner/cli/parsers/core.rb +0 -81
- data/lib/milestoner/configuration/content.rb +0 -25
- data/lib/milestoner/configuration/loader.rb +0 -35
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 463ef8094d1ed6ad4cec764411a8317e4895f058eb3562dd2debdff7c03a45a2
|
4
|
+
data.tar.gz: f746a08a1c77a63ad78a0b07cd3aa112ec0ca9c455d813422995bfabcfcdcf15
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b32140a8b3ad32fcd3aa5a896f55a1fcc9adbb3181309d8539b0983828b1cb82bb7b64cf87b630c69362b5a16130879528bac0036c2fc4e1e3c4c5828da92b40
|
7
|
+
data.tar.gz: 33eb20a7c9f937d1cd913987424cb7a4915d8fb2869aa65a516be0fb892579faa7c5c6174cf88f8747dd3dffaaf55004f5e843a48afbbd36048b73022c310efa
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/README.adoc
CHANGED
@@ -45,7 +45,16 @@ toc::[]
|
|
45
45
|
|
46
46
|
== Setup
|
47
47
|
|
48
|
-
To install, run:
|
48
|
+
To install _with_ security, run:
|
49
|
+
|
50
|
+
[source,bash]
|
51
|
+
----
|
52
|
+
# 💡 Skip this line if you already have the public certificate installed.
|
53
|
+
gem cert --add <(curl --compressed --location https://alchemists.io/gems.pem)
|
54
|
+
gem install milestoner --trust-policy HighSecurity
|
55
|
+
----
|
56
|
+
|
57
|
+
To install _without_ security, run:
|
49
58
|
|
50
59
|
[source,bash]
|
51
60
|
----
|
@@ -59,26 +68,22 @@ gem install milestoner
|
|
59
68
|
From the command line, type: `milestoner --help`
|
60
69
|
|
61
70
|
....
|
62
|
-
USAGE
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
-
|
71
|
+
USAGE
|
72
|
+
milestoner [OPTIONS]
|
73
|
+
milestoner COMMAND [OPTIONS]
|
74
|
+
|
75
|
+
OPTIONS
|
76
|
+
-p, --publish VERSION Publish milestone.
|
77
|
+
(tags and pushes to remote repository)
|
78
|
+
-s, --status Show project status.
|
79
|
+
-v, --version Show version.
|
80
|
+
-h, --help [COMMAND] Show this message.
|
81
|
+
|
82
|
+
COMMANDS
|
83
|
+
config Manage configuration.
|
84
|
+
Path is dynamic per current directory.
|
68
85
|
....
|
69
86
|
|
70
|
-
Examples:
|
71
|
-
|
72
|
-
[source,bash]
|
73
|
-
----
|
74
|
-
milestoner --config edit
|
75
|
-
milestoner --config view
|
76
|
-
milestoner --help
|
77
|
-
milestoner --publish 0.1.0
|
78
|
-
milestoner --status
|
79
|
-
milestoner --version
|
80
|
-
----
|
81
|
-
|
82
87
|
=== Customization
|
83
88
|
|
84
89
|
This gem can be configured via a global configuration:
|
@@ -93,9 +98,9 @@ The default configuration is as follows:
|
|
93
98
|
|
94
99
|
[source,yaml]
|
95
100
|
----
|
96
|
-
|
97
|
-
|
98
|
-
|
101
|
+
documentation:
|
102
|
+
format: "adoc"
|
103
|
+
prefixes:
|
99
104
|
- Fixed
|
100
105
|
- Added
|
101
106
|
- Updated
|
@@ -103,10 +108,7 @@ The default configuration is as follows:
|
|
103
108
|
- Refactored
|
104
109
|
----
|
105
110
|
|
106
|
-
|
107
|
-
`+configuration.yml+`.
|
108
|
-
|
109
|
-
The `+configuration.yml+` file can be configured as follows:
|
111
|
+
The `configuration.yml` file can be configured as follows:
|
110
112
|
|
111
113
|
* *Documentation Format* (i.e. `documentation`): Determines what format the release notes should be
|
112
114
|
rendered as. This effects both status information from the command line and the release notes
|
@@ -117,7 +119,7 @@ The `+configuration.yml+` file can be configured as follows:
|
|
117
119
|
define Git commit prefixes that match your style. _NOTE: Prefix order is important with the first
|
118
120
|
prefix defined taking precedence over the second and so forth._ Special characters are allowed for
|
119
121
|
prefixes but should be enclosed in quotes. To disable prefix usage completely, use an empty array.
|
120
|
-
Example:
|
122
|
+
Example: `prefixes: []`.
|
121
123
|
|
122
124
|
== Security
|
123
125
|
|
@@ -1,15 +1,29 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "refinements/structs"
|
4
|
+
require "sod"
|
5
|
+
|
3
6
|
module Milestoner
|
4
7
|
module CLI
|
5
8
|
module Actions
|
6
9
|
# Handles tag creation and pushing of tag to local repository.
|
7
|
-
class Publish
|
8
|
-
|
10
|
+
class Publish < Sod::Action
|
11
|
+
include Import[:configuration]
|
12
|
+
|
13
|
+
using Refinements::Structs
|
14
|
+
|
15
|
+
description "Publish milestone."
|
16
|
+
|
17
|
+
ancillary "(tags and pushes to remote repository)"
|
18
|
+
|
19
|
+
on %w[-p --publish], argument: "VERSION"
|
20
|
+
|
21
|
+
def initialize(publisher: Tags::Publisher.new, **)
|
22
|
+
super(**)
|
9
23
|
@publisher = publisher
|
10
24
|
end
|
11
25
|
|
12
|
-
def call(
|
26
|
+
def call(version) = publisher.call configuration.merge(version:)
|
13
27
|
|
14
28
|
private
|
15
29
|
|
@@ -1,11 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "sod"
|
4
|
+
|
3
5
|
module Milestoner
|
4
6
|
module CLI
|
5
7
|
module Actions
|
6
8
|
# Handles listing project status of untagged commit history.
|
7
|
-
class Status
|
8
|
-
include Milestoner::Import[:logger]
|
9
|
+
class Status < Sod::Action
|
10
|
+
include Milestoner::Import[:kernel, :logger]
|
11
|
+
|
12
|
+
description "Show project status."
|
13
|
+
|
14
|
+
on %w[-s --status]
|
9
15
|
|
10
16
|
def initialize(presenter: Presenters::Commit, categorizer: Commits::Categorizer.new, **)
|
11
17
|
super(**)
|
@@ -13,11 +19,11 @@ module Milestoner
|
|
13
19
|
@categorizer = categorizer
|
14
20
|
end
|
15
21
|
|
16
|
-
def call
|
22
|
+
def call(*)
|
17
23
|
categorizer.call
|
18
24
|
.tap { |records| info "All is quiet." if records.empty? }
|
19
25
|
.map { |record| presenter.new(record).line_item }
|
20
|
-
.each { |line_item|
|
26
|
+
.each { |line_item| kernel.puts line_item }
|
21
27
|
end
|
22
28
|
|
23
29
|
private
|
data/lib/milestoner/cli/shell.rb
CHANGED
@@ -1,37 +1,40 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "
|
3
|
+
require "sod"
|
4
4
|
|
5
5
|
module Milestoner
|
6
6
|
module CLI
|
7
7
|
# The main Command Line Interface (CLI) object.
|
8
8
|
class Shell
|
9
|
-
include
|
9
|
+
include Import[:defaults_path, :xdg_config, :specification]
|
10
10
|
|
11
|
-
def initialize(
|
11
|
+
def initialize(context: Sod::Context, dsl: Sod, **)
|
12
12
|
super(**)
|
13
|
-
@
|
13
|
+
@context = context
|
14
|
+
@dsl = dsl
|
14
15
|
end
|
15
16
|
|
16
|
-
def call
|
17
|
-
act_on parser.call(arguments)
|
18
|
-
rescue OptionParser::ParseError, Error => error
|
19
|
-
logger.error { error.message }
|
20
|
-
end
|
17
|
+
def call(...) = cli.call(...)
|
21
18
|
|
22
19
|
private
|
23
20
|
|
24
|
-
attr_reader :
|
21
|
+
attr_reader :context, :dsl
|
22
|
+
|
23
|
+
def cli
|
24
|
+
context = build_context
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
else logger.any { parser.to_s }
|
26
|
+
dsl.new :milestoner, banner: specification.banner do
|
27
|
+
on(Sod::Prefabs::Commands::Config, context:)
|
28
|
+
on Actions::Publish
|
29
|
+
on Actions::Status
|
30
|
+
on(Sod::Prefabs::Actions::Version, context:)
|
31
|
+
on Sod::Prefabs::Actions::Help, self
|
33
32
|
end
|
34
33
|
end
|
34
|
+
|
35
|
+
def build_context
|
36
|
+
context[defaults_path:, xdg_config:, version_label: specification.labeled_version]
|
37
|
+
end
|
35
38
|
end
|
36
39
|
end
|
37
40
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "dry/schema"
|
4
|
+
require "etcher"
|
5
|
+
|
6
|
+
Dry::Schema.load_extensions :monads
|
7
|
+
|
8
|
+
module Milestoner
|
9
|
+
module Configuration
|
10
|
+
Contract = Dry::Schema.Params do
|
11
|
+
required(:documentation_format).filled :string
|
12
|
+
required(:prefixes).array :string
|
13
|
+
optional(:version).filled :string
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Milestoner
|
4
|
+
module Configuration
|
5
|
+
# Defines configuration content as the primary source of truth for use throughout the gem.
|
6
|
+
Model = Struct.new :documentation_format, :prefixes, :version do
|
7
|
+
def initialize(**)
|
8
|
+
super
|
9
|
+
freeze
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/lib/milestoner/container.rb
CHANGED
@@ -2,7 +2,9 @@
|
|
2
2
|
|
3
3
|
require "cogger"
|
4
4
|
require "dry-container"
|
5
|
+
require "etcher"
|
5
6
|
require "gitt"
|
7
|
+
require "runcom"
|
6
8
|
require "spek"
|
7
9
|
|
8
10
|
module Milestoner
|
@@ -10,10 +12,21 @@ module Milestoner
|
|
10
12
|
module Container
|
11
13
|
extend Dry::Container::Mixin
|
12
14
|
|
13
|
-
register
|
14
|
-
|
15
|
+
register :configuration do
|
16
|
+
self[:defaults].add_loader(Etcher::Loaders::YAML.new(self[:xdg_config].active))
|
17
|
+
.then { |registry| Etcher.call registry }
|
18
|
+
end
|
19
|
+
|
20
|
+
register :defaults do
|
21
|
+
Etcher::Registry.new(contract: Configuration::Contract, model: Configuration::Model)
|
22
|
+
.add_loader(Etcher::Loaders::YAML.new(self[:defaults_path]))
|
23
|
+
end
|
24
|
+
|
15
25
|
register(:git) { Gitt::Repository.new }
|
26
|
+
register(:defaults_path) { Pathname(__dir__).join("configuration/defaults.yml") }
|
27
|
+
register(:xdg_config) { Runcom::Config.new "milestoner/configuration.yml" }
|
28
|
+
register(:specification) { Spek::Loader.call "#{__dir__}/../../milestoner.gemspec" }
|
16
29
|
register(:kernel) { Kernel }
|
17
|
-
register(:logger) { Cogger
|
30
|
+
register(:logger) { Cogger.new formatter: :emoji }
|
18
31
|
end
|
19
32
|
end
|
data/milestoner.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = "milestoner"
|
5
|
-
spec.version = "
|
5
|
+
spec.version = "16.0.0"
|
6
6
|
spec.authors = ["Brooke Kuhlmann"]
|
7
7
|
spec.email = ["brooke@alchemists.io"]
|
8
8
|
spec.homepage = "https://alchemists.io/projects/milestoner"
|
9
|
-
spec.summary = "A command line interface for
|
9
|
+
spec.summary = "A command line interface for managing Git repository milestones."
|
10
10
|
spec.license = "Hippocratic-2.1"
|
11
11
|
|
12
12
|
spec.metadata = {
|
@@ -23,16 +23,18 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.cert_chain = [Gem.default_cert_path]
|
24
24
|
|
25
25
|
spec.required_ruby_version = "~> 3.2"
|
26
|
-
spec.add_dependency "cogger", "~> 0.
|
27
|
-
spec.add_dependency "core", "~> 0.1"
|
26
|
+
spec.add_dependency "cogger", "~> 0.10"
|
28
27
|
spec.add_dependency "dry-container", "~> 0.11"
|
29
28
|
spec.add_dependency "dry-monads", "~> 1.6"
|
30
|
-
spec.add_dependency "
|
31
|
-
spec.add_dependency "
|
32
|
-
spec.add_dependency "
|
33
|
-
spec.add_dependency "
|
34
|
-
spec.add_dependency "
|
35
|
-
spec.add_dependency "
|
29
|
+
spec.add_dependency "dry-schema", "~> 1.13"
|
30
|
+
spec.add_dependency "etcher", "~> 0.2"
|
31
|
+
spec.add_dependency "gitt", "~> 2.0"
|
32
|
+
spec.add_dependency "infusible", "~> 2.0"
|
33
|
+
spec.add_dependency "refinements", "~> 11.0"
|
34
|
+
spec.add_dependency "runcom", "~> 10.0"
|
35
|
+
spec.add_dependency "sod", "~> 0.0"
|
36
|
+
spec.add_dependency "spek", "~> 2.0"
|
37
|
+
spec.add_dependency "versionaire", "~> 12.0"
|
36
38
|
spec.add_dependency "zeitwerk", "~> 2.6"
|
37
39
|
|
38
40
|
spec.bindir = "exe"
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: milestoner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 16.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brooke Kuhlmann
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
35
35
|
3n5C8/6Zh9DYTkpcwPSuIfAga6wf4nXc9m6JAw8AuMLaiWN/r/2s4zJsUHYERJEu
|
36
36
|
gZGm4JqtuSg8pYjPeIJxS960owq+SfuC+jxqmRA54BisFCv/0VOJi7tiJVY=
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date: 2023-
|
38
|
+
date: 2023-06-16 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: cogger
|
@@ -43,86 +43,114 @@ dependencies:
|
|
43
43
|
requirements:
|
44
44
|
- - "~>"
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: '0.
|
46
|
+
version: '0.10'
|
47
47
|
type: :runtime
|
48
48
|
prerelease: false
|
49
49
|
version_requirements: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
51
|
- - "~>"
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: '0.
|
53
|
+
version: '0.10'
|
54
54
|
- !ruby/object:Gem::Dependency
|
55
|
-
name:
|
55
|
+
name: dry-container
|
56
56
|
requirement: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
58
|
- - "~>"
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: '0.
|
60
|
+
version: '0.11'
|
61
61
|
type: :runtime
|
62
62
|
prerelease: false
|
63
63
|
version_requirements: !ruby/object:Gem::Requirement
|
64
64
|
requirements:
|
65
65
|
- - "~>"
|
66
66
|
- !ruby/object:Gem::Version
|
67
|
-
version: '0.
|
67
|
+
version: '0.11'
|
68
68
|
- !ruby/object:Gem::Dependency
|
69
|
-
name: dry-
|
69
|
+
name: dry-monads
|
70
70
|
requirement: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
72
|
- - "~>"
|
73
73
|
- !ruby/object:Gem::Version
|
74
|
-
version: '
|
74
|
+
version: '1.6'
|
75
75
|
type: :runtime
|
76
76
|
prerelease: false
|
77
77
|
version_requirements: !ruby/object:Gem::Requirement
|
78
78
|
requirements:
|
79
79
|
- - "~>"
|
80
80
|
- !ruby/object:Gem::Version
|
81
|
-
version: '
|
81
|
+
version: '1.6'
|
82
82
|
- !ruby/object:Gem::Dependency
|
83
|
-
name: dry-
|
83
|
+
name: dry-schema
|
84
84
|
requirement: !ruby/object:Gem::Requirement
|
85
85
|
requirements:
|
86
86
|
- - "~>"
|
87
87
|
- !ruby/object:Gem::Version
|
88
|
-
version: '1.
|
88
|
+
version: '1.13'
|
89
89
|
type: :runtime
|
90
90
|
prerelease: false
|
91
91
|
version_requirements: !ruby/object:Gem::Requirement
|
92
92
|
requirements:
|
93
93
|
- - "~>"
|
94
94
|
- !ruby/object:Gem::Version
|
95
|
-
version: '1.
|
95
|
+
version: '1.13'
|
96
|
+
- !ruby/object:Gem::Dependency
|
97
|
+
name: etcher
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - "~>"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0.2'
|
103
|
+
type: :runtime
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0.2'
|
96
110
|
- !ruby/object:Gem::Dependency
|
97
111
|
name: gitt
|
98
112
|
requirement: !ruby/object:Gem::Requirement
|
99
113
|
requirements:
|
100
114
|
- - "~>"
|
101
115
|
- !ruby/object:Gem::Version
|
102
|
-
version: '
|
116
|
+
version: '2.0'
|
103
117
|
type: :runtime
|
104
118
|
prerelease: false
|
105
119
|
version_requirements: !ruby/object:Gem::Requirement
|
106
120
|
requirements:
|
107
121
|
- - "~>"
|
108
122
|
- !ruby/object:Gem::Version
|
109
|
-
version: '
|
123
|
+
version: '2.0'
|
110
124
|
- !ruby/object:Gem::Dependency
|
111
125
|
name: infusible
|
112
126
|
requirement: !ruby/object:Gem::Requirement
|
113
127
|
requirements:
|
114
128
|
- - "~>"
|
115
129
|
- !ruby/object:Gem::Version
|
116
|
-
version: '
|
130
|
+
version: '2.0'
|
117
131
|
type: :runtime
|
118
132
|
prerelease: false
|
119
133
|
version_requirements: !ruby/object:Gem::Requirement
|
120
134
|
requirements:
|
121
135
|
- - "~>"
|
122
136
|
- !ruby/object:Gem::Version
|
123
|
-
version: '
|
137
|
+
version: '2.0'
|
124
138
|
- !ruby/object:Gem::Dependency
|
125
139
|
name: refinements
|
140
|
+
requirement: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - "~>"
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '11.0'
|
145
|
+
type: :runtime
|
146
|
+
prerelease: false
|
147
|
+
version_requirements: !ruby/object:Gem::Requirement
|
148
|
+
requirements:
|
149
|
+
- - "~>"
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: '11.0'
|
152
|
+
- !ruby/object:Gem::Dependency
|
153
|
+
name: runcom
|
126
154
|
requirement: !ruby/object:Gem::Requirement
|
127
155
|
requirements:
|
128
156
|
- - "~>"
|
@@ -136,47 +164,47 @@ dependencies:
|
|
136
164
|
- !ruby/object:Gem::Version
|
137
165
|
version: '10.0'
|
138
166
|
- !ruby/object:Gem::Dependency
|
139
|
-
name:
|
167
|
+
name: sod
|
140
168
|
requirement: !ruby/object:Gem::Requirement
|
141
169
|
requirements:
|
142
170
|
- - "~>"
|
143
171
|
- !ruby/object:Gem::Version
|
144
|
-
version: '
|
172
|
+
version: '0.0'
|
145
173
|
type: :runtime
|
146
174
|
prerelease: false
|
147
175
|
version_requirements: !ruby/object:Gem::Requirement
|
148
176
|
requirements:
|
149
177
|
- - "~>"
|
150
178
|
- !ruby/object:Gem::Version
|
151
|
-
version: '
|
179
|
+
version: '0.0'
|
152
180
|
- !ruby/object:Gem::Dependency
|
153
181
|
name: spek
|
154
182
|
requirement: !ruby/object:Gem::Requirement
|
155
183
|
requirements:
|
156
184
|
- - "~>"
|
157
185
|
- !ruby/object:Gem::Version
|
158
|
-
version: '
|
186
|
+
version: '2.0'
|
159
187
|
type: :runtime
|
160
188
|
prerelease: false
|
161
189
|
version_requirements: !ruby/object:Gem::Requirement
|
162
190
|
requirements:
|
163
191
|
- - "~>"
|
164
192
|
- !ruby/object:Gem::Version
|
165
|
-
version: '
|
193
|
+
version: '2.0'
|
166
194
|
- !ruby/object:Gem::Dependency
|
167
195
|
name: versionaire
|
168
196
|
requirement: !ruby/object:Gem::Requirement
|
169
197
|
requirements:
|
170
198
|
- - "~>"
|
171
199
|
- !ruby/object:Gem::Version
|
172
|
-
version: '
|
200
|
+
version: '12.0'
|
173
201
|
type: :runtime
|
174
202
|
prerelease: false
|
175
203
|
version_requirements: !ruby/object:Gem::Requirement
|
176
204
|
requirements:
|
177
205
|
- - "~>"
|
178
206
|
- !ruby/object:Gem::Version
|
179
|
-
version: '
|
207
|
+
version: '12.0'
|
180
208
|
- !ruby/object:Gem::Dependency
|
181
209
|
name: zeitwerk
|
182
210
|
requirement: !ruby/object:Gem::Requirement
|
@@ -205,18 +233,13 @@ files:
|
|
205
233
|
- README.adoc
|
206
234
|
- exe/milestoner
|
207
235
|
- lib/milestoner.rb
|
208
|
-
- lib/milestoner/cli/actions/config.rb
|
209
|
-
- lib/milestoner/cli/actions/container.rb
|
210
|
-
- lib/milestoner/cli/actions/import.rb
|
211
236
|
- lib/milestoner/cli/actions/publish.rb
|
212
237
|
- lib/milestoner/cli/actions/status.rb
|
213
|
-
- lib/milestoner/cli/parser.rb
|
214
|
-
- lib/milestoner/cli/parsers/core.rb
|
215
238
|
- lib/milestoner/cli/shell.rb
|
216
239
|
- lib/milestoner/commits/categorizer.rb
|
217
|
-
- lib/milestoner/configuration/
|
240
|
+
- lib/milestoner/configuration/contract.rb
|
218
241
|
- lib/milestoner/configuration/defaults.yml
|
219
|
-
- lib/milestoner/configuration/
|
242
|
+
- lib/milestoner/configuration/model.rb
|
220
243
|
- lib/milestoner/container.rb
|
221
244
|
- lib/milestoner/error.rb
|
222
245
|
- lib/milestoner/import.rb
|
@@ -251,9 +274,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
251
274
|
- !ruby/object:Gem::Version
|
252
275
|
version: '0'
|
253
276
|
requirements: []
|
254
|
-
rubygems_version: 3.4.
|
277
|
+
rubygems_version: 3.4.14
|
255
278
|
signing_key:
|
256
279
|
specification_version: 4
|
257
|
-
summary: A command line interface for
|
258
|
-
tags.
|
280
|
+
summary: A command line interface for managing Git repository milestones.
|
259
281
|
test_files: []
|
metadata.gz.sig
CHANGED
Binary file
|
@@ -1,33 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Milestoner
|
4
|
-
module CLI
|
5
|
-
module Actions
|
6
|
-
# Handles the gem configuration action.
|
7
|
-
class Config
|
8
|
-
include Milestoner::Import[:kernel, :logger]
|
9
|
-
|
10
|
-
def initialize(configuration: Configuration::Loader::CLIENT, **)
|
11
|
-
super(**)
|
12
|
-
@configuration = configuration
|
13
|
-
end
|
14
|
-
|
15
|
-
def call action
|
16
|
-
case action
|
17
|
-
when :edit then edit
|
18
|
-
when :view then view
|
19
|
-
else logger.error { "Invalid configuration action: #{action}." }
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
attr_reader :configuration
|
26
|
-
|
27
|
-
def edit = kernel.system("$EDITOR #{configuration.current}")
|
28
|
-
|
29
|
-
def view = kernel.system("cat #{configuration.current}")
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "dry/container"
|
4
|
-
|
5
|
-
module Milestoner
|
6
|
-
module CLI
|
7
|
-
module Actions
|
8
|
-
# Provides a single container with application and action specific dependencies.
|
9
|
-
module Container
|
10
|
-
extend Dry::Container::Mixin
|
11
|
-
|
12
|
-
merge Milestoner::Container
|
13
|
-
|
14
|
-
register(:config) { Config.new }
|
15
|
-
register(:publish) { Publish.new }
|
16
|
-
register(:status) { Status.new }
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "core"
|
4
|
-
require "optparse"
|
5
|
-
|
6
|
-
module Milestoner
|
7
|
-
module CLI
|
8
|
-
# Assembles and parses all Command Line Interface (CLI) options.
|
9
|
-
class Parser
|
10
|
-
include Import[:configuration]
|
11
|
-
|
12
|
-
CLIENT = OptionParser.new nil, 40, " "
|
13
|
-
SECTIONS = [Parsers::Core].freeze
|
14
|
-
|
15
|
-
def initialize(sections: SECTIONS, client: CLIENT, **)
|
16
|
-
super(**)
|
17
|
-
@sections = sections
|
18
|
-
@client = client
|
19
|
-
@configuration_duplicate = configuration.dup
|
20
|
-
end
|
21
|
-
|
22
|
-
def call arguments = Core::EMPTY_ARRAY
|
23
|
-
sections.each { |section| section.call configuration_duplicate, client: }
|
24
|
-
client.parse arguments
|
25
|
-
configuration_duplicate.freeze
|
26
|
-
end
|
27
|
-
|
28
|
-
def to_s = client.to_s
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
attr_reader :sections, :client, :configuration_duplicate
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
@@ -1,81 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "core"
|
4
|
-
require "refinements/structs"
|
5
|
-
require "versionaire/extensions/option_parser"
|
6
|
-
|
7
|
-
module Milestoner
|
8
|
-
module CLI
|
9
|
-
# Handles parsing of Command Line Interface (CLI) primary options.
|
10
|
-
module Parsers
|
11
|
-
using Refinements::Structs
|
12
|
-
|
13
|
-
# Handles parsing of Command Line Interface (CLI) core options.
|
14
|
-
class Core
|
15
|
-
include Import[:specification]
|
16
|
-
|
17
|
-
def self.call(...) = new(...).call
|
18
|
-
|
19
|
-
def initialize(configuration = Container[:configuration], client: Parser::CLIENT, **)
|
20
|
-
super(**)
|
21
|
-
@configuration = configuration
|
22
|
-
@client = client
|
23
|
-
end
|
24
|
-
|
25
|
-
def call arguments = ::Core::EMPTY_ARRAY
|
26
|
-
client.banner = specification.labeled_summary
|
27
|
-
client.separator "\nUSAGE:\n"
|
28
|
-
collate
|
29
|
-
client.parse arguments
|
30
|
-
configuration
|
31
|
-
end
|
32
|
-
|
33
|
-
private
|
34
|
-
|
35
|
-
attr_reader :configuration, :client
|
36
|
-
|
37
|
-
def collate = private_methods.sort.grep(/add_/).each { |method| __send__ method }
|
38
|
-
|
39
|
-
def add_config
|
40
|
-
client.on(
|
41
|
-
"-c",
|
42
|
-
"--config ACTION",
|
43
|
-
%i[edit view],
|
44
|
-
"Manage gem configuration. Actions: edit || view."
|
45
|
-
) do |action|
|
46
|
-
configuration.merge! action_config: action
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def add_publish
|
51
|
-
client.on(
|
52
|
-
"-P",
|
53
|
-
"--publish VERSION",
|
54
|
-
Versionaire::Version,
|
55
|
-
"Tag and push milestone to remote repository."
|
56
|
-
) do |version|
|
57
|
-
configuration.merge! action_publish: true, version:
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def add_status
|
62
|
-
client.on "-s", "--status", "Show project status." do
|
63
|
-
configuration.merge! action_status: true
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
def add_version
|
68
|
-
client.on "-v", "--version", "Show gem version." do
|
69
|
-
configuration.merge! action_version: true
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
def add_help
|
74
|
-
client.on "-h", "--help", "Show this message." do
|
75
|
-
configuration.merge! action_help: true
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Milestoner
|
4
|
-
module Configuration
|
5
|
-
# Defines configuration content as the primary source of truth for use throughout the gem.
|
6
|
-
Content = Struct.new(
|
7
|
-
:action_config,
|
8
|
-
:action_publish,
|
9
|
-
:action_push,
|
10
|
-
:action_status,
|
11
|
-
:action_tag,
|
12
|
-
:action_version,
|
13
|
-
:action_help,
|
14
|
-
:documentation_format,
|
15
|
-
:prefixes,
|
16
|
-
:version,
|
17
|
-
keyword_init: true
|
18
|
-
) do
|
19
|
-
def initialize *arguments
|
20
|
-
super
|
21
|
-
freeze
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "pathname"
|
4
|
-
require "refinements/hashes"
|
5
|
-
require "refinements/structs"
|
6
|
-
require "runcom"
|
7
|
-
require "yaml"
|
8
|
-
|
9
|
-
module Milestoner
|
10
|
-
module Configuration
|
11
|
-
# Represents the fully assembled Command Line Interface (CLI) configuration.
|
12
|
-
class Loader
|
13
|
-
using Refinements::Hashes
|
14
|
-
using Refinements::Structs
|
15
|
-
|
16
|
-
DEFAULTS = YAML.load_file(Pathname(__dir__).join("defaults.yml")).freeze
|
17
|
-
CLIENT = Runcom::Config.new "milestoner/configuration.yml", defaults: DEFAULTS
|
18
|
-
|
19
|
-
def self.call = new.call
|
20
|
-
|
21
|
-
def self.with_defaults = new(client: DEFAULTS)
|
22
|
-
|
23
|
-
def initialize content: Content.new, client: CLIENT
|
24
|
-
@content = content
|
25
|
-
@client = client
|
26
|
-
end
|
27
|
-
|
28
|
-
def call = content.merge(**client.to_h.flatten_keys)
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
attr_reader :content, :client
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|