structured_changelog 0.3.0 → 0.4.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
- data/CHANGELOG.md +14 -6
- data/README.md +22 -7
- data/Rakefile +1 -1
- data/lib/structured_changelog.rb +7 -0
- data/lib/structured_changelog/release.rb +2 -4
- data/lib/structured_changelog/release_comparators.rb +31 -0
- data/lib/structured_changelog/release_comparators/base.rb +21 -0
- data/lib/structured_changelog/release_comparators/matches_all_versions.rb +15 -0
- data/lib/structured_changelog/release_comparators/matches_single_version.rb +15 -0
- data/lib/structured_changelog/release_comparators/matches_versions_between.rb +25 -0
- data/lib/structured_changelog/release_comparators/matches_versions_greater_than_or_equal_to.rb +21 -0
- data/lib/structured_changelog/release_comparators/matches_versions_less_than_or_equal_to.rb +21 -0
- data/lib/structured_changelog/tasks.rb +1 -0
- data/lib/structured_changelog/tasks/notes.rb +15 -0
- data/lib/structured_changelog/{task.rb → tasks/validate.rb} +3 -3
- data/lib/structured_changelog/version.rb +5 -0
- data/structured_changelog.gemspec +4 -4
- metadata +16 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 71d85da1fe01d03fce4a37f8217be7eb23171232
|
4
|
+
data.tar.gz: 7f90cc3e3253bb41b44970789154df852a69937e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: be77a461dea2b7ed531b1bbac9b34960e3a032761dc92c4c922ac199d6dff34f8b099c93f6b1964d8c87be131a2ef13d7cc748b5664532e180e2010402bf3602
|
7
|
+
data.tar.gz: 0f7cb255f3b8b31d2a975aeea479e207063b337e49065597fb135efa22c1140636ecced8d609443dcf5e70014cf8b7eda3c6b361b76ee51e7ba19a3ff5a0ee3f
|
data/CHANGELOG.md
CHANGED
@@ -1,16 +1,24 @@
|
|
1
|
-
## ROADMAP 0.
|
1
|
+
## ROADMAP 1.0.0
|
2
2
|
|
3
|
-
*
|
3
|
+
* validate that each line starts with BREAKING:/FEATURE:/FIX:
|
4
|
+
* validate that each release has the appropriate version
|
5
|
+
* validate that release numbers increase monotonically
|
6
|
+
* have a README
|
7
|
+
* support variant versions (rc1, pre, alpha, etc..)
|
8
|
+
* centralize the version regex (if possible)
|
9
|
+
|
10
|
+
## RELEASE 0.4.0
|
11
|
+
|
12
|
+
* FEATURE: view the release notes for a version (or range of versions) with "rake changelog:notes"
|
4
13
|
|
5
14
|
## RELEASE 0.3.0
|
6
15
|
|
7
|
-
* FEATURE include a
|
8
|
-
* FEATURE rake task includes color output
|
16
|
+
* FEATURE: include a changelog:validate task
|
9
17
|
|
10
18
|
## RELEASE 0.2.0
|
11
19
|
|
12
|
-
* FEATURE handle ROADMAP blocks
|
20
|
+
* FEATURE: handle ROADMAP blocks
|
13
21
|
|
14
22
|
## RELEASE 0.1.0
|
15
23
|
|
16
|
-
* FEATURE handle RELEASE blocks
|
24
|
+
* FEATURE: handle RELEASE blocks
|
data/README.md
CHANGED
@@ -1,8 +1,27 @@
|
|
1
1
|
# StructuredChangelog
|
2
2
|
|
3
|
-
|
3
|
+
You have a changelog in your repo, right? Great! Then what do you need with a `VERSION` constant?
|
4
|
+
|
5
|
+
To parse your gem's current version right off your changelog, put this in `yourproject.gemspec`:
|
6
|
+
|
7
|
+
```ruby
|
8
|
+
require 'structured_changelog'
|
9
|
+
|
10
|
+
Gem::Specification.new do |spec|
|
11
|
+
...
|
12
|
+
spec.version = StructuredChangeog.new("path/to/CHANGELOG.md").version
|
13
|
+
...
|
14
|
+
end
|
15
|
+
```
|
16
|
+
|
17
|
+
To add `rake structured_changelog:validate` and make it part of `rake release`, add this to your `Rakefile`:
|
18
|
+
|
19
|
+
```ruby
|
20
|
+
require 'structured_changelog/tasks'
|
21
|
+
```
|
22
|
+
|
23
|
+
|
4
24
|
|
5
|
-
TODO: Delete this and the text above, and describe your gem
|
6
25
|
|
7
26
|
## Installation
|
8
27
|
|
@@ -20,10 +39,6 @@ Or install it yourself as:
|
|
20
39
|
|
21
40
|
$ gem install structured_changelog
|
22
41
|
|
23
|
-
## Usage
|
24
|
-
|
25
|
-
TODO: Write usage instructions here
|
26
|
-
|
27
42
|
## Development
|
28
43
|
|
29
44
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
@@ -32,5 +47,5 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
32
47
|
|
33
48
|
## Contributing
|
34
49
|
|
35
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
50
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/yarmiganosca/structured_changelog. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
36
51
|
|
data/Rakefile
CHANGED
data/lib/structured_changelog.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'pathname'
|
2
2
|
require 'structured_changelog/release'
|
3
3
|
require 'structured_changelog/roadmap'
|
4
|
+
require 'structured_changelog/release_comparators'
|
4
5
|
|
5
6
|
class StructuredChangelog
|
6
7
|
attr_reader :path, :releases, :roadmaps
|
@@ -32,6 +33,12 @@ class StructuredChangelog
|
|
32
33
|
notifications.empty?
|
33
34
|
end
|
34
35
|
|
36
|
+
def find_releases(query)
|
37
|
+
comparator = ReleaseComparators.comparator_for(query)
|
38
|
+
|
39
|
+
releases.select(&comparator)
|
40
|
+
end
|
41
|
+
|
35
42
|
private
|
36
43
|
|
37
44
|
def latest_release
|
@@ -1,5 +1,7 @@
|
|
1
1
|
class StructuredChangelog
|
2
2
|
class Release
|
3
|
+
attr_reader :contents
|
4
|
+
|
3
5
|
def self.pattern
|
4
6
|
/^## RELEASE (?<version>\d+\.\d+\.\d+)$/
|
5
7
|
end
|
@@ -23,9 +25,5 @@ class StructuredChangelog
|
|
23
25
|
def <=>(release)
|
24
26
|
version <=> release.version
|
25
27
|
end
|
26
|
-
|
27
|
-
private
|
28
|
-
|
29
|
-
attr_reader :contents
|
30
28
|
end
|
31
29
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
Dir[File.join(File.dirname(__FILE__), "release_comparators", "*.rb")].each(&method(:require))
|
2
|
+
|
3
|
+
class StructuredChangelog
|
4
|
+
IllegalQuery = Class.new(StandardError)
|
5
|
+
|
6
|
+
module ReleaseComparators
|
7
|
+
def self.comparator_for(query)
|
8
|
+
comparator_class = comparator_class_for_query(query)
|
9
|
+
|
10
|
+
raise IllegalQuery.new(query) unless comparator_class
|
11
|
+
|
12
|
+
comparator_class.new(query)
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.comparator_class_for_query(query)
|
16
|
+
comparator_classes.find do |comparator_class|
|
17
|
+
comparator_class.appropriate_for_query?(query)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.comparator_classes
|
22
|
+
[
|
23
|
+
MatchesAllVersions,
|
24
|
+
MatchesSingleVersion,
|
25
|
+
MatchesVersionsGreaterThanOrEqualTo,
|
26
|
+
MatchesVersionsLessThanOrEqualTo,
|
27
|
+
MatchesVersionsBetween
|
28
|
+
]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class StructuredChangelog
|
2
|
+
module ReleaseComparators
|
3
|
+
class Base
|
4
|
+
def self.appropriate_for_query?(query)
|
5
|
+
!query.match(pattern).nil?
|
6
|
+
end
|
7
|
+
|
8
|
+
def initialize(query)
|
9
|
+
@query = query
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_proc
|
13
|
+
method(:call).to_proc
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
attr_reader :query
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'structured_changelog/release_comparators/base'
|
2
|
+
|
3
|
+
class StructuredChangelog
|
4
|
+
module ReleaseComparators
|
5
|
+
class MatchesSingleVersion < Base
|
6
|
+
def self.pattern
|
7
|
+
/^\d+\.\d+\.\d+$/
|
8
|
+
end
|
9
|
+
|
10
|
+
def call(release)
|
11
|
+
release.version == query
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'structured_changelog/release_comparators/base'
|
2
|
+
|
3
|
+
class StructuredChangelog
|
4
|
+
module ReleaseComparators
|
5
|
+
class MatchesVersionsBetween < Base
|
6
|
+
def self.pattern
|
7
|
+
/^(?<floor>\d+\.\d+\.\d+)\<(?<ceiling>\d+\.\d+\.\d+)$/
|
8
|
+
end
|
9
|
+
|
10
|
+
def call(release)
|
11
|
+
floor < release.version && release.version < ceiling
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def floor
|
17
|
+
query.match(self.class.pattern)[:floor]
|
18
|
+
end
|
19
|
+
|
20
|
+
def ceiling
|
21
|
+
query.match(self.class.pattern)[:ceiling]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/structured_changelog/release_comparators/matches_versions_greater_than_or_equal_to.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'structured_changelog/release_comparators/base'
|
2
|
+
|
3
|
+
class StructuredChangelog
|
4
|
+
module ReleaseComparators
|
5
|
+
class MatchesVersionsGreaterThanOrEqualTo < Base
|
6
|
+
def self.pattern
|
7
|
+
/^(?<version>\d+\.\d+\.\d+)\<$/
|
8
|
+
end
|
9
|
+
|
10
|
+
def call(release)
|
11
|
+
version <= release.version
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def version
|
17
|
+
query.match(self.class.pattern)[:version]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'structured_changelog/release_comparators/base'
|
2
|
+
|
3
|
+
class StructuredChangelog
|
4
|
+
module ReleaseComparators
|
5
|
+
class MatchesVersionsLessThanOrEqualTo < Base
|
6
|
+
def self.pattern
|
7
|
+
/^\<(?<version>\d+\.\d+\.\d+)$/
|
8
|
+
end
|
9
|
+
|
10
|
+
def call(release)
|
11
|
+
release.version <= version
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def version
|
17
|
+
query.match(self.class.pattern)[:version]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Dir[File.join(File.dirname(__FILE__), 'tasks', '*.rb')].each(&method(:require))
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'structured_changelog'
|
2
|
+
|
3
|
+
desc "Display Release Notes for One or Multiple Versions"
|
4
|
+
task "changelog:notes", [:query, :path] do |_task, arguments|
|
5
|
+
query = arguments.to_h.fetch(:query) { "ALL" }
|
6
|
+
path = arguments.to_h.fetch(:path) { "CHANGELOG.md" }
|
7
|
+
|
8
|
+
changelog = StructuredChangelog.new(path)
|
9
|
+
releases = changelog.find_releases(query)
|
10
|
+
|
11
|
+
releases.each do |release|
|
12
|
+
puts release.contents
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
@@ -2,14 +2,14 @@ require 'bundler/gem_tasks'
|
|
2
2
|
require 'structured_changelog'
|
3
3
|
|
4
4
|
desc 'Validate your Structured Changelog'
|
5
|
-
task '
|
5
|
+
task 'changelog:validate', [:path] do |_task, arguments|
|
6
6
|
path = arguments.to_h.fetch(:path) { "CHANGELOG.md" }
|
7
7
|
|
8
8
|
puts "\e[32mValid #{path}\e[0m" if StructuredChangelog.new(path).validate
|
9
9
|
end
|
10
10
|
|
11
11
|
if (guard_clean_task = Rake::Task['release:guard_clean'])
|
12
|
-
guard_clean_task.enhance(['
|
12
|
+
guard_clean_task.enhance(['changelog:validate'])
|
13
13
|
elsif (release_task = Rake::Task['release'])
|
14
|
-
release_task.enhance(['
|
14
|
+
release_task.enhance(['changelog:validate'])
|
15
15
|
end
|
@@ -1,16 +1,16 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
lib = File.expand_path('../lib', __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'structured_changelog'
|
4
|
+
require 'structured_changelog/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "structured_changelog"
|
8
|
-
spec.version = StructuredChangelog
|
8
|
+
spec.version = StructuredChangelog::VERSION
|
9
9
|
spec.authors = ["Chris Hoffman"]
|
10
10
|
spec.email = ["yarmiganosca@gmail.com"]
|
11
11
|
|
12
|
-
spec.summary = %q{A useful changelog for a change}
|
13
|
-
spec.description = "
|
12
|
+
spec.summary = %q{A useful changelog, for a change.}
|
13
|
+
spec.description = "Version your gem through your changelog, not a VERSION constant."
|
14
14
|
spec.homepage = "https://www.github.com/yarmiganosca/structured_changelog"
|
15
15
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: structured_changelog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Hoffman
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-11-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -94,7 +94,7 @@ dependencies:
|
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
|
-
description:
|
97
|
+
description: Version your gem through your changelog, not a VERSION constant.
|
98
98
|
email:
|
99
99
|
- yarmiganosca@gmail.com
|
100
100
|
executables: []
|
@@ -113,8 +113,18 @@ files:
|
|
113
113
|
- bin/setup
|
114
114
|
- lib/structured_changelog.rb
|
115
115
|
- lib/structured_changelog/release.rb
|
116
|
+
- lib/structured_changelog/release_comparators.rb
|
117
|
+
- lib/structured_changelog/release_comparators/base.rb
|
118
|
+
- lib/structured_changelog/release_comparators/matches_all_versions.rb
|
119
|
+
- lib/structured_changelog/release_comparators/matches_single_version.rb
|
120
|
+
- lib/structured_changelog/release_comparators/matches_versions_between.rb
|
121
|
+
- lib/structured_changelog/release_comparators/matches_versions_greater_than_or_equal_to.rb
|
122
|
+
- lib/structured_changelog/release_comparators/matches_versions_less_than_or_equal_to.rb
|
116
123
|
- lib/structured_changelog/roadmap.rb
|
117
|
-
- lib/structured_changelog/
|
124
|
+
- lib/structured_changelog/tasks.rb
|
125
|
+
- lib/structured_changelog/tasks/notes.rb
|
126
|
+
- lib/structured_changelog/tasks/validate.rb
|
127
|
+
- lib/structured_changelog/version.rb
|
118
128
|
- structured_changelog.gemspec
|
119
129
|
homepage: https://www.github.com/yarmiganosca/structured_changelog
|
120
130
|
licenses: []
|
@@ -135,8 +145,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
135
145
|
version: '0'
|
136
146
|
requirements: []
|
137
147
|
rubyforge_project:
|
138
|
-
rubygems_version: 2.
|
148
|
+
rubygems_version: 2.6.3
|
139
149
|
signing_key:
|
140
150
|
specification_version: 4
|
141
|
-
summary: A useful changelog for a change
|
151
|
+
summary: A useful changelog, for a change.
|
142
152
|
test_files: []
|