structured_changelog 0.7.2 → 0.8.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4db7e3d5f302817c0c4aa3f8ffd0ed1321d920cb
4
- data.tar.gz: 22620aa15246bfbfaea108c249de4b75858e7dc8
3
+ metadata.gz: 664aee7c11b7b9ca26529a0a8b2e008598684c74
4
+ data.tar.gz: e5178e0f57a8b66084b0ddf231f78b6d32867c09
5
5
  SHA512:
6
- metadata.gz: 3c91cceda7fc38e3db6a4ce61f7383302495a81a53f253c6d2f25bc014f78e21571d13ab3e28c65246677a142a96c4fd0e7eaa8df3e41ef417d9d7f15e3fbd73
7
- data.tar.gz: 0cef48170939af44951045bcce804aa5b243352e5602a0112500138dcf6de82dfcfcf2a1e77feaed88bea9bce627abeed89cbe343bc35881aee5029a61b561b6
6
+ metadata.gz: 0ca2f2a8cbf4b9f17f62fc49a552e6f861ed338d08017e73291d95cb0196c671f28be902a3b0848468237df5a777f1cf9be6927c8a8bf8c197aa684000fa1651
7
+ data.tar.gz: 01f883a91e896e01e5d4306f0c1d0e7f5f71daa418bd027c689beda1d43c422a66b7eb2e5d6cea7d95976edd204c912358f5f00fb8fe8482a931529ea99dc13e
data/CHANGELOG.md CHANGED
@@ -11,6 +11,11 @@
11
11
  * require release block lines to be ordered in descending severity
12
12
  * disable strict semver version validation before 1.0.0
13
13
 
14
+ ## RELEASE 0.8.0
15
+
16
+ * FEATURE: `rake changelog:sync` will update your gem's VERSION constant to your changelog's latest release version. This will let devs stop requiring `structured_changelog` to be installed before they can bundle their projects.
17
+ * FEATURE: `rake changelog:release` will validate the Changelog, sync the Changelog release to `VERSION`, commit the version bump, then proceed with the default `rake release` task.
18
+
14
19
  ## RELEASE 0.7.2
15
20
 
16
21
  * FIX: fixed version comparison
data/README.md CHANGED
@@ -1,30 +1,39 @@
1
1
  # StructuredChangelog
2
2
 
3
- You have a changelog in your repo, right? Great! Then what do you need with a `VERSION` constant?
3
+ You have a changelog in your repo, right? Great! Then you'll never need to manually update your `VERSION` constant again!
4
4
 
5
- To parse your gem's current version from your changelog, put this in `lib/myproject/version.rb`:
5
+ Add this to your Rakefile:
6
6
 
7
7
  ```ruby
8
- require 'structured_changelog'
9
-
10
- MyProject::VERSION = StructuredChangeog.new("path/to/CHANGELOG.md").version
8
+ require 'structured_changelog/tasks'
11
9
  ```
12
10
 
13
- You can also add this to your Rakefile:
11
+ This will create a `rake changelog:release` task that:
14
12
 
15
- ```ruby
16
- require 'structured_changelog/tasks'
17
- ```
13
+ 1. validates your `CHANGELOG.md`
14
+ 2. sets your gem's `VERSION` constant to the latest release version specified by your `CHANGELOG.md`
15
+ 3. commits that version bump
16
+ 4. runs `rake release`
18
17
 
19
- You'll get these other wonderful rake tasks:
18
+ Turns out modifying `rake release` was _way_ more trouble than it was worth, so we had to make a separate task. Sorry folks.
19
+
20
+ You'll also get these wonderful rake tasks:
20
21
 
21
22
  ## Wonderful Rake Tasks
22
23
 
23
24
  To validate your changelog:
24
25
 
25
26
  $ rake changelog:validate
27
+
28
+ To update your gem's `VERSION` constant to the latest release in your Changelog:
29
+
30
+ $ rake changelog:sync
31
+
32
+ To commit your version bump--and only your version bump:
33
+
34
+ $ rake changelog:commit
26
35
 
27
- To determine what version you're on:
36
+ To determine the version of the latest release *according to the Changelog*:
28
37
 
29
38
  $ rake changelog:version
30
39
 
