milestoner 17.6.0 → 17.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.adoc +5 -5
- data/lib/milestoner/builders/ascii_doc.rb +2 -0
- data/lib/milestoner/builders/markdown.rb +2 -0
- data/lib/milestoner/builders/stream.rb +2 -0
- data/lib/milestoner/builders/web.rb +2 -0
- data/lib/milestoner/cli/actions/build/label.rb +0 -2
- data/lib/milestoner/cli/actions/build/root.rb +0 -1
- data/lib/milestoner/cli/actions/build/version.rb +0 -2
- data/lib/milestoner/cli/actions/cache/create.rb +1 -1
- data/lib/milestoner/cli/actions/cache/delete.rb +1 -1
- data/lib/milestoner/cli/actions/cache/find.rb +1 -1
- data/lib/milestoner/cli/actions/cache/list.rb +1 -1
- data/lib/milestoner/cli/actions/publish.rb +0 -2
- data/lib/milestoner/cli/commands/build.rb +0 -3
- data/lib/milestoner/cli/commands/cache.rb +0 -3
- data/lib/milestoner/commits/categorizer.rb +24 -23
- data/lib/milestoner/commits/collector.rb +15 -3
- data/lib/milestoner/commits/enricher.rb +3 -5
- data/lib/milestoner/commits/enrichers/author.rb +1 -1
- data/lib/milestoner/commits/enrichers/colleague.rb +1 -1
- data/lib/milestoner/commits/versioner.rb +2 -1
- data/lib/milestoner/configuration/contract.rb +1 -0
- data/lib/milestoner/configuration/model.rb +1 -0
- data/lib/milestoner/configuration/transformers/build/root.rb +3 -3
- data/lib/milestoner/configuration/transformers/build/template_paths.rb +1 -1
- data/lib/milestoner/configuration/transformers/citations/description.rb +4 -4
- data/lib/milestoner/configuration/transformers/citations/label.rb +4 -4
- data/lib/milestoner/configuration/transformers/gems/description.rb +3 -4
- data/lib/milestoner/configuration/transformers/gems/label.rb +4 -5
- data/lib/milestoner/configuration/transformers/gems/name.rb +3 -4
- data/lib/milestoner/configuration/transformers/gems/uri.rb +4 -5
- data/lib/milestoner/configuration/transformers/generator/label.rb +3 -3
- data/lib/milestoner/configuration/transformers/generator/uri.rb +3 -3
- data/lib/milestoner/configuration/transformers/generator/version.rb +3 -3
- data/lib/milestoner/configuration/transformers/project/author.rb +3 -3
- data/lib/milestoner/configuration/transformers/project/generator.rb +2 -2
- data/lib/milestoner/configuration/transformers/project/label.rb +3 -3
- data/lib/milestoner/configuration/transformers/project/name.rb +3 -3
- data/lib/milestoner/configuration/transformers/project/version.rb +3 -3
- data/lib/milestoner/configuration/transformers/uri/avatar.rb +5 -6
- data/lib/milestoner/configuration/transformers/uri/commit.rb +8 -9
- data/lib/milestoner/configuration/transformers/uri/profile.rb +5 -6
- data/lib/milestoner/configuration/transformers/uri/review.rb +8 -9
- data/lib/milestoner/configuration/transformers/uri/tracker.rb +8 -9
- data/lib/milestoner/container.rb +1 -0
- data/lib/milestoner/tags/creator.rb +5 -2
- data/lib/milestoner/views/context.rb +4 -1
- data/lib/milestoner/views/milestones/show.rb +0 -1
- data/lib/milestoner/views/parts/commit.rb +1 -2
- data/milestoner.gemspec +5 -4
- data.tar.gz.sig +0 -0
- metadata +22 -8
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: db830f8b4d06e54aba148ef3b9137dde5bdfbe53880269b02ac81ab67ffb6b31
|
4
|
+
data.tar.gz: 1e94ce0158f88ab0c58662d7f63d70c2f48460467ccb313071c7192f040e79ca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d5793c46062eaf6d98fa0c73b1462cb36eb31e84729fd2bdda90bad660057014952d072abe2196a384c42213e77e3a4f6fac45914749eb7fed5f2270024e3f92
|
7
|
+
data.tar.gz: eab9b9e88db0696031cb823e650b8f325731b0b62ce0e269dfe07dda538002693186466df13824d8af2c062c26ceb1617167cd614809761c99f41501be159605
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/README.adoc
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
:git_link: link:https://git-scm.com[Git]
|
12
12
|
:git_lint_link: link:https://alchemists.io/projects/git-lint[Git Lint]
|
13
13
|
:hanami_link: link:https://hanamirb.org[Hanami]
|
14
|
-
:hanami_views_link: link:https://alchemists.io/articles/hanami_views[Hanami
|
14
|
+
:hanami_views_link: link:https://alchemists.io/articles/hanami_views[Hanami Views]
|
15
15
|
:hanamismith_link: link:https://alchemists.io/projects/hanamismith[Hanamismith]
|
16
16
|
:lode_link: link:https://alchemists.io/projects/lode[Lode]
|
17
17
|
:markdown_link: link:https://daringfireball.net/projects/markdown[Markdown]
|
@@ -73,7 +73,7 @@ image:https://alchemists.io/images/projects/milestoner/screenshots/build-web-exp
|
|
73
73
|
** image:https://alchemists.io/images/projects/milestoner/icons/commits/refactored.png[Refactored] Refactored
|
74
74
|
* Ensures {git_link} commit messages are alphabetically sorted for release note categorization and readability.
|
75
75
|
* Provides automatic versioning based on last {git_link} tag and current commit trailers. See {git_commit_anatomy_link} for details.
|
76
|
-
* Supports multiple release note build formats: {ascii_doc_link}, {markdown_link}, Stream (console), and Web (HTML). Each are fully customizable via your personal {xdg_link} configuration and {hanami_views_link}
|
76
|
+
* Supports multiple release note build formats: {ascii_doc_link}, {markdown_link}, Stream (console), and Web (HTML). Each are fully customizable via your personal {xdg_link} configuration and {hanami_views_link}.
|
77
77
|
|
78
78
|
== Requirements
|
79
79
|
|
@@ -174,7 +174,7 @@ The above can be customized as follows:
|
|
174
174
|
** `uri`: Required. The URI format for linking to avatars as formatted using {string_formats_link}. Default: GitHub. The `id` is dynamically calculated via the `external_id` of the user stored in the {lode_link} cache.
|
175
175
|
* `build`: Manages release note builds.
|
176
176
|
** `format`: Required. The build output format. Multiple formats are supported. Default: web.
|
177
|
-
** `layout`: Required. The layout used by
|
177
|
+
** `layout`: Required. The layout used by {hanami_views_link} when building release notes. Default: page.
|
178
178
|
** `root`: Required. The output location. This can be a relative or absolute path. Defaults to the `tmp` directory of your current project. The path is automatically created if missing.
|
179
179
|
* `commit`: Manages commit categories, emojis, and hyperlinks.
|
180
180
|
** `categories`: Required. By default, only five categories are supported which pairs well with the {git_lint_link} gem. Category order is important with the first taking precedence over the second and so forth. Special characters are allowed for prefixes but should be enclosed in quotes. To disable categories, use an empty array. Example: `categories: []`.
|
@@ -339,7 +339,7 @@ Given the above, the resulting version would be: 2.0.0. This is because the high
|
|
339
339
|
|
340
340
|
==== Templates
|
341
341
|
|
342
|
-
Build template functionality is powered by
|
342
|
+
Build template functionality is powered by {hanami_views_link} which means you can customize the HTML structure, CSS style, and more. The quickest way to get started is to copy the `templates` folder structure -- included with this gem -- to your preferred {runcom_link} configuration. For example, this gem's template structure is:
|
343
343
|
|
344
344
|
....
|
345
345
|
lib/milestoner/templates
|
@@ -371,7 +371,7 @@ This means you could, for example, copy all of this gem's templates to your own
|
|
371
371
|
cp -r <milestoner_gem_root>/lib/milestoner/templates $HOME/.config/milestoner/templates
|
372
372
|
----
|
373
373
|
|
374
|
-
Milestoner searches your {runcom_link} configuration first and, if templates are detected, will be used instead. Otherwise, Milestoner
|
374
|
+
Milestoner searches your {runcom_link} configuration first and, if templates are detected, will be used instead. Otherwise, Milestoner falls back to it's own templates. Once {runcom_link} has calculated all possible template locations, {hanami_views_link} handle the final loading and evaluation of your templates.
|
375
375
|
|
376
376
|
==== Web Format
|
377
377
|
|
@@ -24,7 +24,7 @@ module Milestoner
|
|
24
24
|
|
25
25
|
def process values
|
26
26
|
external_id, handle, name = values.split ","
|
27
|
-
client.
|
27
|
+
client.write(:users) { upsert({external_id:, handle:, name:}) }
|
28
28
|
end
|
29
29
|
|
30
30
|
def log_info(message) = logger.info { message }
|
@@ -1,6 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "refinements/struct"
|
4
3
|
require "sod"
|
5
4
|
require "versionaire"
|
6
5
|
|
@@ -11,7 +10,6 @@ module Milestoner
|
|
11
10
|
class Publish < Sod::Action
|
12
11
|
include Import[:configuration]
|
13
12
|
|
14
|
-
using Refinements::Struct
|
15
13
|
using Versionaire::Cast
|
16
14
|
|
17
15
|
description "Publish milestone."
|
@@ -1,6 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "refinements/pathname"
|
4
3
|
require "sod"
|
5
4
|
|
6
5
|
module Milestoner
|
@@ -11,8 +10,6 @@ module Milestoner
|
|
11
10
|
include Import[:input, :logger, :kernel]
|
12
11
|
include Builders::Import[:ascii_doc, :markdown, :stream, :web]
|
13
12
|
|
14
|
-
using Refinements::Pathname
|
15
|
-
|
16
13
|
handle "build"
|
17
14
|
|
18
15
|
description "Build milestone."
|
@@ -1,6 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "refinements/pathname"
|
4
3
|
require "sod"
|
5
4
|
|
6
5
|
module Milestoner
|
@@ -10,8 +9,6 @@ module Milestoner
|
|
10
9
|
class Cache < Sod::Command
|
11
10
|
include Import[:input, :logger]
|
12
11
|
|
13
|
-
using Refinements::Pathname
|
14
|
-
|
15
12
|
handle "cache"
|
16
13
|
|
17
14
|
description "Manage cache."
|
@@ -1,47 +1,48 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "core"
|
3
4
|
require "refinements/array"
|
4
|
-
require "versionaire"
|
5
5
|
|
6
6
|
module Milestoner
|
7
7
|
module Commits
|
8
8
|
# Retrieves and categorizes Git repository commit tagged or untagged history.
|
9
9
|
class Categorizer
|
10
|
-
include Import[:git]
|
10
|
+
include Import[:git, :input]
|
11
11
|
|
12
12
|
using Refinements::Array
|
13
13
|
|
14
|
-
def initialize(collector: Collector.new,
|
14
|
+
def initialize(collector: Collector.new, **)
|
15
15
|
@collector = collector
|
16
|
-
@expression = expression
|
17
16
|
super(**)
|
18
|
-
end
|
19
17
|
|
20
|
-
|
21
|
-
|
18
|
+
@labels = input.commit_categories.pluck :label
|
19
|
+
@pattern = labels.empty? ? // : Regexp.union(labels)
|
20
|
+
end
|
22
21
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
.values
|
28
|
-
.flatten
|
22
|
+
def call min: Collector::MIN, max: Collector::MAX
|
23
|
+
collect(min, max).each_value { |commits| commits.sort_by!(&:subject) }
|
24
|
+
.values
|
25
|
+
.flatten
|
29
26
|
end
|
30
27
|
|
31
28
|
private
|
32
29
|
|
33
|
-
attr_reader :collector, :
|
34
|
-
|
35
|
-
def
|
36
|
-
collector.call
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
30
|
+
attr_reader :collector, :labels, :pattern
|
31
|
+
|
32
|
+
def collect min, max
|
33
|
+
collector.call(min:, max:)
|
34
|
+
.value_or(Core::EMPTY_ARRAY)
|
35
|
+
.each
|
36
|
+
.with_object categories do |commit, collection|
|
37
|
+
category = commit.subject[pattern]
|
38
|
+
key = collection.key?(category) ? category : "Unknown"
|
39
|
+
collection[key] << commit
|
40
|
+
end
|
41
41
|
end
|
42
42
|
|
43
|
-
def
|
44
|
-
|
43
|
+
def categories
|
44
|
+
labels.reduce({}) { |group, prefix| group.merge prefix => [] }
|
45
|
+
.merge! "Unknown" => []
|
45
46
|
end
|
46
47
|
end
|
47
48
|
end
|
@@ -1,16 +1,28 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "dry/monads"
|
4
|
+
|
3
5
|
module Milestoner
|
4
6
|
module Commits
|
5
|
-
# Collects commits since last tag or all commits if untagged.
|
7
|
+
# Collects commits since last tag, a specific range, or all commits if untagged.
|
6
8
|
class Collector
|
9
|
+
include Dry::Monads[:result]
|
7
10
|
include Import[:git]
|
8
11
|
|
9
|
-
|
12
|
+
MIN = :last
|
13
|
+
MAX = :HEAD
|
14
|
+
|
15
|
+
def call(min: MIN, max: MAX) = git.tagged? ? slice(min, max) : all
|
10
16
|
|
11
17
|
private
|
12
18
|
|
13
|
-
def
|
19
|
+
def slice min, max
|
20
|
+
case [min, max]
|
21
|
+
in MIN, MAX then git.tag_last.bind { |tag| git.commits "#{tag}..#{max}" }
|
22
|
+
in String, String then git.commits "#{min}..#{max}"
|
23
|
+
else Failure "Invalid minimum and/or maximum range: #{min}..#{max}."
|
24
|
+
end
|
25
|
+
end
|
14
26
|
|
15
27
|
def all = git.commits
|
16
28
|
end
|
@@ -29,9 +29,9 @@ module Milestoner
|
|
29
29
|
super(**)
|
30
30
|
end
|
31
31
|
|
32
|
-
def call
|
33
|
-
categorizer.call
|
34
|
-
.map { |commit|
|
32
|
+
def call min: Collector::MIN, max: Collector::MAX
|
33
|
+
categorizer.call(min:, max:)
|
34
|
+
.map { |commit| model.for(commit, **build_attributes(commit)) }
|
35
35
|
.then { |commits| Success commits }
|
36
36
|
end
|
37
37
|
|
@@ -39,8 +39,6 @@ module Milestoner
|
|
39
39
|
|
40
40
|
attr_reader :categorizer, :model
|
41
41
|
|
42
|
-
def record_for(commit) = model.for(commit, **build_attributes(commit))
|
43
|
-
|
44
42
|
def build_attributes commit
|
45
43
|
infused_keys.each.with_object({}) do |command, attributes|
|
46
44
|
attributes[command] = __send__(command).call commit
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "core"
|
3
4
|
require "dry/monads"
|
4
5
|
require "versionaire"
|
5
6
|
|
@@ -30,7 +31,7 @@ module Milestoner
|
|
30
31
|
attr_reader :defaults, :collector
|
31
32
|
|
32
33
|
def trailer_milestones
|
33
|
-
collector.call.value_or(
|
34
|
+
collector.call.value_or(Core::EMPTY_ARRAY).each.with_object [] do |commit, values|
|
34
35
|
commit.trailer_value_for(trailer_key).bind { |milestone| values.append milestone.to_sym }
|
35
36
|
end
|
36
37
|
end
|
@@ -26,6 +26,7 @@ module Milestoner
|
|
26
26
|
required(:generator_label).filled :string
|
27
27
|
required(:generator_uri).filled :string
|
28
28
|
required(:generator_version).filled Etcher::Types::Version
|
29
|
+
required(:loaded_at).filled :time
|
29
30
|
required(:profile_domain).filled :string
|
30
31
|
required(:profile_uri).filled :string
|
31
32
|
required(:project_author).filled :string
|
@@ -11,9 +11,9 @@ module Milestoner
|
|
11
11
|
module Build
|
12
12
|
using Refinements::Hash
|
13
13
|
|
14
|
-
Root = lambda do |
|
15
|
-
|
16
|
-
Dry::Monads::Success
|
14
|
+
Root = lambda do |attributes, key = :build_root|
|
15
|
+
attributes.transform_with! key => -> value { Pathname(value).expand_path }
|
16
|
+
Dry::Monads::Success attributes
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
@@ -23,10 +23,10 @@ module Milestoner
|
|
23
23
|
@citation = citation
|
24
24
|
end
|
25
25
|
|
26
|
-
def call
|
27
|
-
|
28
|
-
|
29
|
-
|
26
|
+
def call attributes
|
27
|
+
attributes.fetch_value(key) { citation.open(path).abstract }
|
28
|
+
.then { |value| value unless String(value).empty? }
|
29
|
+
.then { |value| Success attributes.merge!(key => value) }
|
30
30
|
end
|
31
31
|
|
32
32
|
private
|
@@ -23,10 +23,10 @@ module Milestoner
|
|
23
23
|
@citation = citation
|
24
24
|
end
|
25
25
|
|
26
|
-
def call
|
27
|
-
|
28
|
-
|
29
|
-
|
26
|
+
def call attributes
|
27
|
+
attributes.fetch_value(key) { citation.open(path).title }
|
28
|
+
.then { |value| value unless String(value).empty? }
|
29
|
+
.then { |value| Success attributes.merge!(key => value) }
|
30
30
|
end
|
31
31
|
|
32
32
|
private
|
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
require "dry/monads"
|
4
4
|
require "pathname"
|
5
|
-
require "spek"
|
6
5
|
|
7
6
|
module Milestoner
|
8
7
|
module Configuration
|
@@ -19,9 +18,9 @@ module Milestoner
|
|
19
18
|
super(**)
|
20
19
|
end
|
21
20
|
|
22
|
-
def call
|
23
|
-
|
24
|
-
|
21
|
+
def call attributes
|
22
|
+
attributes.fetch(key) { spec_loader.call(path).summary }
|
23
|
+
.then { |value| Success attributes.merge!(key => value) }
|
25
24
|
end
|
26
25
|
|
27
26
|
private
|
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
require "dry/monads"
|
4
4
|
require "pathname"
|
5
|
-
require "spek"
|
6
5
|
|
7
6
|
module Milestoner
|
8
7
|
module Configuration
|
@@ -19,10 +18,10 @@ module Milestoner
|
|
19
18
|
super(**)
|
20
19
|
end
|
21
20
|
|
22
|
-
def call
|
23
|
-
|
24
|
-
|
25
|
-
|
21
|
+
def call attributes
|
22
|
+
attributes.fetch(key) { spec_loader.call(path).label }
|
23
|
+
.then { |value| value unless value == "Undefined" }
|
24
|
+
.then { |value| Success attributes.merge!(key => value) }
|
26
25
|
end
|
27
26
|
|
28
27
|
private
|
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
require "dry/monads"
|
4
4
|
require "pathname"
|
5
|
-
require "spek"
|
6
5
|
|
7
6
|
module Milestoner
|
8
7
|
module Configuration
|
@@ -19,9 +18,9 @@ module Milestoner
|
|
19
18
|
super(**)
|
20
19
|
end
|
21
20
|
|
22
|
-
def call
|
23
|
-
|
24
|
-
|
21
|
+
def call attributes
|
22
|
+
attributes.fetch(key) { spec_loader.call(path).name }
|
23
|
+
.then { |value| Success attributes.merge!(key => value) }
|
25
24
|
end
|
26
25
|
|
27
26
|
private
|
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
require "dry/monads"
|
4
4
|
require "pathname"
|
5
|
-
require "spek"
|
6
5
|
|
7
6
|
module Milestoner
|
8
7
|
module Configuration
|
@@ -19,10 +18,10 @@ module Milestoner
|
|
19
18
|
super(**)
|
20
19
|
end
|
21
20
|
|
22
|
-
def call
|
23
|
-
|
24
|
-
|
25
|
-
|
21
|
+
def call attributes
|
22
|
+
attributes.fetch(key) { spec_loader.call(path).homepage_url }
|
23
|
+
.then { |value| value unless String(value).empty? }
|
24
|
+
.then { |value| Success attributes.merge!(key => value) }
|
26
25
|
end
|
27
26
|
|
28
27
|
private
|
@@ -16,9 +16,9 @@ module Milestoner
|
|
16
16
|
super(**)
|
17
17
|
end
|
18
18
|
|
19
|
-
def call
|
20
|
-
|
21
|
-
|
19
|
+
def call attributes
|
20
|
+
attributes.fetch(key) { specification.label }
|
21
|
+
.then { |value| Success attributes.merge!(key => value) }
|
22
22
|
end
|
23
23
|
|
24
24
|
private
|
@@ -16,9 +16,9 @@ module Milestoner
|
|
16
16
|
super(**)
|
17
17
|
end
|
18
18
|
|
19
|
-
def call
|
20
|
-
|
21
|
-
|
19
|
+
def call attributes
|
20
|
+
attributes.fetch(key) { specification.homepage_url }
|
21
|
+
.then { |value| Success attributes.merge!(key => value) }
|
22
22
|
end
|
23
23
|
|
24
24
|
private
|
@@ -16,9 +16,9 @@ module Milestoner
|
|
16
16
|
super(**)
|
17
17
|
end
|
18
18
|
|
19
|
-
def call
|
20
|
-
|
21
|
-
|
19
|
+
def call attributes
|
20
|
+
attributes.fetch(key) { specification.version }
|
21
|
+
.then { |value| Success attributes.merge!(key => value) }
|
22
22
|
end
|
23
23
|
|
24
24
|
private
|
@@ -19,9 +19,9 @@ module Milestoner
|
|
19
19
|
super(**)
|
20
20
|
end
|
21
21
|
|
22
|
-
def call
|
23
|
-
|
24
|
-
|
22
|
+
def call attributes
|
23
|
+
attributes.fetch_value(key) { git.get("user.name", nil).value_or(nil) }
|
24
|
+
.then { |value| Success attributes.merge!(key => value) }
|
25
25
|
end
|
26
26
|
|
27
27
|
private
|
@@ -16,13 +16,13 @@ module Milestoner
|
|
16
16
|
super(**)
|
17
17
|
end
|
18
18
|
|
19
|
-
def call
|
19
|
+
def call attributes
|
20
20
|
warn "`#{self.class}##{__method__}` is deprecated, use " \
|
21
21
|
"`Milestoner::Configuration::Transformers::Generator::Label` or " \
|
22
22
|
"`Milestoner::Configuration::Transformers::Generator::URI` instead.",
|
23
23
|
category: :deprecated
|
24
24
|
|
25
|
-
Success({key => specification.labeled_version}.merge!(
|
25
|
+
Success({key => specification.labeled_version}.merge!(attributes))
|
26
26
|
end
|
27
27
|
|
28
28
|
private
|
@@ -13,9 +13,9 @@ module Milestoner
|
|
13
13
|
using Refinements::String
|
14
14
|
using Refinements::Hash
|
15
15
|
|
16
|
-
Label = lambda do |
|
17
|
-
|
18
|
-
|
16
|
+
Label = lambda do |attributes, key = :project_label, default: Pathname.pwd.basename.to_s|
|
17
|
+
attributes.fetch_value(key) { default.titleize }
|
18
|
+
.then { |value| Dry::Monads::Success attributes.merge!(key => value) }
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
@@ -11,9 +11,9 @@ module Milestoner
|
|
11
11
|
module Project
|
12
12
|
using Refinements::Hash
|
13
13
|
|
14
|
-
Name = lambda do |
|
15
|
-
|
16
|
-
|
14
|
+
Name = lambda do |attributes, key = :project_name, default: Pathname.pwd.basename.to_s|
|
15
|
+
attributes.fetch_value(key) { default }
|
16
|
+
.then { |value| Dry::Monads::Success attributes.merge!(key => value) }
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
@@ -18,9 +18,9 @@ module Milestoner
|
|
18
18
|
@versioner = versioner
|
19
19
|
end
|
20
20
|
|
21
|
-
def call
|
22
|
-
|
23
|
-
|
21
|
+
def call attributes
|
22
|
+
attributes.fetch_value(key) { versioner.call }
|
23
|
+
.then { |value| Success attributes.merge!(key => value) }
|
24
24
|
end
|
25
25
|
|
26
26
|
private
|
@@ -1,19 +1,18 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "dry/monads"
|
4
|
-
require "pathname"
|
5
4
|
|
6
5
|
module Milestoner
|
7
6
|
module Configuration
|
8
7
|
module Transformers
|
9
8
|
module URI
|
10
|
-
Avatar = lambda do |
|
11
|
-
|
9
|
+
Avatar = lambda do |attributes, key = :avatar_uri|
|
10
|
+
uri, domain = attributes.values_at key, :avatar_domain
|
12
11
|
|
13
|
-
return Dry::Monads::Success
|
12
|
+
return Dry::Monads::Success attributes unless uri
|
14
13
|
|
15
|
-
|
16
|
-
Dry::Monads::Success
|
14
|
+
attributes[key] = format uri, domain:, id: "%<id>s"
|
15
|
+
Dry::Monads::Success attributes
|
17
16
|
end
|
18
17
|
end
|
19
18
|
end
|
@@ -1,22 +1,21 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "dry/monads"
|
4
|
-
require "pathname"
|
5
4
|
|
6
5
|
module Milestoner
|
7
6
|
module Configuration
|
8
7
|
module Transformers
|
9
8
|
module URI
|
10
|
-
Commit = lambda do |
|
11
|
-
owner, name, domain
|
12
|
-
|
13
|
-
|
14
|
-
|
9
|
+
Commit = lambda do |attributes, key = :commit_uri|
|
10
|
+
uri, owner, name, domain = attributes.values_at key,
|
11
|
+
:project_owner,
|
12
|
+
:project_name,
|
13
|
+
:commit_domain
|
15
14
|
|
16
|
-
return Dry::Monads::Success
|
15
|
+
return Dry::Monads::Success attributes unless uri
|
17
16
|
|
18
|
-
|
19
|
-
Dry::Monads::Success
|
17
|
+
attributes[key] = format uri, domain:, owner:, name:, id: "%<id>s"
|
18
|
+
Dry::Monads::Success attributes
|
20
19
|
end
|
21
20
|
end
|
22
21
|
end
|
@@ -1,19 +1,18 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "dry/monads"
|
4
|
-
require "pathname"
|
5
4
|
|
6
5
|
module Milestoner
|
7
6
|
module Configuration
|
8
7
|
module Transformers
|
9
8
|
module URI
|
10
|
-
Profile = lambda do |
|
11
|
-
|
9
|
+
Profile = lambda do |attributes, key = :profile_uri|
|
10
|
+
uri, domain = attributes.values_at key, :profile_domain
|
12
11
|
|
13
|
-
return Dry::Monads::Success
|
12
|
+
return Dry::Monads::Success attributes unless uri
|
14
13
|
|
15
|
-
|
16
|
-
Dry::Monads::Success
|
14
|
+
attributes[key] = format uri, domain:, id: "%<id>s"
|
15
|
+
Dry::Monads::Success attributes
|
17
16
|
end
|
18
17
|
end
|
19
18
|
end
|
@@ -1,22 +1,21 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "dry/monads"
|
4
|
-
require "pathname"
|
5
4
|
|
6
5
|
module Milestoner
|
7
6
|
module Configuration
|
8
7
|
module Transformers
|
9
8
|
module URI
|
10
|
-
Review = lambda do |
|
11
|
-
owner, name, domain
|
12
|
-
|
13
|
-
|
14
|
-
|
9
|
+
Review = lambda do |attributes, key = :review_uri|
|
10
|
+
uri, owner, name, domain = attributes.values_at key,
|
11
|
+
:project_owner,
|
12
|
+
:project_name,
|
13
|
+
:review_domain
|
15
14
|
|
16
|
-
return Dry::Monads::Success
|
15
|
+
return Dry::Monads::Success attributes unless uri
|
17
16
|
|
18
|
-
|
19
|
-
Dry::Monads::Success
|
17
|
+
attributes[key] = format uri, domain:, owner:, name:, id: "%<id>s"
|
18
|
+
Dry::Monads::Success attributes
|
20
19
|
end
|
21
20
|
end
|
22
21
|
end
|
@@ -1,22 +1,21 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "dry/monads"
|
4
|
-
require "pathname"
|
5
4
|
|
6
5
|
module Milestoner
|
7
6
|
module Configuration
|
8
7
|
module Transformers
|
9
8
|
module URI
|
10
|
-
Tracker = lambda do |
|
11
|
-
owner, name, domain
|
12
|
-
|
13
|
-
|
14
|
-
|
9
|
+
Tracker = lambda do |attributes, key = :tracker_uri|
|
10
|
+
uri, owner, name, domain = attributes.values_at key,
|
11
|
+
:project_owner,
|
12
|
+
:project_name,
|
13
|
+
:tracker_domain
|
15
14
|
|
16
|
-
return Dry::Monads::Success
|
15
|
+
return Dry::Monads::Success attributes unless uri
|
17
16
|
|
18
|
-
|
19
|
-
Dry::Monads::Success
|
17
|
+
attributes[key] = format uri, domain:, owner:, name:, id: "%<id>s"
|
18
|
+
Dry::Monads::Success attributes
|
20
19
|
end
|
21
20
|
end
|
22
21
|
end
|
data/lib/milestoner/container.rb
CHANGED
@@ -56,6 +56,7 @@ module Milestoner
|
|
56
56
|
.add_transformer(Configuration::Transformers::URI::Profile)
|
57
57
|
.add_transformer(Configuration::Transformers::URI::Review)
|
58
58
|
.add_transformer(Configuration::Transformers::URI::Tracker)
|
59
|
+
.add_transformer(Etcher::Transformers::Time.new)
|
59
60
|
end
|
60
61
|
|
61
62
|
register(:specification) { self[:spec_loader].call "#{__dir__}/../../milestoner.gemspec" }
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "
|
3
|
+
require "core"
|
4
4
|
require "refinements/string_io"
|
5
5
|
require "versionaire"
|
6
6
|
|
@@ -27,7 +27,10 @@ module Milestoner
|
|
27
27
|
version = compute_version override
|
28
28
|
|
29
29
|
return false if local? version
|
30
|
-
|
30
|
+
|
31
|
+
collection = collector.call.value_or Core::EMPTY_ARRAY
|
32
|
+
|
33
|
+
fail Error, "Unable to tag without commits." if collection.empty?
|
31
34
|
|
32
35
|
create version
|
33
36
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "core"
|
3
4
|
require "forwardable"
|
4
5
|
require "hanami/view"
|
5
6
|
|
@@ -24,7 +25,9 @@ module Milestoner
|
|
24
25
|
project_version
|
25
26
|
] => :input
|
26
27
|
|
27
|
-
def project_slug
|
28
|
+
def project_slug
|
29
|
+
[project_name, project_version].compact.join("_").tr ".", Core::EMPTY_STRING
|
30
|
+
end
|
28
31
|
|
29
32
|
def project_title = [project_label, project_version].compact.join " "
|
30
33
|
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "asciidoctor"
|
4
3
|
require "hanami/view"
|
5
4
|
require "refinements/array"
|
6
5
|
|
@@ -15,7 +14,7 @@ module Milestoner
|
|
15
14
|
using Refinements::Array
|
16
15
|
|
17
16
|
def initialize(**)
|
18
|
-
super
|
17
|
+
super
|
19
18
|
@prefixes = configuration.commit_categories.pluck :label
|
20
19
|
@authored_at = Time.at(value.authored_at.to_i).utc
|
21
20
|
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 = "17.
|
5
|
+
spec.version = "17.8.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 automated Git repository milestones."
|
10
10
|
spec.license = "Hippocratic-2.1"
|
11
11
|
|
12
12
|
spec.metadata = {
|
@@ -27,13 +27,14 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.add_dependency "cff", "~> 1.1"
|
28
28
|
spec.add_dependency "cogger", "~> 0.16"
|
29
29
|
spec.add_dependency "containable", "~> 0.0"
|
30
|
+
spec.add_dependency "core", "~> 1.3"
|
30
31
|
spec.add_dependency "dry-monads", "~> 1.6"
|
31
32
|
spec.add_dependency "dry-schema", "~> 1.13"
|
32
|
-
spec.add_dependency "etcher", "~> 1.
|
33
|
+
spec.add_dependency "etcher", "~> 1.5"
|
33
34
|
spec.add_dependency "gitt", "~> 3.2"
|
34
35
|
spec.add_dependency "hanami-view", "~> 2.1"
|
35
36
|
spec.add_dependency "infusible", "~> 3.5"
|
36
|
-
spec.add_dependency "lode", "~> 1.
|
37
|
+
spec.add_dependency "lode", "~> 1.4"
|
37
38
|
spec.add_dependency "redcarpet", "~> 3.6"
|
38
39
|
spec.add_dependency "refinements", "~> 12.1"
|
39
40
|
spec.add_dependency "runcom", "~> 11.0"
|
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: 17.
|
4
|
+
version: 17.8.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: 2024-
|
38
|
+
date: 2024-05-25 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: asciidoctor
|
@@ -93,6 +93,20 @@ dependencies:
|
|
93
93
|
- - "~>"
|
94
94
|
- !ruby/object:Gem::Version
|
95
95
|
version: '0.0'
|
96
|
+
- !ruby/object:Gem::Dependency
|
97
|
+
name: core
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - "~>"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '1.3'
|
103
|
+
type: :runtime
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '1.3'
|
96
110
|
- !ruby/object:Gem::Dependency
|
97
111
|
name: dry-monads
|
98
112
|
requirement: !ruby/object:Gem::Requirement
|
@@ -127,14 +141,14 @@ dependencies:
|
|
127
141
|
requirements:
|
128
142
|
- - "~>"
|
129
143
|
- !ruby/object:Gem::Version
|
130
|
-
version: '1.
|
144
|
+
version: '1.5'
|
131
145
|
type: :runtime
|
132
146
|
prerelease: false
|
133
147
|
version_requirements: !ruby/object:Gem::Requirement
|
134
148
|
requirements:
|
135
149
|
- - "~>"
|
136
150
|
- !ruby/object:Gem::Version
|
137
|
-
version: '1.
|
151
|
+
version: '1.5'
|
138
152
|
- !ruby/object:Gem::Dependency
|
139
153
|
name: gitt
|
140
154
|
requirement: !ruby/object:Gem::Requirement
|
@@ -183,14 +197,14 @@ dependencies:
|
|
183
197
|
requirements:
|
184
198
|
- - "~>"
|
185
199
|
- !ruby/object:Gem::Version
|
186
|
-
version: '1.
|
200
|
+
version: '1.4'
|
187
201
|
type: :runtime
|
188
202
|
prerelease: false
|
189
203
|
version_requirements: !ruby/object:Gem::Requirement
|
190
204
|
requirements:
|
191
205
|
- - "~>"
|
192
206
|
- !ruby/object:Gem::Version
|
193
|
-
version: '1.
|
207
|
+
version: '1.4'
|
194
208
|
- !ruby/object:Gem::Dependency
|
195
209
|
name: redcarpet
|
196
210
|
requirement: !ruby/object:Gem::Requirement
|
@@ -434,8 +448,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
434
448
|
- !ruby/object:Gem::Version
|
435
449
|
version: '0'
|
436
450
|
requirements: []
|
437
|
-
rubygems_version: 3.5.
|
451
|
+
rubygems_version: 3.5.10
|
438
452
|
signing_key:
|
439
453
|
specification_version: 4
|
440
|
-
summary: A command line interface for
|
454
|
+
summary: A command line interface for automated Git repository milestones.
|
441
455
|
test_files: []
|
metadata.gz.sig
CHANGED
Binary file
|