@@ -0,0 +1,29 @@
1
+ require 'structured_changelog'
2
+ require 'git'
3
+
4
+ desc 'Commit changes to the Changelog & version files as necessary'
5
+ task 'changelog:commit', [:repo_path, :changelog_path, :version_path] do |_task, arguments|
6
+ repo_path = arguments.to_h.fetch(:repo_path) { Pathname.pwd }
7
+ changelog_path = arguments.to_h.fetch(:changelog_path) { "CHANGELOG.md" }
8
+ version_path = arguments.to_h.fetch(:version_path) { "lib/#{Pathname.pwd.basename}/version.rb"}
9
+
10
+ changelog = StructuredChangelog.new(changelog_path)
11
+ repo = Git.open(repo_path)
12
+
13
+ if repo.status.deleted.any?
14
+ abort "Please commit all file deletions before bumping the version."
15
+ end
16
+
17
+ if repo.status.added.any?
18
+ abort "Please commit all new files before bumping the version."
19
+ end
20
+
21
+ if repo.status.changed.keys.sort != [changelog_path, version_path].sort
22
+ abort "Please commit all files that aren't #{changelog_path} or #{version_path} before bumping the version."
23
+ end
24
+
25
+ repo.add([changelog_path, version_path])
26
+ repo.commit("Version bump to #{changelog.version}")
27
+
28
+ puts "Commited 'Version bumped to #{changelog.version}'"
29
+ end
@@ -0,0 +1,15 @@
1
+ desc "Validates your Changelog, updates your VERSION constant, commits that, then releases your gem."
2
+ task 'changelog:release', [:repo_path, :changelog_path, :version_path] do |_task, arguments|
3
+ Rake::Task['changelog:validate'].execute(arguments)
4
+ Rake::Task['changelog:sync'].execute(arguments)
5
+ Rake::Task['changelog:commit'].execute(arguments)
6
+
7
+ # Merely requiring `bundler/gem_tasks` instantiates & caches a gemspec. At this point in this code,
8
+ # it's already set and attached to the `Bundler::GemHelper` module. In fact, it's there before this
9
+ # file is laoded at all. This means that our changes to the filesystem won't change the version bundler
10
+ # thinks our gem is. We could instantiate another gemspec and attach it, or we could try modifying the
11
+ # gemspec in situ, but both would be extremely brittle. What we do instead, is start another process,
12
+ # and because that process doesn't have the state ours does already, our changes to the filesystem will
13
+ # be picked up, and we'll actually cut a release of the new version.
14
+ exec('rake release')
15
+ end
@@ -0,0 +1,15 @@
1
+ require 'structured_changelog'
2
+ require 'structured_changelog/version_pattern'
3
+
4
+ desc "Set the gem's VERSION constant to be the changelog's version"
5
+ task 'changelog:sync', [:changelog_path, :version_path] do |_task, arguments|
6
+ changelog_path = arguments.to_h.fetch(:changelog_path) { "CHANGELOG.md" }
7
+ version_path = arguments.to_h.fetch(:version_path) { "lib/#{Pathname.pwd.basename}/version.rb"}
8
+
9
+ changelog = StructuredChangelog.new(changelog_path)
10
+ version_file = Pathname.new(version_path)
11
+
12
+ version_file.write(version_file.read.gsub(StructuredChangelog::VersionPattern, changelog.version.to_s))
13
+
14
+ puts "Updated gem version to #{changelog.version}"
15
+ end
@@ -1,3 +1,3 @@
1
- require 'structured_changelog'
2
-
3
- StructuredChangelog::VERSION = StructuredChangelog.new("CHANGELOG.md").version
1
+ class StructuredChangelog
2
+ VERSION = "0.8.0"
3
+ end
@@ -1,3 +1,3 @@
1
1
  class StructuredChangelog
2
- VersionPattern = /(?<version>\d+\.\d+\.\d+\S*)/
2
+ VersionPattern = /(?<version>\d+\.\d+\.\d+[^\s\"\']*)/
3
3
  end
@@ -26,4 +26,6 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency "pry-byebug"
27
27
  spec.add_development_dependency "simplecov"
28
28
  spec.add_development_dependency "fantaskspec"
29
+
30
+ spec.add_dependency 'git'
29
31
  end
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.7.2
4
+ version: 0.8.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: 2017-02-16 00:00:00.000000000 Z
11
+ date: 2017-02-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: git
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
97
111
  description: Version your gem through your changelog, not a VERSION constant.
98
112
  email:
99
113
  - yarmiganosca@gmail.com
@@ -123,8 +137,11 @@ files:
123
137
  - lib/structured_changelog/release_filters/matches_versions_less_than_or_equal_to.rb
124
138
  - lib/structured_changelog/roadmap.rb
125
139
  - lib/structured_changelog/tasks.rb
140
+ - lib/structured_changelog/tasks/commit.rb
126
141
  - lib/structured_changelog/tasks/notes.rb
127
142
  - lib/structured_changelog/tasks/recent.rb
143
+ - lib/structured_changelog/tasks/release.rb
144
+ - lib/structured_changelog/tasks/sync.rb
128
145
  - lib/structured_changelog/tasks/validate.rb
129
146
  - lib/structured_changelog/tasks/version.rb
130
147
  - lib/structured_changelog/version.rb