Compare commits

..

94 Commits
1.5.0 ... 1.8.0

Author SHA1 Message Date
Petr Korolev
8b49b5ac0c Merge branch 'release/1.8.0' 2015-08-24 17:55:25 +03:00
Petr Korolev
d7b5d77bbf Update gemspec to version 1.8.0 2015-08-24 17:55:23 +03:00
Petr Korolev
ddf2624bf9 Merge branch 'develop' 2015-08-24 17:53:06 +03:00
Petr Korolev
80b40d1b36 Merge branch 'feature/due-tag' into develop 2015-08-24 17:52:09 +03:00
Petr Korolev
e8e4628261 Merge branch 'master' into develop 2015-08-24 17:51:14 +03:00
Petr Korolev
4261c3494e Add due-tag option and tests 2015-08-24 17:29:07 +03:00
Petr Korolev
d138644925 add docs 2015-08-24 16:47:37 +03:00
Petr Korolev
0301dcb672 Merge pull request #264 from raphink/dev/release_url
Add release_url to rake task options
2015-08-24 16:01:42 +03:00
Raphaël Pinson
73d4415e14 Add release_url to rake task options 2015-08-24 14:55:57 +02:00
Petr Korolev
ed179ed7be Merge branch 'master' into develop 2015-08-24 14:54:53 +03:00
Petr Korolev
0930cfdd88 Update README.md 2015-08-24 14:54:41 +03:00
Petr Korolev
c140349a73 git push origin masterMerge branch 'raphink-dev/no_replace' 2015-08-24 14:43:39 +03:00
Petr Korolev
8c35215697 Merge branch 'dev/no_replace' of https://github.com/raphink/github-changelog-generator into raphink-dev/no_replace 2015-08-24 14:43:05 +03:00
Petr Korolev
840b6666e0 Merge pull request #263 from skywinder/revert-261-patch-1
Revert "Fixed Readme, I think"
2015-08-24 14:38:34 +03:00
Petr Korolev
7b7c6fc793 Revert "Fixed Readme, I think" 2015-08-24 14:28:22 +03:00
Petr Korolev
2357875c13 Merge pull request #261 from dpwspoon/patch-1
Fixed Readme, I think
2015-08-24 14:05:22 +03:00
David Witherspoon
cac840c57d Fixed Readme, I think
I don't know where a 16 digit token comes from.  But the 40 digit token works.  So I think this is a typo.
2015-08-21 09:31:01 -07:00
Raphaël Pinson
9acca33bc2 Test if @options[:base] is set 2015-08-12 16:35:47 +02:00
Petr Korolev
4aa9c61520 Merge pull request #259 from raphink/dev/release_url
Add release_url option
2015-08-09 17:08:52 +03:00
Petr Korolev
f49949147c Merge pull request #260 from raphink/dev/rake_task
Add a rake task
2015-08-09 17:06:32 +03:00
Raphaël Pinson
bfae7b9a45 Auto detect since tag from base file 2015-08-05 10:57:08 +02:00
Raphaël Pinson
4202b95076 Add --base option 2015-08-05 10:40:28 +02:00
Raphaël Pinson
4856a3c8e9 Add release_url option 2015-08-05 10:31:16 +02:00
Raphaël Pinson
5d9b44eac3 Add a rake task 2015-08-05 10:26:29 +02:00
Petr Korolev
295cfbc767 Merge pull request #257 from raphink/dev/since_tag
Add --since-tag, close
2015-08-04 18:42:03 +03:00
Raphaël Pinson
32f4df5742 Add --since-tag option
Fix #254
2015-08-04 16:15:33 +02:00
Raphaël Pinson
0190d417c2 Typo 2015-08-04 14:56:39 +02:00
Petr Korolev
b6efcfced8 Merge branch 'hotfix/update-changelog' into develop 2015-07-16 17:26:54 +03:00
Petr Korolev
b74b457ad0 Merge branch 'hotfix/update-changelog' 2015-07-16 17:26:52 +03:00
Petr Korolev
83cc36959a update 2015-07-16 17:25:32 +03:00
Petr Korolev
2dbf975c06 Update changelog for version 1.7.0 2015-07-16 17:23:52 +03:00
Petr Korolev
63e91d8e72 Merge branch 'release/1.7.0' into develop 2015-07-16 17:22:58 +03:00
Petr Korolev
d081130e3e Merge branch 'release/1.7.0' 2015-07-16 17:22:58 +03:00
Petr Korolev
016f5e690c Update gemspec to version 1.7.0 2015-07-16 17:22:56 +03:00
Petr Korolev
925012049f bundle update 2015-07-16 17:18:36 +03:00
Petr Korolev
b9593f7c70 update versions 2015-07-16 17:18:03 +03:00
Petr Korolev
e6d80b0cf0 update gemfile 2015-07-16 17:04:50 +03:00
Petr Korolev
a4a6e6dedb bundler update 2015-07-16 16:37:50 +03:00
Petr Korolev
f215694ffb update chanhelog 2015-07-16 15:32:02 +03:00
Petr Korolev
68a045da22 fix: fix help message 2015-07-16 15:29:17 +03:00
Petr Korolev
e274f9992a fix #251 2015-07-16 14:47:01 +03:00
Petr Korolev
4de98a7d16 fix #242 2015-07-16 14:36:25 +03:00
Petr Korolev
d21651776c fix for #242 2015-07-16 14:32:11 +03:00
Petr Korolev
77d86b1e91 Merge branch 'hotfix/update-changelog' into develop 2015-07-16 12:30:15 +03:00
Petr Korolev
cb4533abf7 Merge branch 'hotfix/update-changelog' 2015-07-16 12:30:14 +03:00
Petr Korolev
df47a88b47 Update changelog for version 1.6.2 2015-07-16 12:30:13 +03:00
Petr Korolev
8c6b783d6c Merge branch 'release/1.6.2' into develop 2015-07-16 12:29:27 +03:00
Petr Korolev
9e84bfbabf Merge branch 'release/1.6.2' 2015-07-16 12:29:26 +03:00
Petr Korolev
57b33ae6b9 Update gemspec to version 1.6.2 2015-07-16 12:29:24 +03:00
Petr Korolev
36346b5fc6 Fix #250 2015-07-16 12:24:43 +03:00
Petr Korolev
f24780eb19 add direct link for token generation 2015-06-15 16:56:48 +03:00
Petr Korolev
f77f90a750 Merge branch 'hotfix/update-changelog' into develop 2015-06-12 11:42:58 +03:00
Petr Korolev
d33994d595 Merge branch 'hotfix/update-changelog' 2015-06-12 11:42:57 +03:00
Petr Korolev
b6f86a8cb6 Update changelog for version 1.6.1 2015-06-12 11:42:56 +03:00
Petr Korolev
5cd87a44a6 Merge branch 'release/1.6.1' into develop 2015-06-12 11:42:04 +03:00
Petr Korolev
243f0cf292 Merge branch 'release/1.6.1' 2015-06-12 11:42:04 +03:00
Petr Korolev
fee976df22 Update gemspec to version 1.6.1 2015-06-12 11:42:02 +03:00
Petr Korolev
e735683eaf Merge branch 'feature/fix-241' into develop 2015-06-12 11:37:43 +03:00
Petr Korolev
4f21ae7768 Add 3 new options. Fix #241. 2015-06-12 11:37:25 +03:00
Petr Korolev
c480075e8e Merge branch 'develop' into feature/fix-241 2015-06-12 11:09:49 +03:00
Petr Korolev
268a8f39b6 update readme move params explanation to Wiki page 2015-06-12 11:08:45 +03:00
Petr Korolev
1fa1cccd2a update change log 2015-06-12 10:04:14 +03:00
Petr Korolev
adab012de4 fix: fix crash when github api rate exceeded 2015-06-12 10:03:47 +03:00
Petr Korolev
e114901157 Merge branch 'master' into develop 2015-06-12 09:39:03 +03:00
Petr Korolev
6c6116381b add < to encaprulated characters. fix #249 2015-06-12 09:34:27 +03:00
Petr Korolev
f527cfff67 fix: multiple printing of "Fetching closed dates for issues: Done!"
string
2015-06-12 09:16:23 +03:00
Petr Korolev
92496f7c72 Merge branch 'hotfix/update-changelog' into develop 2015-06-11 16:49:29 +03:00
Petr Korolev
082210f49b Merge branch 'hotfix/update-changelog' 2015-06-11 16:49:26 +03:00
Petr Korolev
dc67089c21 Update changelog for version 1.6.0 2015-06-11 16:49:25 +03:00
Petr Korolev
865ddbcacd Merge branch 'release/1.6.0' into develop 2015-06-11 16:44:45 +03:00
Petr Korolev
9f2fb5f56c Merge branch 'release/1.6.0' 2015-06-11 16:44:45 +03:00
Petr Korolev
44ce94d7a8 Update gemspec to version 1.6.0 2015-06-11 16:44:43 +03:00
Petr Korolev
67ea3159cd add capital words for exclude labels 2015-06-11 16:44:33 +03:00
Petr Korolev
80a5fdef0c This fixes #54. And fix #240 also. 2015-06-11 16:44:33 +03:00
Petr Korolev
f7e9199841 Fix #246 2015-06-11 16:10:13 +03:00
Petr Korolev
19eb03c54e Add tests to verify sorting algorithm #244 2015-06-11 15:57:32 +03:00
Petr Korolev
22d1657fd4 Merge branch 'master' into develop 2015-06-11 13:09:59 +03:00
Petr Korolev
6fdcc0c61d fix #245 2015-06-11 13:09:26 +03:00
Petr Korolev
dac3be9f7d update test, between tags. 2015-06-11 13:09:26 +03:00
Petr Korolev
9f1537ab34 add test case 2015-06-11 13:09:04 +03:00
Petr Korolev
9055792021 Merge pull request #248 from dasilvacontin/master
fix guidlines typo in README.md
2015-06-11 12:18:36 +03:00
David da Silva Contin
9720c96b8c fix guidlines typo in README.md 2015-06-11 11:08:24 +02:00
Petr Korolev
8906fe5022 refactoring 2015-06-10 16:49:06 +03:00
Petr Korolev
a415010e86 change internal logic 2015-06-10 14:37:26 +03:00
Petr Korolev
67fbb04b31 add documentation 2015-06-10 14:19:53 +03:00
Petr Korolev
ff6115247e Move logging to separate class, disable logging during test execution. 2015-06-10 13:27:27 +03:00
Petr Korolev
a0cf2f54ee Merge branch 'master' into develop 2015-06-10 13:26:58 +03:00
Petr Korolev
0c8010d854 Merge branch 'hotfix/245' 2015-06-10 13:26:13 +03:00
Petr Korolev
9b46d56a9e fix #245 2015-06-10 13:23:46 +03:00
Petr Korolev
c3867a89f1 update test, between tags. 2015-06-10 10:24:39 +03:00
Petr Korolev
5cc3a7c8fd Merge branch 'hotfix/update-changelog' into develop 2015-05-26 16:08:00 +03:00
Petr Korolev
160cda50bc Merge branch 'hotfix/update-changelog' 2015-05-26 16:07:59 +03:00
Petr Korolev
8e090022f0 Update changelog for version 1.5.0 2015-05-26 16:07:57 +03:00
Petr Korolev
a94834d57e Merge branch 'release/1.5.0' into develop 2015-05-26 16:06:55 +03:00
22 changed files with 839 additions and 456 deletions

View File

@@ -1,13 +1,13 @@
# This configuration was generated by `rubocop --auto-gen-config` # This configuration was generated by `rubocop --auto-gen-config`
# on 2015-05-26 16:00:55 +0300 using RuboCop version 0.31.0. # on 2015-07-16 14:46:25 +0300 using RuboCop version 0.31.0.
# The point is for the user to remove these configuration records # The point is for the user to remove these configuration records
# one by one as the offenses are removed from the code base. # one by one as the offenses are removed from the code base.
# Note that changes in the inspected code, or installation of new # Note that changes in the inspected code, or installation of new
# versions of RuboCop, may require this file to be generated again. # versions of RuboCop, may require this file to be generated again.
# Offense count: 14 # Offense count: 13
Metrics/AbcSize: Metrics/AbcSize:
Max: 59 Enabled: false
# Offense count: 1 # Offense count: 1
Metrics/CyclomaticComplexity: Metrics/CyclomaticComplexity:
@@ -21,7 +21,7 @@ Metrics/PerceivedComplexity:
Style/AccessorMethodName: Style/AccessorMethodName:
Enabled: false Enabled: false
# Offense count: 8 # Offense count: 10
Style/Documentation: Style/Documentation:
Enabled: false Enabled: false

View File

@@ -1,7 +1,59 @@
# Change Log # Change Log
## [1.4.1](https://github.com/skywinder/github-changelog-generator/tree/1.4.1) (2015-05-19) ## [1.7.0](https://github.com/skywinder/github-changelog-generator/tree/1.7.0) (2015-07-16)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.6.2...1.7.0)
**Implemented enhancements:**
- Custom header [\#251](https://github.com/skywinder/github-changelog-generator/issues/251)
- Arbitrary templates [\#242](https://github.com/skywinder/github-changelog-generator/issues/242)
## [1.6.2](https://github.com/skywinder/github-changelog-generator/tree/1.6.2) (2015-07-16)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.6.1...1.6.2)
**Fixed bugs:**
- --unreleased-only broken [\#250](https://github.com/skywinder/github-changelog-generator/issues/250)
## [1.6.1](https://github.com/skywinder/github-changelog-generator/tree/1.6.1) (2015-06-12)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.6.0...1.6.1)
**Implemented enhancements:**
- Ability to specify custom section header [\#241](https://github.com/skywinder/github-changelog-generator/issues/241)
**Fixed bugs:**
- not encapsulated character `\<` [\#249](https://github.com/skywinder/github-changelog-generator/issues/249)
## [1.6.0](https://github.com/skywinder/github-changelog-generator/tree/1.6.0) (2015-06-11)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.5.0...1.6.0)
**Implemented enhancements:**
- Issues with any label except "bug", "enhancement" should not be excluded by default. [\#240](https://github.com/skywinder/github-changelog-generator/issues/240)
- Add ability to specify custom labels for enhancements & bugfixes [\#54](https://github.com/skywinder/github-changelog-generator/issues/54)
**Fixed bugs:**
- --user and --project options are broken [\#246](https://github.com/skywinder/github-changelog-generator/issues/246)
- Exclude and Include tags is broken [\#245](https://github.com/skywinder/github-changelog-generator/issues/245)
## [1.5.0](https://github.com/skywinder/github-changelog-generator/tree/1.5.0) (2015-05-26)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.4.1...1.5.0)
**Implemented enhancements:**
- Show `Unreleased` section even when there is no tags in repo. [\#228](https://github.com/skywinder/github-changelog-generator/issues/228)
- Add option `--exclude-tags x,y,z` [\#214](https://github.com/skywinder/github-changelog-generator/issues/214)
- Generate change log between 2 specific tags [\#172](https://github.com/skywinder/github-changelog-generator/issues/172)
- Yanked releases support [\#53](https://github.com/skywinder/github-changelog-generator/issues/53)
**Merged pull requests:**
- Big refactoring [\#243](https://github.com/skywinder/github-changelog-generator/pull/243) ([skywinder](https://github.com/skywinder))
## [1.4.1](https://github.com/skywinder/github-changelog-generator/tree/1.4.1) (2015-05-19)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.4.0...1.4.1) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.4.0...1.4.1)
**Implemented enhancements:** **Implemented enhancements:**
@@ -11,27 +63,21 @@
**Fixed bugs:** **Fixed bugs:**
- github\_changelog\_generator.rb:220:in ``': No such file or directory - pwd \(Errno::ENOENT\) [\#237](https://github.com/skywinder/github-changelog-generator/issues/237) - github\_changelog\_generator.rb:220:in ``': No such file or directory - pwd \(Errno::ENOENT\) [\#237](https://github.com/skywinder/github-changelog-generator/issues/237)
- Doesnot generator changelog [\#235](https://github.com/skywinder/github-changelog-generator/issues/235) - Doesnot generator changelog [\#235](https://github.com/skywinder/github-changelog-generator/issues/235)
- Exclude closed \(not merged\) PR's from changelog. [\#69](https://github.com/skywinder/github-changelog-generator/issues/69) - Exclude closed \(not merged\) PR's from changelog. [\#69](https://github.com/skywinder/github-changelog-generator/issues/69)
**Merged pull requests:** **Merged pull requests:**
- Wrap GitHub requests in function check\_github\_response [\#238](https://github.com/skywinder/github-changelog-generator/pull/238) ([skywinder](https://github.com/skywinder)) - Wrap GitHub requests in function check\_github\_response [\#238](https://github.com/skywinder/github-changelog-generator/pull/238) ([skywinder](https://github.com/skywinder))
- Add fetch token tests [\#236](https://github.com/skywinder/github-changelog-generator/pull/236) ([skywinder](https://github.com/skywinder)) - Add fetch token tests [\#236](https://github.com/skywinder/github-changelog-generator/pull/236) ([skywinder](https://github.com/skywinder))
- Add future release option [\#231](https://github.com/skywinder/github-changelog-generator/pull/231) ([sildur](https://github.com/sildur)) - Add future release option [\#231](https://github.com/skywinder/github-changelog-generator/pull/231) ([sildur](https://github.com/sildur))
## [1.4.0](https://github.com/skywinder/github-changelog-generator/tree/1.4.0) (2015-05-07) ## [1.4.0](https://github.com/skywinder/github-changelog-generator/tree/1.4.0) (2015-05-07)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.3.11...1.4.0) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.3.11...1.4.0)
**Implemented enhancements:** **Implemented enhancements:**
- Parsing of existing Change Log file [\#212](https://github.com/skywinder/github-changelog-generator/issues/212) - Parsing of existing Change Log file [\#212](https://github.com/skywinder/github-changelog-generator/issues/212)
- Warn users about 0 tags in repo. [\#208](https://github.com/skywinder/github-changelog-generator/issues/208) - Warn users about 0 tags in repo. [\#208](https://github.com/skywinder/github-changelog-generator/issues/208)
**Closed issues:** **Closed issues:**
@@ -40,22 +86,15 @@
**Merged pull requests:** **Merged pull requests:**
- Cleanup [\#220](https://github.com/skywinder/github-changelog-generator/pull/220) ([tuexss](https://github.com/tuexss))
- Implement fetcher class [\#227](https://github.com/skywinder/github-changelog-generator/pull/227) ([skywinder](https://github.com/skywinder)) - Implement fetcher class [\#227](https://github.com/skywinder/github-changelog-generator/pull/227) ([skywinder](https://github.com/skywinder))
- Add coveralls integration [\#223](https://github.com/skywinder/github-changelog-generator/pull/223) ([skywinder](https://github.com/skywinder)) - Add coveralls integration [\#223](https://github.com/skywinder/github-changelog-generator/pull/223) ([skywinder](https://github.com/skywinder))
- Cleanup [\#220](https://github.com/skywinder/github-changelog-generator/pull/220) ([tuexss](https://github.com/tuexss))
- Rspec & rubocop integration [\#217](https://github.com/skywinder/github-changelog-generator/pull/217) ([skywinder](https://github.com/skywinder)) - Rspec & rubocop integration [\#217](https://github.com/skywinder/github-changelog-generator/pull/217) ([skywinder](https://github.com/skywinder))
- Implement Reader class to parse ChangeLog.md [\#216](https://github.com/skywinder/github-changelog-generator/pull/216) ([estahn](https://github.com/estahn)) - Implement Reader class to parse ChangeLog.md [\#216](https://github.com/skywinder/github-changelog-generator/pull/216) ([estahn](https://github.com/estahn))
- Relatively require github\_changelog\_generator library [\#207](https://github.com/skywinder/github-changelog-generator/pull/207) ([sneal](https://github.com/sneal)) - Relatively require github\_changelog\_generator library [\#207](https://github.com/skywinder/github-changelog-generator/pull/207) ([sneal](https://github.com/sneal))
- Add --max-issues argument to limit requests [\#76](https://github.com/skywinder/github-changelog-generator/pull/76) ([sneal](https://github.com/sneal)) - Add --max-issues argument to limit requests [\#76](https://github.com/skywinder/github-changelog-generator/pull/76) ([sneal](https://github.com/sneal))
## [1.3.11](https://github.com/skywinder/github-changelog-generator/tree/1.3.11) (2015-03-21) ## [1.3.11](https://github.com/skywinder/github-changelog-generator/tree/1.3.11) (2015-03-21)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.3.10...1.3.11) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.3.10...1.3.11)
**Merged pull requests:** **Merged pull requests:**
@@ -63,7 +102,6 @@
- Add fallback with warning message to prevent crash in case of exceed API Rate Limit \(temporary workaround for \#71\) [\#75](https://github.com/skywinder/github-changelog-generator/pull/75) ([skywinder](https://github.com/skywinder)) - Add fallback with warning message to prevent crash in case of exceed API Rate Limit \(temporary workaround for \#71\) [\#75](https://github.com/skywinder/github-changelog-generator/pull/75) ([skywinder](https://github.com/skywinder))
## [1.3.10](https://github.com/skywinder/github-changelog-generator/tree/1.3.10) (2015-03-18) ## [1.3.10](https://github.com/skywinder/github-changelog-generator/tree/1.3.10) (2015-03-18)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.3.9...1.3.10) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.3.9...1.3.10)
**Merged pull requests:** **Merged pull requests:**
@@ -71,7 +109,6 @@
- Fix termination in case of empty unreleased section with `--unreleased-only` option. [\#70](https://github.com/skywinder/github-changelog-generator/pull/70) ([skywinder](https://github.com/skywinder)) - Fix termination in case of empty unreleased section with `--unreleased-only` option. [\#70](https://github.com/skywinder/github-changelog-generator/pull/70) ([skywinder](https://github.com/skywinder))
## [1.3.9](https://github.com/skywinder/github-changelog-generator/tree/1.3.9) (2015-03-06) ## [1.3.9](https://github.com/skywinder/github-changelog-generator/tree/1.3.9) (2015-03-06)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.3.8...1.3.9) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.3.8...1.3.9)
**Implemented enhancements:** **Implemented enhancements:**
@@ -83,15 +120,12 @@
- Resolved concurrency problem in case of issues \> 2048 [\#65](https://github.com/skywinder/github-changelog-generator/pull/65) ([skywinder](https://github.com/skywinder)) - Resolved concurrency problem in case of issues \> 2048 [\#65](https://github.com/skywinder/github-changelog-generator/pull/65) ([skywinder](https://github.com/skywinder))
## [1.3.8](https://github.com/skywinder/github-changelog-generator/tree/1.3.8) (2015-03-05) ## [1.3.8](https://github.com/skywinder/github-changelog-generator/tree/1.3.8) (2015-03-05)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.3.6...1.3.8) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.3.6...1.3.8)
## [1.3.6](https://github.com/skywinder/github-changelog-generator/tree/1.3.6) (2015-03-05) ## [1.3.6](https://github.com/skywinder/github-changelog-generator/tree/1.3.6) (2015-03-05)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.3.5...1.3.6) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.3.5...1.3.6)
## [1.3.5](https://github.com/skywinder/github-changelog-generator/tree/1.3.5) (2015-03-04) ## [1.3.5](https://github.com/skywinder/github-changelog-generator/tree/1.3.5) (2015-03-04)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.3.4...1.3.5) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.3.4...1.3.5)
**Fixed bugs:** **Fixed bugs:**
@@ -99,7 +133,6 @@
- Pull Requests in Wrong Tag [\#60](https://github.com/skywinder/github-changelog-generator/issues/60) - Pull Requests in Wrong Tag [\#60](https://github.com/skywinder/github-changelog-generator/issues/60)
## [1.3.4](https://github.com/skywinder/github-changelog-generator/tree/1.3.4) (2015-03-03) ## [1.3.4](https://github.com/skywinder/github-changelog-generator/tree/1.3.4) (2015-03-03)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.3.3...1.3.4) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.3.3...1.3.4)
**Fixed bugs:** **Fixed bugs:**
@@ -107,7 +140,6 @@
- --no-issues appears to break PRs [\#59](https://github.com/skywinder/github-changelog-generator/issues/59) - --no-issues appears to break PRs [\#59](https://github.com/skywinder/github-changelog-generator/issues/59)
## [1.3.3](https://github.com/skywinder/github-changelog-generator/tree/1.3.3) (2015-03-03) ## [1.3.3](https://github.com/skywinder/github-changelog-generator/tree/1.3.3) (2015-03-03)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.3.2...1.3.3) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.3.2...1.3.3)
**Closed issues:** **Closed issues:**
@@ -115,7 +147,6 @@
- Add \# character to encapsulate list. [\#58](https://github.com/skywinder/github-changelog-generator/issues/58) - Add \# character to encapsulate list. [\#58](https://github.com/skywinder/github-changelog-generator/issues/58)
## [1.3.2](https://github.com/skywinder/github-changelog-generator/tree/1.3.2) (2015-03-03) ## [1.3.2](https://github.com/skywinder/github-changelog-generator/tree/1.3.2) (2015-03-03)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.3.1...1.3.2) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.3.1...1.3.2)
**Fixed bugs:** **Fixed bugs:**
@@ -123,21 +154,16 @@
- generation failed if github commit api return `404 Not Found` [\#57](https://github.com/skywinder/github-changelog-generator/issues/57) - generation failed if github commit api return `404 Not Found` [\#57](https://github.com/skywinder/github-changelog-generator/issues/57)
## [1.3.1](https://github.com/skywinder/github-changelog-generator/tree/1.3.1) (2015-02-27) ## [1.3.1](https://github.com/skywinder/github-changelog-generator/tree/1.3.1) (2015-02-27)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.3.0...1.3.1) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.3.0...1.3.1)
## [1.3.0](https://github.com/skywinder/github-changelog-generator/tree/1.3.0) (2015-02-26) ## [1.3.0](https://github.com/skywinder/github-changelog-generator/tree/1.3.0) (2015-02-26)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.2.8...1.3.0) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.2.8...1.3.0)
**Implemented enhancements:** **Implemented enhancements:**
- Do not show `Unreleased` section, when it's empty. [\#55](https://github.com/skywinder/github-changelog-generator/issues/55) - Do not show `Unreleased` section, when it's empty. [\#55](https://github.com/skywinder/github-changelog-generator/issues/55)
- Separate list exclude and include labels [\#52](https://github.com/skywinder/github-changelog-generator/issues/52) - Separate list exclude and include labels [\#52](https://github.com/skywinder/github-changelog-generator/issues/52)
- Unreleased issues in separate section [\#47](https://github.com/skywinder/github-changelog-generator/issues/47) - Unreleased issues in separate section [\#47](https://github.com/skywinder/github-changelog-generator/issues/47)
- Separate by lists: Enhancements, Bugs, Pull requests. [\#31](https://github.com/skywinder/github-changelog-generator/issues/31) - Separate by lists: Enhancements, Bugs, Pull requests. [\#31](https://github.com/skywinder/github-changelog-generator/issues/31)
**Fixed bugs:** **Fixed bugs:**
@@ -149,7 +175,6 @@
- Implement filtering of Pull Requests by milestones [\#50](https://github.com/skywinder/github-changelog-generator/pull/50) ([skywinder](https://github.com/skywinder)) - Implement filtering of Pull Requests by milestones [\#50](https://github.com/skywinder/github-changelog-generator/pull/50) ([skywinder](https://github.com/skywinder))
## [1.2.8](https://github.com/skywinder/github-changelog-generator/tree/1.2.8) (2015-02-17) ## [1.2.8](https://github.com/skywinder/github-changelog-generator/tree/1.2.8) (2015-02-17)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.2.7...1.2.8) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.2.7...1.2.8)
**Closed issues:** **Closed issues:**
@@ -159,11 +184,9 @@
**Merged pull requests:** **Merged pull requests:**
- Feature/fix 37 [\#49](https://github.com/skywinder/github-changelog-generator/pull/49) ([skywinder](https://github.com/skywinder)) - Feature/fix 37 [\#49](https://github.com/skywinder/github-changelog-generator/pull/49) ([skywinder](https://github.com/skywinder))
- Prettify output [\#48](https://github.com/skywinder/github-changelog-generator/pull/48) ([skywinder](https://github.com/skywinder)) - Prettify output [\#48](https://github.com/skywinder/github-changelog-generator/pull/48) ([skywinder](https://github.com/skywinder))
## [1.2.7](https://github.com/skywinder/github-changelog-generator/tree/1.2.7) (2015-01-26) ## [1.2.7](https://github.com/skywinder/github-changelog-generator/tree/1.2.7) (2015-01-26)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.2.6...1.2.7) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.2.6...1.2.7)
**Merged pull requests:** **Merged pull requests:**
@@ -171,7 +194,6 @@
- Add compare link between older version and newer version [\#46](https://github.com/skywinder/github-changelog-generator/pull/46) ([sue445](https://github.com/sue445)) - Add compare link between older version and newer version [\#46](https://github.com/skywinder/github-changelog-generator/pull/46) ([sue445](https://github.com/sue445))
## [1.2.6](https://github.com/skywinder/github-changelog-generator/tree/1.2.6) (2015-01-21) ## [1.2.6](https://github.com/skywinder/github-changelog-generator/tree/1.2.6) (2015-01-21)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.2.5...1.2.6) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.2.5...1.2.6)
**Merged pull requests:** **Merged pull requests:**
@@ -179,7 +201,6 @@
- fix link tag format [\#45](https://github.com/skywinder/github-changelog-generator/pull/45) ([sugamasao](https://github.com/sugamasao)) - fix link tag format [\#45](https://github.com/skywinder/github-changelog-generator/pull/45) ([sugamasao](https://github.com/sugamasao))
## [1.2.5](https://github.com/skywinder/github-changelog-generator/tree/1.2.5) (2015-01-15) ## [1.2.5](https://github.com/skywinder/github-changelog-generator/tree/1.2.5) (2015-01-15)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.2.4...1.2.5) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.2.4...1.2.5)
**Implemented enhancements:** **Implemented enhancements:**
@@ -193,27 +214,22 @@
**Merged pull requests:** **Merged pull requests:**
- PrettyPrint class is included using lowercase 'pp' [\#43](https://github.com/skywinder/github-changelog-generator/pull/43) ([schwing](https://github.com/schwing)) - PrettyPrint class is included using lowercase 'pp' [\#43](https://github.com/skywinder/github-changelog-generator/pull/43) ([schwing](https://github.com/schwing))
- support enterprise github via command line options [\#42](https://github.com/skywinder/github-changelog-generator/pull/42) ([glenlovett](https://github.com/glenlovett)) - support enterprise github via command line options [\#42](https://github.com/skywinder/github-changelog-generator/pull/42) ([glenlovett](https://github.com/glenlovett))
## [1.2.4](https://github.com/skywinder/github-changelog-generator/tree/1.2.4) (2014-12-16) ## [1.2.4](https://github.com/skywinder/github-changelog-generator/tree/1.2.4) (2014-12-16)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.2.3...1.2.4) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.2.3...1.2.4)
**Fixed bugs:** **Fixed bugs:**
- Sometimes user is NULL during merges [\#41](https://github.com/skywinder/github-changelog-generator/issues/41) - Sometimes user is NULL during merges [\#41](https://github.com/skywinder/github-changelog-generator/issues/41)
- Crash when try generate log for rails [\#35](https://github.com/skywinder/github-changelog-generator/issues/35) - Crash when try generate log for rails [\#35](https://github.com/skywinder/github-changelog-generator/issues/35)
## [1.2.3](https://github.com/skywinder/github-changelog-generator/tree/1.2.3) (2014-12-16) ## [1.2.3](https://github.com/skywinder/github-changelog-generator/tree/1.2.3) (2014-12-16)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.2.2...1.2.3) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.2.2...1.2.3)
**Implemented enhancements:** **Implemented enhancements:**
- Add ability to run with one parameter instead -u -p [\#38](https://github.com/skywinder/github-changelog-generator/issues/38) - Add ability to run with one parameter instead -u -p [\#38](https://github.com/skywinder/github-changelog-generator/issues/38)
- Detailed output [\#33](https://github.com/skywinder/github-changelog-generator/issues/33) - Detailed output [\#33](https://github.com/skywinder/github-changelog-generator/issues/33)
**Fixed bugs:** **Fixed bugs:**
@@ -223,11 +239,9 @@
**Merged pull requests:** **Merged pull requests:**
- Implement async fetching [\#39](https://github.com/skywinder/github-changelog-generator/pull/39) ([skywinder](https://github.com/skywinder)) - Implement async fetching [\#39](https://github.com/skywinder/github-changelog-generator/pull/39) ([skywinder](https://github.com/skywinder))
- Fix crash when user is NULL [\#40](https://github.com/skywinder/github-changelog-generator/pull/40) ([skywinder](https://github.com/skywinder)) - Fix crash when user is NULL [\#40](https://github.com/skywinder/github-changelog-generator/pull/40) ([skywinder](https://github.com/skywinder))
## [1.2.2](https://github.com/skywinder/github-changelog-generator/tree/1.2.2) (2014-12-10) ## [1.2.2](https://github.com/skywinder/github-changelog-generator/tree/1.2.2) (2014-12-10)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.2.1...1.2.2) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.2.1...1.2.2)
**Fixed bugs:** **Fixed bugs:**
@@ -239,7 +253,6 @@
- Add a Bitdeli Badge to README [\#36](https://github.com/skywinder/github-changelog-generator/pull/36) ([bitdeli-chef](https://github.com/bitdeli-chef)) - Add a Bitdeli Badge to README [\#36](https://github.com/skywinder/github-changelog-generator/pull/36) ([bitdeli-chef](https://github.com/bitdeli-chef))
## [1.2.1](https://github.com/skywinder/github-changelog-generator/tree/1.2.1) (2014-11-22) ## [1.2.1](https://github.com/skywinder/github-changelog-generator/tree/1.2.1) (2014-11-22)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.2.0...1.2.1) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.2.0...1.2.1)
**Fixed bugs:** **Fixed bugs:**
@@ -249,23 +262,18 @@
**Merged pull requests:** **Merged pull requests:**
- Issues for last tag not in list [\#29](https://github.com/skywinder/github-changelog-generator/pull/29) ([skywinder](https://github.com/skywinder)) - Issues for last tag not in list [\#29](https://github.com/skywinder/github-changelog-generator/pull/29) ([skywinder](https://github.com/skywinder))
- Disable default --filter-pull-requests option. [\#28](https://github.com/skywinder/github-changelog-generator/pull/28) ([skywinder](https://github.com/skywinder)) - Disable default --filter-pull-requests option. [\#28](https://github.com/skywinder/github-changelog-generator/pull/28) ([skywinder](https://github.com/skywinder))
## [1.2.0](https://github.com/skywinder/github-changelog-generator/tree/1.2.0) (2014-11-19) ## [1.2.0](https://github.com/skywinder/github-changelog-generator/tree/1.2.0) (2014-11-19)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.1.4...1.2.0) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.1.4...1.2.0)
**Merged pull requests:** **Merged pull requests:**
- Add filter for pull-requests labels. \(option --filter-pull-requests\) [\#27](https://github.com/skywinder/github-changelog-generator/pull/27) ([skywinder](https://github.com/skywinder)) - Add filter for pull-requests labels. \(option --filter-pull-requests\) [\#27](https://github.com/skywinder/github-changelog-generator/pull/27) ([skywinder](https://github.com/skywinder))
- Add ability to insert authors of pull-requests \(--\[no-\]author option\) [\#25](https://github.com/skywinder/github-changelog-generator/pull/25) ([skywinder](https://github.com/skywinder)) - Add ability to insert authors of pull-requests \(--\[no-\]author option\) [\#25](https://github.com/skywinder/github-changelog-generator/pull/25) ([skywinder](https://github.com/skywinder))
- Don't receive issues in case of --no-isses flag specied [\#24](https://github.com/skywinder/github-changelog-generator/pull/24) ([skywinder](https://github.com/skywinder)) - Don't receive issues in case of --no-isses flag specied [\#24](https://github.com/skywinder/github-changelog-generator/pull/24) ([skywinder](https://github.com/skywinder))
## [1.1.4](https://github.com/skywinder/github-changelog-generator/tree/1.1.4) (2014-11-18) ## [1.1.4](https://github.com/skywinder/github-changelog-generator/tree/1.1.4) (2014-11-18)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.1.2...1.1.4) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.1.2...1.1.4)
**Implemented enhancements:** **Implemented enhancements:**
@@ -277,29 +285,23 @@
- Sort tags by date [\#23](https://github.com/skywinder/github-changelog-generator/pull/23) ([skywinder](https://github.com/skywinder)) - Sort tags by date [\#23](https://github.com/skywinder/github-changelog-generator/pull/23) ([skywinder](https://github.com/skywinder))
## [1.1.2](https://github.com/skywinder/github-changelog-generator/tree/1.1.2) (2014-11-12) ## [1.1.2](https://github.com/skywinder/github-changelog-generator/tree/1.1.2) (2014-11-12)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.1.1...1.1.2) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.1.1...1.1.2)
**Merged pull requests:** **Merged pull requests:**
- Fix bug with dot signs in project name [\#18](https://github.com/skywinder/github-changelog-generator/pull/18) ([skywinder](https://github.com/skywinder)) - Fix bug with dot signs in project name [\#18](https://github.com/skywinder/github-changelog-generator/pull/18) ([skywinder](https://github.com/skywinder))
- Fix bug with dot signs in user name [\#17](https://github.com/skywinder/github-changelog-generator/pull/17) ([skywinder](https://github.com/skywinder)) - Fix bug with dot signs in user name [\#17](https://github.com/skywinder/github-changelog-generator/pull/17) ([skywinder](https://github.com/skywinder))
## [1.1.1](https://github.com/skywinder/github-changelog-generator/tree/1.1.1) (2014-11-10) ## [1.1.1](https://github.com/skywinder/github-changelog-generator/tree/1.1.1) (2014-11-10)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.1.0...1.1.1) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.1.0...1.1.1)
**Merged pull requests:** **Merged pull requests:**
- Remove duplicates of issues and pull-requests with same number [\#15](https://github.com/skywinder/github-changelog-generator/pull/15) ([skywinder](https://github.com/skywinder)) - Remove duplicates of issues and pull-requests with same number [\#15](https://github.com/skywinder/github-changelog-generator/pull/15) ([skywinder](https://github.com/skywinder))
- Sort issues by tags [\#14](https://github.com/skywinder/github-changelog-generator/pull/14) ([skywinder](https://github.com/skywinder)) - Sort issues by tags [\#14](https://github.com/skywinder/github-changelog-generator/pull/14) ([skywinder](https://github.com/skywinder))
- Add ability to add or exclude issues without any labels [\#13](https://github.com/skywinder/github-changelog-generator/pull/13) ([skywinder](https://github.com/skywinder)) - Add ability to add or exclude issues without any labels [\#13](https://github.com/skywinder/github-changelog-generator/pull/13) ([skywinder](https://github.com/skywinder))
## [1.1.0](https://github.com/skywinder/github-changelog-generator/tree/1.1.0) (2014-11-10) ## [1.1.0](https://github.com/skywinder/github-changelog-generator/tree/1.1.0) (2014-11-10)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.0.1...1.1.0) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.0.1...1.1.0)
**Implemented enhancements:** **Implemented enhancements:**
@@ -309,21 +311,17 @@
**Fixed bugs:** **Fixed bugs:**
- Bug with wrong credentials in 1.0.1 [\#12](https://github.com/skywinder/github-changelog-generator/issues/12) - Bug with wrong credentials in 1.0.1 [\#12](https://github.com/skywinder/github-changelog-generator/issues/12)
- Markdown formating in the last line wrong [\#9](https://github.com/skywinder/github-changelog-generator/issues/9) - Markdown formating in the last line wrong [\#9](https://github.com/skywinder/github-changelog-generator/issues/9)
## [1.0.1](https://github.com/skywinder/github-changelog-generator/tree/1.0.1) (2014-11-10) ## [1.0.1](https://github.com/skywinder/github-changelog-generator/tree/1.0.1) (2014-11-10)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.0.0...1.0.1) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.0.0...1.0.1)
## [1.0.0](https://github.com/skywinder/github-changelog-generator/tree/1.0.0) (2014-11-07) ## [1.0.0](https://github.com/skywinder/github-changelog-generator/tree/1.0.0) (2014-11-07)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/0.1.0...1.0.0) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/0.1.0...1.0.0)
**Implemented enhancements:** **Implemented enhancements:**
- Add support for fixed issues and implemented enchanments. [\#6](https://github.com/skywinder/github-changelog-generator/issues/6) - Add support for fixed issues and implemented enchanments. [\#6](https://github.com/skywinder/github-changelog-generator/issues/6)
- Implement option to specify output filename [\#4](https://github.com/skywinder/github-changelog-generator/issues/4) - Implement option to specify output filename [\#4](https://github.com/skywinder/github-changelog-generator/issues/4)
**Fixed bugs:** **Fixed bugs:**
@@ -333,27 +331,21 @@
**Merged pull requests:** **Merged pull requests:**
- Implement support of different tags. [\#8](https://github.com/skywinder/github-changelog-generator/pull/8) ([skywinder](https://github.com/skywinder)) - Implement support of different tags. [\#8](https://github.com/skywinder/github-changelog-generator/pull/8) ([skywinder](https://github.com/skywinder))
- Add support for issues in CHANGELOG [\#7](https://github.com/skywinder/github-changelog-generator/pull/7) ([skywinder](https://github.com/skywinder)) - Add support for issues in CHANGELOG [\#7](https://github.com/skywinder/github-changelog-generator/pull/7) ([skywinder](https://github.com/skywinder))
## [0.1.0](https://github.com/skywinder/github-changelog-generator/tree/0.1.0) (2014-11-07) ## [0.1.0](https://github.com/skywinder/github-changelog-generator/tree/0.1.0) (2014-11-07)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/0.0.2...0.1.0) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/0.0.2...0.1.0)
**Merged pull requests:** **Merged pull requests:**
- Fix parsing date of pull request [\#3](https://github.com/skywinder/github-changelog-generator/pull/3) ([skywinder](https://github.com/skywinder)) - Fix parsing date of pull request [\#3](https://github.com/skywinder/github-changelog-generator/pull/3) ([skywinder](https://github.com/skywinder))
- Add changelog generation for last tag [\#2](https://github.com/skywinder/github-changelog-generator/pull/2) ([skywinder](https://github.com/skywinder)) - Add changelog generation for last tag [\#2](https://github.com/skywinder/github-changelog-generator/pull/2) ([skywinder](https://github.com/skywinder))
- Add option \(-o --output\) to specify name of the output file. [\#1](https://github.com/skywinder/github-changelog-generator/pull/1) ([skywinder](https://github.com/skywinder)) - Add option \(-o --output\) to specify name of the output file. [\#1](https://github.com/skywinder/github-changelog-generator/pull/1) ([skywinder](https://github.com/skywinder))
## [0.0.2](https://github.com/skywinder/github-changelog-generator/tree/0.0.2) (2014-11-06) ## [0.0.2](https://github.com/skywinder/github-changelog-generator/tree/0.0.2) (2014-11-06)
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/0.0.1...0.0.2) [Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/0.0.1...0.0.2)
## [0.0.1](https://github.com/skywinder/github-changelog-generator/tree/0.0.1) (2014-11-06) ## [0.0.1](https://github.com/skywinder/github-changelog-generator/tree/0.0.1) (2014-11-06)
\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* \* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*

15
Gemfile
View File

@@ -1,14 +1,11 @@
source "https://rubygems.org" source "https://rubygems.org"
gem "rake", ">=10.4.2" gemspec
gem "github_api", ">=0.12.3"
gem "colorize", ">=0.7.7"
group :test do group :test do
gem "rspec" gem "rspec", "~>3.2"
gem "rubocop" gem "rubocop", "~>0.31"
gem "coveralls", require: false gem "coveralls", "~>0.8", require: false
gem "simplecov", require: false gem "simplecov", "~>0.10", require: false
gem "codeclimate-test-reporter" gem "codeclimate-test-reporter", "~>0.4"
end end

View File

@@ -1,14 +1,21 @@
PATH
remote: .
specs:
github_changelog_generator (1.7.0)
colorize (~> 0.7)
github_api (~> 0.12)
GEM GEM
remote: https://rubygems.org/ remote: https://rubygems.org/
specs: specs:
addressable (2.3.8) addressable (2.3.8)
ast (2.0.0) ast (2.0.0)
astrolabe (1.3.0) astrolabe (1.3.1)
parser (>= 2.2.0.pre.3, < 3.0) parser (~> 2.2)
codeclimate-test-reporter (0.4.7) codeclimate-test-reporter (0.4.7)
simplecov (>= 0.7.1, < 1.0.0) simplecov (>= 0.7.1, < 1.0.0)
colorize (0.7.7) colorize (0.7.7)
coveralls (0.8.1) coveralls (0.8.2)
json (~> 1.8) json (~> 1.8)
rest-client (>= 1.6.8, < 2) rest-client (>= 1.6.8, < 2)
simplecov (~> 0.10.0) simplecov (~> 0.10.0)
@@ -30,14 +37,14 @@ GEM
multi_json (>= 1.7.5, < 2.0) multi_json (>= 1.7.5, < 2.0)
nokogiri (~> 1.6.3) nokogiri (~> 1.6.3)
oauth2 oauth2
hashie (3.4.1) hashie (3.4.2)
http-cookie (1.0.2) http-cookie (1.0.2)
domain_name (~> 0.5) domain_name (~> 0.5)
json (1.8.2) json (1.8.3)
jwt (1.5.0) jwt (1.5.1)
mime-types (2.5) mime-types (2.6.1)
mini_portile (0.6.2) mini_portile (0.6.2)
multi_json (1.11.0) multi_json (1.11.2)
multi_xml (0.5.5) multi_xml (0.5.5)
multipart-post (2.0.0) multipart-post (2.0.0)
netrc (0.10.3) netrc (0.10.3)
@@ -49,32 +56,32 @@ GEM
multi_json (~> 1.3) multi_json (~> 1.3)
multi_xml (~> 0.5) multi_xml (~> 0.5)
rack (~> 1.2) rack (~> 1.2)
parser (2.2.2.2) parser (2.2.2.6)
ast (>= 1.1, < 3.0) ast (>= 1.1, < 3.0)
powerpack (0.1.1) powerpack (0.1.1)
rack (1.6.1) rack (1.6.4)
rainbow (2.0.0) rainbow (2.0.0)
rake (10.4.2) rake (10.4.2)
rest-client (1.8.0) rest-client (1.8.0)
http-cookie (>= 1.0.2, < 2.0) http-cookie (>= 1.0.2, < 2.0)
mime-types (>= 1.16, < 3.0) mime-types (>= 1.16, < 3.0)
netrc (~> 0.7) netrc (~> 0.7)
rspec (3.2.0) rspec (3.3.0)
rspec-core (~> 3.2.0) rspec-core (~> 3.3.0)
rspec-expectations (~> 3.2.0) rspec-expectations (~> 3.3.0)
rspec-mocks (~> 3.2.0) rspec-mocks (~> 3.3.0)
rspec-core (3.2.3) rspec-core (3.3.2)
rspec-support (~> 3.2.0) rspec-support (~> 3.3.0)
rspec-expectations (3.2.1) rspec-expectations (3.3.1)
diff-lcs (>= 1.2.0, < 2.0) diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.2.0) rspec-support (~> 3.3.0)
rspec-mocks (3.2.1) rspec-mocks (3.3.2)
diff-lcs (>= 1.2.0, < 2.0) diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.2.0) rspec-support (~> 3.3.0)
rspec-support (3.2.2) rspec-support (3.3.0)
rubocop (0.31.0) rubocop (0.32.1)
astrolabe (~> 1.3) astrolabe (~> 1.3)
parser (>= 2.2.2.1, < 3.0) parser (>= 2.2.2.5, < 3.0)
powerpack (~> 0.1) powerpack (~> 0.1)
rainbow (>= 1.99.1, < 3.0) rainbow (>= 1.99.1, < 3.0)
ruby-progressbar (~> 1.4) ruby-progressbar (~> 1.4)
@@ -84,11 +91,11 @@ GEM
json (~> 1.8) json (~> 1.8)
simplecov-html (~> 0.10.0) simplecov-html (~> 0.10.0)
simplecov-html (0.10.0) simplecov-html (0.10.0)
term-ansicolor (1.3.0) term-ansicolor (1.3.2)
tins (~> 1.0) tins (~> 1.0)
thor (0.19.1) thor (0.19.1)
thread_safe (0.3.5) thread_safe (0.3.5)
tins (1.5.1) tins (1.5.4)
unf (0.1.4) unf (0.1.4)
unf_ext unf_ext
unf_ext (0.0.7.1) unf_ext (0.0.7.1)
@@ -97,11 +104,11 @@ PLATFORMS
ruby ruby
DEPENDENCIES DEPENDENCIES
codeclimate-test-reporter bundler (~> 1.7)
colorize (>= 0.7.7) codeclimate-test-reporter (~> 0.4)
coveralls coveralls (~> 0.8)
github_api (>= 0.12.3) github_changelog_generator!
rake (>= 10.4.2) rake (~> 10.0)
rspec rspec (~> 3.2)
rubocop rubocop (~> 0.31)
simplecov simplecov (~> 0.10)

437
README.md
View File

@@ -1,223 +1,216 @@
[![Gem Version](https://badge.fury.io/rb/github_changelog_generator.svg)](http://badge.fury.io/rb/github_changelog_generator) [![Gem Version](https://badge.fury.io/rb/github_changelog_generator.svg)](http://badge.fury.io/rb/github_changelog_generator)
[![Dependency Status](https://gemnasium.com/skywinder/github-changelog-generator.svg)](https://gemnasium.com/skywinder/github-changelog-generator) [![Dependency Status](https://gemnasium.com/skywinder/github-changelog-generator.svg)](https://gemnasium.com/skywinder/github-changelog-generator)
[![Build Status](https://travis-ci.org/skywinder/github-changelog-generator.svg?branch=master)](https://travis-ci.org/skywinder/github-changelog-generator) [![Build Status](https://travis-ci.org/skywinder/github-changelog-generator.svg?branch=master)](https://travis-ci.org/skywinder/github-changelog-generator)
[![Inline docs](http://inch-ci.org/github/skywinder/github-changelog-generator.svg)](http://inch-ci.org/github/skywinder/github-changelog-generator) [![Inline docs](http://inch-ci.org/github/skywinder/github-changelog-generator.svg)](http://inch-ci.org/github/skywinder/github-changelog-generator)
[![Code Climate](https://codeclimate.com/github/skywinder/github-changelog-generator/badges/gpa.svg)](https://codeclimate.com/github/skywinder/github-changelog-generator) [![Code Climate](https://codeclimate.com/github/skywinder/github-changelog-generator/badges/gpa.svg)](https://codeclimate.com/github/skywinder/github-changelog-generator)
[![Test Coverage](https://codeclimate.com/github/skywinder/github-changelog-generator/badges/coverage.svg)](https://codeclimate.com/github/skywinder/github-changelog-generator) [![Test Coverage](https://codeclimate.com/github/skywinder/github-changelog-generator/badges/coverage.svg)](https://codeclimate.com/github/skywinder/github-changelog-generator)
GitHub Changelog Generator ![GitHub Logo](../master/images/logo.jpg) GitHub Changelog Generator ![GitHub Logo](../master/images/logo.jpg)
================== ==================
- [Installation](#installation) - [Installation](#installation)
- [Output example](#output-example) - [Output example](#output-example)
- [Usage](#usage) - [Usage](#usage)
- [Params](#params) - [Params](#params)
- [GitHub token](#github-token) - [GitHub token](#github-token)
- [Features and advantages of this project](#features-and-advantages-of-this-project) - [Features and advantages of this project](#features-and-advantages-of-this-project)
- [Alternatives](#alternatives) - [Alternatives](#alternatives)
- [Projects using this library](#projects-using-this-library) - [Projects using this library](#projects-using-this-library)
- [Am I missing some essential feature?](#am-i-missing-some-essential-feature) - [Am I missing some essential feature?](#am-i-missing-some-essential-feature)
- [Contributing](#contributing) - [Contributing](#contributing)
- [License](#license) - [License](#license)
### Changelog generation has never been so easy: ### Changelog generation has never been so easy:
**Fully automate changelog generation** - This gem generates change log file based on **tags**, **issues** and merged **pull requests** (and splits them into separate lists according labels) from :octocat: GitHub Issue Tracker. **Fully automate changelog generation** - This gem generates change log file based on **tags**, **issues** and merged **pull requests** (and splits them into separate lists according labels) from :octocat: GitHub Issue Tracker.
Since now you don't have to fill your `CHANGELOG.md` manually: just run the script, relax and take a cup of :coffee: before your next release! :tada: Since now you don't have to fill your `CHANGELOG.md` manually: just run the script, relax and take a cup of :coffee: before your next release! :tada:
>### *Whats the point of a change log?* >### *Whats the point of a change log?*
To make it easier for users and contributors to see precisely what notable changes have been made between each release (or version) of the project. To make it easier for users and contributors to see precisely what notable changes have been made between each release (or version) of the project.
### *Why should I care?* ### *Why should I care?*
Because software tools are for people. If you dont care, why are you contributing to open source? Surely, there must be a kernel (ha!) of care somewhere in that lovely little brain of yours. Because software tools are for people. If you dont care, why are you contributing to open source? Surely, there must be a kernel (ha!) of care somewhere in that lovely little brain of yours.
> :copyright: *[http://keepachangelog.com](http://keepachangelog.com/)* > :copyright: *[http://keepachangelog.com](http://keepachangelog.com/)*
## Installation ## Installation
[sudo] gem install github_changelog_generator [sudo] gem install github_changelog_generator
## Output example ## Output example
- Look at **[CHANGELOG.md](https://github.com/skywinder/Github-Changelog-Generator/blob/master/CHANGELOG.md)** for this project - Look at **[CHANGELOG.md](https://github.com/skywinder/Github-Changelog-Generator/blob/master/CHANGELOG.md)** for this project
- [ActionSheetPicker-3.0/CHANGELOG.md](https://github.com/skywinder/ActionSheetPicker-3.0/blob/master/CHANGELOG.md) was generated by command: - [ActionSheetPicker-3.0/CHANGELOG.md](https://github.com/skywinder/ActionSheetPicker-3.0/blob/master/CHANGELOG.md) was generated by command:
github_changelog_generator -u skywinder -p ActionSheetPicker-3.0 github_changelog_generator -u skywinder -p ActionSheetPicker-3.0
- In general it looks like this: - In general it looks like this:
> ## [1.2.5](https://github.com/skywinder/Github-Changelog-Generator/tree/1.2.5) (2015-01-15) > ## [1.2.5](https://github.com/skywinder/Github-Changelog-Generator/tree/1.2.5) (2015-01-15)
> >
> [Full Changelog](https://github.com/skywinder/Github-Changelog-Generator/compare/1.2.4...1.2.5) > [Full Changelog](https://github.com/skywinder/Github-Changelog-Generator/compare/1.2.4...1.2.5)
> >
> **Implemented enhancements:** > **Implemented enhancements:**
> >
> - Use milestone to specify in which version bug was fixed [\#22](https://github.com/skywinder/Github-Changelog-Generator/issues/22) > - Use milestone to specify in which version bug was fixed [\#22](https://github.com/skywinder/Github-Changelog-Generator/issues/22)
> >
> **Fixed bugs:** > **Fixed bugs:**
> >
> - Error when trying to generate log for repo without tags [\#32](https://github.com/skywinder/Github-Changelog-Generator/issues/32) > - Error when trying to generate log for repo without tags [\#32](https://github.com/skywinder/Github-Changelog-Generator/issues/32)
> >
> **Merged pull requests:** > **Merged pull requests:**
> >
> - PrettyPrint class is included using lowercase 'pp' [\#43](https://github.com/skywinder/Github-Changelog-Generator/pull/43) ([schwing](https://github.com/schwing)) > - PrettyPrint class is included using lowercase 'pp' [\#43](https://github.com/skywinder/Github-Changelog-Generator/pull/43) ([schwing](https://github.com/schwing))
> >
> - support enterprise github via command line options [\#42](https://github.com/skywinder/Github-Changelog-Generator/pull/42) ([glenlovett](https://github.com/glenlovett)) > - support enterprise github via command line options [\#42](https://github.com/skywinder/Github-Changelog-Generator/pull/42) ([glenlovett](https://github.com/glenlovett))
## Usage ## Usage
**It's really simple**: **It's really simple**:
- If your **git remote** `origin` refers to your GitHub repo, then just go to your project folder and run: - If your **git remote** `origin` refers to your GitHub repo, then just go to your project folder and run:
github_changelog_generator github_changelog_generator
- or from anywhere: - or from anywhere:
- `github_changelog_generator -u github_username -p github_project` - `github_changelog_generator -u github_username -p github_project`
- `github_changelog_generator github_username/github_project` - `github_changelog_generator github_username/github_project`
As output you will get `CHANGELOG.md` file with pretty *Markdown-formatted* changelog. As output you will get `CHANGELOG.md` file with pretty *Markdown-formatted* changelog.
### Params ### Params
Type `github_changelog_generator --help` for detailed usage. Type `github_changelog_generator --help` for details.
Usage: github_changelog_generator [options] More detailed info about params you can find in Wiki page: [**Advanced change log generation examples**](https://github.com/skywinder/github-changelog-generator/wiki/Advanced-change-log-generation-examples)
-u, --user [USER] Username of the owner of target GitHub repo
-p, --project [PROJECT] Name of project on GitHub ### GitHub token
-t, --token [TOKEN] To make more than 50 requests per hour your GitHub token is required. You can generate it at: https://github.com/settings/tokens/new
-f, --date-format [FORMAT] Date format. Default is %Y-%m-%d Since GitHub allows you to make only 50 requests without authentication it's recommended to run this script with a token (`-t, --token` option)
-o, --output [NAME] Output file. Default is CHANGELOG.md
--[no-]issues Include closed issues in changelog. Default is true **You can easily [generate it here](https://github.com/settings/tokens/new?description=GitHub%20Changelog%20Generator%20token)**.
--[no-]issues-wo-labels Include closed issues without labels in changelog. Default is true
--[no-]pr-wo-labels Include pull requests without labels in changelog. Default is true And:
--[no-]pull-requests Include pull-requests in changelog. Default is true
--[no-]filter-by-milestone Use milestone to detect when issue was resolved. Default is true - Run with key `-t [your-40-digit-token]`
--[no-]author Add author of pull-request in the end. Default is true - Or set environment variable `CHANGELOG_GITHUB_TOKEN` and specify there your token.
--unreleased-only Generate log from unreleased closed issues only.
--[no-]unreleased Add to log unreleased closed issues. Default is true i.e. add to your `~/.bash_profile` or `~/.zshrc` or any other place to load ENV variables string :
--unreleased-label [label] Add to log unreleased closed issues. Default is true
--[no-]compare-link Include compare link (Full Changelog) between older version and newer version. Default is true export CHANGELOG_GITHUB_TOKEN="your-40-digit-github-token"
--include-labels x,y,z Only issues with the specified labels will be included in the changelog. Default is 'bug,enhancement'
--exclude-labels x,y,z Issues with the specified labels will be always excluded from changelog. Default is 'duplicate,question,invalid,wontfix' So, if you got error like this:
--between-tags x,y,z Change log will be filled only between specified tags >! /Library/Ruby/Gems/2.0.0/gems/github_api-0.12.2/lib/github_api/response/raise_error.rb:14:in `on_complete'
--exclude-tags x,y,z Change log will be exclude specified tags
--max-issues [NUMBER] Max number of issues to fetch from GitHub. Default is unlimited It's time to create this token or wait for 1 hour before GitHub reset the counter for your IP.
--github-site [URL] The Enterprise Github site on which your project is hosted.
--github-api [URL] The enterprise endpoint to use for your Github API. ## Migrating from a manual changelog
--simple-list Create simple list from issues and pull requests. Default is false.
--future-release [RELEASE-VERSION] Knowing how dedicated you are to your project, you probably haven't been waiting for github-changelog-generator to keep a changelog,
Put the unreleased changes in the specified release number. but you most likely wouln't like to have to open issues and PRs for all past features listed in your historic changelog.
--[no-]verbose Run verbosely. Default is true
-v, --version Print version number That's where `--base` comes handy. This option lets you pass a static changelog to be appended at the end of the generated entries.
-h, --help Displays Help
If you have a `HISTORY.md` file in your project, it will automatically be picked as the static historical changelog and appended.
### GitHub token ### Rake task
Since GitHub allows you to make only 50 requests without authentication it's recommended to run this script with a token (`-t, --token` option) You love Rake? So do we! And so we've made it easier for you by providing a Rake task library for your Change log generation. In your Rakefile, use:
**You can easily [generate it here](https://github.com/settings/tokens)**. ```ruby
GitHubChangelogGenerator::RakeTask.new :changelog do |config|
And: config.since_tag = '0.1.14'
config.future_release = '0.2.0'
- Run with key `-t [your-16-digit-token]` end
- Or set environment variable `CHANGELOG_GITHUB_TOKEN` and specify there your token. ```
i.e. add to your `~/.bash_profile` or `~/.zshrc` or any other place to load ENV variables string : All command line options can be passed to the Rake task as `config` parameters. Since you're naming the Rake task yourself, you can create as many as you want, too.
export CHANGELOG_GITHUB_TOKEN="your-40-digit-github-token" ##Features and advantages of this project
- Generate canonical, neat change log file, followed by [basic change log guidelines](http://keepachangelog.com/) :gem:
So, if you got error like this: - Possible to generate **Unreleased** changes (closed issues that have not released yet) :dizzy:
>! /Library/Ruby/Gems/2.0.0/gems/github_api-0.12.2/lib/github_api/response/raise_error.rb:14:in `on_complete' - **GitHub Enterprise support** via command line options! :factory:
- Flexible format **customisation**:
It's time to create this token or wait for 1 hour before GitHub reset the counter for your IP. - **Customize** issues, that **should be added** to changelog :eight_spoked_asterisk:
- **Custom date format** supported (but get in mind [ISO 8601](http://xkcd.com/1179/) ) :date:
##Features and advantages of this project - Ability to manually specify in which version issue was fixed (in case, when closed date is not match) by setting `milestone` of issue the same name as tag of required version :pushpin:
- Generate canonical, neat change log file, followed by [basic change log guidlines](http://keepachangelog.com/) :gem: - Automatically **exclude specific issues**, not-related to change log (any issue, that has label `question` `duplicate` `invalid` `wontfix`by default) :scissors:
- Possible to generate **Unreleased** changes (closed issues that have not released yet) :dizzy: - **Distinguish** issues **according labels**. :mag_right:
- **GitHub Enterprise support** via command line options! :factory: - Merged pull requests (all `merged` pull-requests) :twisted_rightwards_arrows:
- Flexible format **customisation**: - Bug fixes (by label `bug` in issue) :beetle:
- **Customize** issues, that **should be added** to changelog :eight_spoked_asterisk: - Enhancements (by label `enhancement` in issue) :star2:
- **Custom date format** supported (but get in mind [ISO 8601](http://xkcd.com/1179/) ) :date: - Issues (closed issues `w/o any labels`) :non-potable_water:
- Ability to manually specify in which version issue was fixed (in case, when closed date is not match) by setting `milestone` of issue the same name as tag of required version :pushpin:
- Automatically **exclude specific issues**, not-related to change log (any issue, that has label `question` `duplicate` `invalid` `wontfix`by default) :scissors: - You can manually set which labels should be included/excluded. :wrench:
- **Distinguish** issues **according labels**. :mag_right: - Apply a lot of other customisations, to fit changelog for your personal style :tophat:
- Merged pull requests (all `merged` pull-requests) :twisted_rightwards_arrows: (*look `github_changelog_generator --help` for details)*
- Bug fixes (by label `bug` in issue) :beetle:
- Enhancements (by label `enhancement` in issue) :star2:
- Issues (closed issues `w/o any labels`) :non-potable_water: ###Alternatives
Here is a [wikipage list of alternatives](https://github.com/skywinder/Github-Changelog-Generator/wiki/Alternatives), that I found. But none satisfied my requirements.
- You can manually set which labels should be included/excluded. :wrench:
- Apply a lot of other customisations, to fit changelog for your personal style :tophat: *If you know other projects - feel free to edit this Wiki page!*
(*look `github_changelog_generator --help` for details)*
### Projects using this library
###Alternatives [Wikipage with list of projects](https://github.com/skywinder/Github-Changelog-Generator/wiki/Projects-using-Github-Changelog-Generator)
Here is a [wikipage list of alternatives](https://github.com/skywinder/Github-Changelog-Generator/wiki/Alternatives), that I found. But none satisfied my requirements.
*If you know other projects - feel free to edit this Wiki page!*
### Projects using this library
[Wikipage with list of projects](https://github.com/skywinder/Github-Changelog-Generator/wiki/Projects-using-Github-Changelog-Generator)
If you've used this project in a live app, please let me know! Nothing makes me happier than seeing someone else take my work and go wild with it. If you've used this project in a live app, please let me know! Nothing makes me happier than seeing someone else take my work and go wild with it.
*If you are using `github_changelog_generator` for generation change log in your project or know another project that uses it, please add it to [this] (https://github.com/skywinder/Github-Changelog-Generator/wiki/Projects-using-Github-Changelog-Generator) list.* *If you are using `github_changelog_generator` for generation change log in your project or know another project that uses it, please add it to [this] (https://github.com/skywinder/Github-Changelog-Generator/wiki/Projects-using-Github-Changelog-Generator) list.*
## Am I missing some essential feature? ## Am I missing some essential feature?
- **Nothing is impossible!** - **Nothing is impossible!**
- Open an [issue](https://github.com/skywinder/Github-Changelog-Generator/issues/new) and let's make generator better together! - Open an [issue](https://github.com/skywinder/Github-Changelog-Generator/issues/new) and let's make generator better together!
- *Bug reports, feature requests, patches, well-wishes are always welcome* :heavy_exclamation_mark: - *Bug reports, feature requests, patches, well-wishes are always welcome* :heavy_exclamation_mark:
## FAQ ## FAQ
- ***I already use GitHub Releases. Why do I need this?*** - ***I already use GitHub Releases. Why do I need this?***
GitHub Releases is a very good thing. And it's very good practice to maintain it (not so much people using it yet)! :congratulations: GitHub Releases is a very good thing. And it's very good practice to maintain it (not so much people using it yet)! :congratulations:
*BDW: I would like to support GitHub Releases in [next releases](https://github.com/skywinder/github-changelog-generator/issues/56) ;)* *BDW: I would like to support GitHub Releases in [next releases](https://github.com/skywinder/github-changelog-generator/issues/56) ;)*
I'm not try to compare quality of auto-generated and manually generated logs.. but: I'm not try to compare quality of auto-generated and manually generated logs.. but:
The auto generated Changelog really helps even if you manually fill Releases notes! The auto generated Changelog really helps even if you manually fill Releases notes!
For example: For example:
When I found a closed bug - it's very useful to understand, in which release it was fixed. In that case you can easily find this issue by \# in `CHANGELOG.md`. When I found a closed bug - it's very useful to understand, in which release it was fixed. In that case you can easily find this issue by \# in `CHANGELOG.md`.
- it's not so quite easy to find it in manually filled Releases notes. - it's not so quite easy to find it in manually filled Releases notes.
- this file can also help you to build your Release note and not miss features in manually-filled list. - this file can also help you to build your Release note and not miss features in manually-filled list.
In the end: In the end:
I think, that GitHub Releases is more for end-users. I think, that GitHub Releases is more for end-users.
But `CHANGELOG.md` could stay in the repo for developers with detailed list of changes. But `CHANGELOG.md` could stay in the repo for developers with detailed list of changes.
And it's nothing bad to combine GitHub Releases and `CHANGELOG.md` file together in that manner. And it's nothing bad to combine GitHub Releases and `CHANGELOG.md` file together in that manner.
- ***I received a warning: GitHub API rate limit exceed, what does this mean?*** - ***I received a warning: GitHub API rate limit exceed, what does this mean?***
GitHub [limits the number of API requests](https://developer.github.com/v3/#rate-limiting) you can make in an hour. You can make up to 5,000 requests per hour. For unauthenticated requests, the rate limit allows you to make up to 60 requests per hour. Unauthenticated requests are associated with your IP address, and not the user making requests. GitHub [limits the number of API requests](https://developer.github.com/v3/#rate-limiting) you can make in an hour. You can make up to 5,000 requests per hour. For unauthenticated requests, the rate limit allows you to make up to 60 requests per hour. Unauthenticated requests are associated with your IP address, and not the user making requests.
If you're seeing this warning: If you're seeing this warning:
1. Make sure you're providing an OAuth token so you're not anonymously making requests. This will increase the number of requests from 60 to 5000 per hour. 1. Make sure you're providing an OAuth token so you're not anonymously making requests. This will increase the number of requests from 60 to 5000 per hour.
2. You probably have a large repo with lots of issues/PRs. You can use the `--max-issues NUM` argument to limit the number of issues that are pulled back. For example: `--max-issues 1000` 2. You probably have a large repo with lots of issues/PRs. You can use the `--max-issues NUM` argument to limit the number of issues that are pulled back. For example: `--max-issues 1000`
## Contributing ## Contributing
1. Create an issue to discuss about your idea 1. Create an issue to discuss about your idea
2. [Fork it] (https://github.com/skywinder/Github-Changelog-Generator/fork) 2. [Fork it] (https://github.com/skywinder/Github-Changelog-Generator/fork)
3. Create your feature branch (`git checkout -b my-new-feature`) 3. Create your feature branch (`git checkout -b my-new-feature`)
4. Commit your changes (`git commit -am 'Add some feature'`) 4. Commit your changes (`git commit -am 'Add some feature'`)
5. Push to the branch (`git push origin my-new-feature`) 5. Push to the branch (`git push origin my-new-feature`)
6. Create a new Pull Request 6. Create a new Pull Request
7. Profit! :white_check_mark: 7. Profit! :white_check_mark:
## License ## License
Github Changelog Generator is released under the [MIT License](http://www.opensource.org/licenses/MIT). Github Changelog Generator is released under the [MIT License](http://www.opensource.org/licenses/MIT).

View File

@@ -23,9 +23,10 @@ Gem::Specification.new do |spec|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
spec.require_paths = ["lib"] spec.require_paths = ["lib"]
spec.add_development_dependency "bundler", "~> 1.7"
spec.add_development_dependency "rake", "~> 10.0"
spec.add_runtime_dependency("github_api", ["~> 0.12"]) spec.add_runtime_dependency("github_api", ["~> 0.12"])
spec.add_runtime_dependency("colorize", ["~> 0.7"]) spec.add_runtime_dependency("colorize", ["~> 0.7"])
# Development only
spec.add_development_dependency "bundler", "~> 1.7"
spec.add_development_dependency "rake", "~> 10.0"
end end

View File

@@ -1,7 +1,30 @@
# Change Log # Change Log
## [0.0.4](https://github.com/skywinder/changelog_test/tree/0.0.4) (2015-05-22) ## [Unreleased](https://github.com/skywinder/changelog_test/tree/HEAD)
[Full Changelog](https://github.com/skywinder/changelog_test/compare/0.0.4...HEAD)
**Implemented enhancements:**
- Enchancment [\#9](https://github.com/skywinder/changelog_test/issues/9)
**Fixed bugs:**
- BugFix [\#11](https://github.com/skywinder/changelog_test/issues/11)
**Closed issues:**
- Issue closed from commit from PR [\#14](https://github.com/skywinder/changelog_test/issues/14)
- Issue, closed by PR [\#12](https://github.com/skywinder/changelog_test/issues/12)
- Issue [\#10](https://github.com/skywinder/changelog_test/issues/10)
- Issue with some other label - Should be in closed issues [\#8](https://github.com/skywinder/changelog_test/issues/8)
**Merged pull requests:**
- This PR closes 14 from commit [\#15](https://github.com/skywinder/changelog_test/pull/15) ([skywinder](https://github.com/skywinder))
- This PR to close \#12 from body [\#13](https://github.com/skywinder/changelog_test/pull/13) ([skywinder](https://github.com/skywinder))
## [0.0.4](https://github.com/skywinder/changelog_test/tree/0.0.4) (2015-05-22)
[Full Changelog](https://github.com/skywinder/changelog_test/compare/v0.0.3...0.0.4) [Full Changelog](https://github.com/skywinder/changelog_test/compare/v0.0.3...0.0.4)
**Closed issues:** **Closed issues:**
@@ -13,7 +36,6 @@
- Add automatically generated change log file. [\#5](https://github.com/skywinder/changelog_test/pull/5) ([skywinder](https://github.com/skywinder)) - Add automatically generated change log file. [\#5](https://github.com/skywinder/changelog_test/pull/5) ([skywinder](https://github.com/skywinder))
## [v0.0.3](https://github.com/skywinder/changelog_test/tree/v0.0.3) (2015-03-04) ## [v0.0.3](https://github.com/skywinder/changelog_test/tree/v0.0.3) (2015-03-04)
[Full Changelog](https://github.com/skywinder/changelog_test/compare/v0.0.2...v0.0.3) [Full Changelog](https://github.com/skywinder/changelog_test/compare/v0.0.2...v0.0.3)
**Merged pull requests:** **Merged pull requests:**
@@ -21,7 +43,6 @@
- fix \#3. hotfix. Should appear in v0.0.3 [\#4](https://github.com/skywinder/changelog_test/pull/4) ([skywinder](https://github.com/skywinder)) - fix \#3. hotfix. Should appear in v0.0.3 [\#4](https://github.com/skywinder/changelog_test/pull/4) ([skywinder](https://github.com/skywinder))
## [v0.0.2](https://github.com/skywinder/changelog_test/tree/v0.0.2) (2015-03-04) ## [v0.0.2](https://github.com/skywinder/changelog_test/tree/v0.0.2) (2015-03-04)
[Full Changelog](https://github.com/skywinder/changelog_test/compare/v0.0.1...v0.0.2) [Full Changelog](https://github.com/skywinder/changelog_test/compare/v0.0.1...v0.0.2)
**Merged pull requests:** **Merged pull requests:**
@@ -31,5 +52,4 @@
## [v0.0.1](https://github.com/skywinder/changelog_test/tree/v0.0.1) (2015-03-02) ## [v0.0.1](https://github.com/skywinder/changelog_test/tree/v0.0.1) (2015-03-02)
\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* \* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*

View File

@@ -5,6 +5,7 @@ require "json"
require "colorize" require "colorize"
require "benchmark" require "benchmark"
require_relative "github_changelog_generator/helper"
require_relative "github_changelog_generator/parser" require_relative "github_changelog_generator/parser"
require_relative "github_changelog_generator/generator/generator" require_relative "github_changelog_generator/generator/generator"
require_relative "github_changelog_generator/version" require_relative "github_changelog_generator/version"

View File

@@ -1,11 +1,10 @@
require "logger"
module GitHubChangelogGenerator module GitHubChangelogGenerator
# A Fetcher responsible for all requests to GitHub and all basic manipulation with related data # A Fetcher responsible for all requests to GitHub and all basic manipulation with related data
# (such as filtering, validating, e.t.c) # (such as filtering, validating, e.t.c)
# #
# Example: # Example:
# fetcher = GitHubChangelogGenerator::Fetcher.new options # fetcher = GitHubChangelogGenerator::Fetcher.new options
class Fetcher class Fetcher
PER_PAGE_NUMBER = 30 PER_PAGE_NUMBER = 30
CHANGELOG_GITHUB_TOKEN = "CHANGELOG_GITHUB_TOKEN" CHANGELOG_GITHUB_TOKEN = "CHANGELOG_GITHUB_TOKEN"
@@ -16,16 +15,9 @@ module GitHubChangelogGenerator
def initialize(options = {}) def initialize(options = {})
@options = options || {} @options = options || {}
@logger = Logger.new(STDOUT)
@logger.formatter = proc do |_severity, _datetime, _progname, msg|
"#{msg}\n"
end
@user = @options[:user] @user = @options[:user]
@project = @options[:project] @project = @options[:project]
@github_token = fetch_github_token @github_token = fetch_github_token
@tag_times_hash = {}
github_options = { per_page: PER_PAGE_NUMBER } github_options = { per_page: PER_PAGE_NUMBER }
github_options[:oauth_token] = @github_token unless @github_token.nil? github_options[:oauth_token] = @github_token unless @github_token.nil?
github_options[:endpoint] = @options[:github_endpoint] unless @options[:github_endpoint].nil? github_options[:endpoint] = @options[:github_endpoint] unless @options[:github_endpoint].nil?
@@ -41,7 +33,7 @@ module GitHubChangelogGenerator
def fetch_github_token def fetch_github_token
env_var = @options[:token] ? @options[:token] : (ENV.fetch CHANGELOG_GITHUB_TOKEN, nil) env_var = @options[:token] ? @options[:token] : (ENV.fetch CHANGELOG_GITHUB_TOKEN, nil)
@logger.warn NO_TOKEN_PROVIDED.yellow unless env_var Helper.log.warn NO_TOKEN_PROVIDED.yellow unless env_var
env_var env_var
end end
@@ -51,27 +43,28 @@ module GitHubChangelogGenerator
def get_all_tags def get_all_tags
print "Fetching tags...\r" if @options[:verbose] print "Fetching tags...\r" if @options[:verbose]
tags = [] check_github_response { github_fetch_tags }
check_github_response { github_fetch_tags(tags) }
tags
end end
# This is wrapper with rescue block
# @return [Object] returns exactly the same, what you put in the block, but wrap it with begin-rescue block
def check_github_response def check_github_response
begin begin
value = yield value = yield
rescue Github::Error::Unauthorized => e rescue Github::Error::Unauthorized => e
@logger.error e.body.red Helper.log.error e.body.red
abort "Error: wrong GitHub token" abort "Error: wrong GitHub token"
rescue Github::Error::Forbidden => e rescue Github::Error::Forbidden => e
@logger.warn e.body.red Helper.log.warn e.body.red
@logger.warn GH_RATE_LIMIT_EXCEEDED_MSG.yellow Helper.log.warn GH_RATE_LIMIT_EXCEEDED_MSG.yellow
end end
value value
end end
def github_fetch_tags(tags) # Fill input array with tags
# @return [Array] array of tags in repo
def github_fetch_tags
tags = []
response = @github.repos.tags @options[:user], @options[:project] response = @github.repos.tags @options[:user], @options[:project]
page_i = 0 page_i = 0
count_pages = response.count_pages count_pages = response.count_pages
@@ -83,11 +76,12 @@ module GitHubChangelogGenerator
print_empty_line print_empty_line
if tags.count == 0 if tags.count == 0
@logger.warn "Warning: Can't find any tags in repo.\ Helper.log.warn "Warning: Can't find any tags in repo.\
Make sure, that you push tags to remote repo via 'git push --tags'".yellow Make sure, that you push tags to remote repo via 'git push --tags'".yellow
else else
@logger.info "Found #{tags.count} tags" Helper.log.info "Found #{tags.count} tags"
end end
tags
end end
# This method fetch all closed issues and separate them to pull requests and pure issues # This method fetch all closed issues and separate them to pull requests and pure issues
@@ -112,10 +106,10 @@ Make sure, that you push tags to remote repo via 'git push --tags'".yellow
break if @options[:max_issues] && issues.length >= @options[:max_issues] break if @options[:max_issues] && issues.length >= @options[:max_issues]
end end
print_empty_line print_empty_line
@logger.info "Received issues: #{issues.count}" Helper.log.info "Received issues: #{issues.count}"
rescue rescue
@logger.warn GH_RATE_LIMIT_EXCEEDED_MSG.yellow Helper.log.warn GH_RATE_LIMIT_EXCEEDED_MSG.yellow
end end
# separate arrays of issues and pull requests: # separate arrays of issues and pull requests:
@@ -140,17 +134,20 @@ Make sure, that you push tags to remote repo via 'git push --tags'".yellow
end end
print_empty_line print_empty_line
rescue rescue
@logger.warn GH_RATE_LIMIT_EXCEEDED_MSG.yellow Helper.log.warn GH_RATE_LIMIT_EXCEEDED_MSG.yellow
end end
@logger.info "Fetching merged dates: #{pull_requests.count}" Helper.log.info "Fetching merged dates: #{pull_requests.count}"
pull_requests pull_requests
end end
# Print specified line on the same string
# @param [String] log_string
def print_in_same_line(log_string) def print_in_same_line(log_string)
print log_string + "\r" print log_string + "\r"
end end
# Print long line with spaces on same line to clear prev message
def print_empty_line def print_empty_line
print_in_same_line(" ") print_in_same_line(" ")
end end
@@ -169,10 +166,10 @@ Make sure, that you push tags to remote repo via 'git push --tags'".yellow
obj = @github.issues.events.list user: @options[:user], obj = @github.issues.events.list user: @options[:user],
repo: @options[:project], repo: @options[:project],
issue_number: issue["number"] issue_number: issue["number"]
issue[:events] = obj.body
rescue rescue
@logger.warn GH_RATE_LIMIT_EXCEEDED_MSG.yellow Helper.log.warn GH_RATE_LIMIT_EXCEEDED_MSG.yellow
end end
issue[:events] = obj.body
print_in_same_line("Fetching events for issues and PR: #{i + 1}/#{issues.count}") print_in_same_line("Fetching events for issues and PR: #{i + 1}/#{issues.count}")
i += 1 i += 1
end end
@@ -184,32 +181,26 @@ Make sure, that you push tags to remote repo via 'git push --tags'".yellow
# to clear line from prev print # to clear line from prev print
print_empty_line print_empty_line
@logger.info "Fetching events for issues and PR: #{i}" Helper.log.info "Fetching events for issues and PR: #{i}"
end end
# Try to find tag date in local hash. # Fetch tag time from repo
# Otherwise fFetch tag time and put it to local hash file. #
# @param [String] tag_name name of the tag # @param [Hash] tag
# @return [Time] time of specified tag # @return [Time] time of specified tag
def get_time_of_tag(tag_name) def fetch_date_of_tag(tag)
fail ChangelogGeneratorError, "tag_name is nil".red if tag_name.nil?
if @tag_times_hash[tag_name["name"]]
return @tag_times_hash[tag_name["name"]]
end
begin begin
github_git_data_commits_get = @github.git_data.commits.get @options[:user], commit_data = @github.git_data.commits.get @options[:user],
@options[:project], @options[:project],
tag_name["commit"]["sha"] tag["commit"]["sha"]
rescue rescue
@logger.warn GH_RATE_LIMIT_EXCEEDED_MSG.yellow Helper.log.warn GH_RATE_LIMIT_EXCEEDED_MSG.yellow
end end
time_string = github_git_data_commits_get["committer"]["date"] time_string = commit_data["committer"]["date"]
@tag_times_hash[tag_name["name"]] = Time.parse(time_string) Time.parse(time_string)
end end
# Fetch commit for specifed event # Fetch commit for specified event
# @return [Hash] # @return [Hash]
def fetch_commit(event) def fetch_commit(event)
@github.git_data.commits.get @options[:user], @options[:project], event[:commit_id] @github.git_data.commits.get @options[:user], @options[:project], event[:commit_id]

View File

@@ -1,4 +1,4 @@
require "github_changelog_generator/fetcher" require_relative "../fetcher"
require_relative "generator_generation" require_relative "generator_generation"
require_relative "generator_fetcher" require_relative "generator_fetcher"
require_relative "generator_processor" require_relative "generator_processor"
@@ -10,7 +10,7 @@ module GitHubChangelogGenerator
end end
class Generator class Generator
attr_accessor :options, :all_tags, :github attr_accessor :options, :filtered_tags, :github
# A Generator responsible for all logic, related with change log generation from ready-to-parse issues # A Generator responsible for all logic, related with change log generation from ready-to-parse issues
# #
@@ -19,7 +19,7 @@ module GitHubChangelogGenerator
# content = generator.compound_changelog # content = generator.compound_changelog
def initialize(options = nil) def initialize(options = nil)
@options = options || {} @options = options || {}
@tag_times_hash = {}
@fetcher = GitHubChangelogGenerator::Fetcher.new @options @fetcher = GitHubChangelogGenerator::Fetcher.new @options
end end
@@ -41,7 +41,7 @@ module GitHubChangelogGenerator
def encapsulate_string(string) def encapsulate_string(string)
string.gsub! '\\', '\\\\' string.gsub! '\\', '\\\\'
encpas_chars = %w(> * _ \( \) [ ] #) encpas_chars = %w(< > * _ \( \) [ ] #)
encpas_chars.each do |char| encpas_chars.each do |char|
string.gsub! char, "\\#{char}" string.gsub! char, "\\#{char}"
end end
@@ -56,7 +56,7 @@ module GitHubChangelogGenerator
# @param [String] newer_tag Name of the newer tag. Could be nil for `Unreleased` section # @param [String] newer_tag Name of the newer tag. Could be nil for `Unreleased` section
# @param [String] older_tag_name Older tag, used for the links. Could be nil for last tag. # @param [String] older_tag_name Older tag, used for the links. Could be nil for last tag.
# @return [String] Ready and parsed section # @return [String] Ready and parsed section
def create_log(pull_requests, issues, newer_tag, older_tag_name = nil) def create_log_for_tag(pull_requests, issues, newer_tag, older_tag_name = nil)
newer_tag_link, newer_tag_name, newer_tag_time = detect_link_tag_time(newer_tag) newer_tag_link, newer_tag_name, newer_tag_time = detect_link_tag_time(newer_tag)
github_site = options[:github_site] || "https://github.com" github_site = options[:github_site] || "https://github.com"
@@ -104,12 +104,12 @@ module GitHubChangelogGenerator
issues.each do |dict| issues.each do |dict|
added = false added = false
dict.labels.each do |label| dict.labels.each do |label|
if label.name == "bug" if @options[:bug_labels].include? label.name
bugs_a.push dict bugs_a.push dict
added = true added = true
next next
end end
if label.name == "enhancement" if @options[:enhancement_labels].include? label.name
enhancement_a.push dict enhancement_a.push dict
added = true added = true
next next

View File

@@ -17,11 +17,11 @@ module GitHubChangelogGenerator
# Async fetching tags: # Async fetching tags:
threads = [] threads = []
i = 0 i = 0
all = @all_tags.count all = @filtered_tags.count
@all_tags.each do |tag| @filtered_tags.each do |tag|
print " \r" print " \r"
threads << Thread.new do threads << Thread.new do
@fetcher.get_time_of_tag(tag) get_time_of_tag(tag)
print "Fetching tags dates: #{i + 1}/#{all}\r" if @options[:verbose] print "Fetching tags dates: #{i + 1}/#{all}\r" if @options[:verbose]
i += 1 i += 1
end end
@@ -41,8 +41,8 @@ module GitHubChangelogGenerator
threads << Thread.new { find_closed_date_by_commit(issue) } threads << Thread.new { find_closed_date_by_commit(issue) }
end end
threads.each(&:join) threads.each(&:join)
puts "Fetching closed dates for issues: Done!" if @options[:verbose]
end end
puts "Fetching closed dates for issues: Done!" if @options[:verbose]
end end
# Fill :actual_date parameter of specified issue by closed date of the commit, if it was closed by commit. # Fill :actual_date parameter of specified issue by closed date of the commit, if it was closed by commit.

View File

@@ -5,16 +5,19 @@ module GitHubChangelogGenerator
# @return [String] Generated change log file # @return [String] Generated change log file
def compound_changelog def compound_changelog
fetch_and_filter_tags fetch_and_filter_tags
sort_tags_by_date(@filtered_tags)
fetch_issues_and_pr fetch_issues_and_pr
log = "# Change Log\n\n" log = "#{@options[:header]}\n\n"
if @options[:unreleased_only] if @options[:unreleased_only]
log += generate_log_between_tags(all_tags[0], nil) log += generate_log_between_tags(filtered_tags[0], nil)
else else
log += generate_log_for_all_tags log += generate_log_for_all_tags
end end
log += File.read(@options[:base]) if File.file?(@options[:base])
log += "\n\n\\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*" log += "\n\n\\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*"
@log = log @log = log
end end
@@ -24,7 +27,7 @@ module GitHubChangelogGenerator
tag1 = @options[:tag1] tag1 = @options[:tag1]
tag2 = @options[:tag2] tag2 = @options[:tag2]
tags_strings = [] tags_strings = []
all_tags.each { |x| tags_strings.push(x["name"]) } filtered_tags.each { |x| tags_strings.push(x["name"]) }
if tags_strings.include?(tag1) if tags_strings.include?(tag1)
if tags_strings.include?(tag2) if tags_strings.include?(tag2)
@@ -53,8 +56,9 @@ module GitHubChangelogGenerator
if issues.any? if issues.any?
issues.each do |issue| issues.each do |issue|
merge_string = get_string_for_issue(issue) merge_string = get_string_for_issue(issue)
log += "- #{merge_string}\n\n" log += "- #{merge_string}\n"
end end
log += "\n"
end end
log log
end end
@@ -74,10 +78,15 @@ module GitHubChangelogGenerator
time_string = newer_tag_time.strftime @options[:date_format] time_string = newer_tag_time.strftime @options[:date_format]
# Generate tag name and link # Generate tag name and link
if newer_tag_name.equal? @options[:unreleased_label] if @options[:release_url]
log += "## [#{newer_tag_name}](#{project_url}/tree/#{newer_tag_link})\n\n" release_url = format(@options[:release_url], newer_tag_link)
else else
log += "## [#{newer_tag_name}](#{project_url}/tree/#{newer_tag_link}) (#{time_string})\n\n" release_url = "#{project_url}/tree/#{newer_tag_link}"
end
if newer_tag_name.equal? @options[:unreleased_label]
log += "## [#{newer_tag_name}](#{release_url})\n\n"
else
log += "## [#{newer_tag_name}](#{release_url}) (#{time_string})\n"
end end
if @options[:compare_link] && older_tag_link if @options[:compare_link] && older_tag_link
@@ -101,7 +110,7 @@ module GitHubChangelogGenerator
return "" return ""
end end
create_log(filtered_pull_requests, filtered_issues, newer_tag, older_tag_name) create_log_for_tag(filtered_pull_requests, filtered_issues, newer_tag, older_tag_name)
end end
# Apply all filters to issues and pull requests # Apply all filters to issues and pull requests
@@ -128,11 +137,11 @@ module GitHubChangelogGenerator
log = generate_unreleased_section log = generate_unreleased_section
(1...all_tags.size).each do |index| (1...filtered_tags.size).each do |index|
log += generate_log_between_tags(all_tags[index], all_tags[index - 1]) log += generate_log_between_tags(filtered_tags[index], filtered_tags[index - 1])
end end
if @all_tags.count != 0 if @filtered_tags.count != 0
log += generate_log_between_tags(nil, all_tags.last) log += generate_log_between_tags(nil, filtered_tags.last)
end end
log log
@@ -141,7 +150,7 @@ module GitHubChangelogGenerator
def generate_unreleased_section def generate_unreleased_section
log = "" log = ""
if @options[:unreleased] if @options[:unreleased]
unreleased_log = generate_log_between_tags(all_tags[0], nil) unreleased_log = generate_log_between_tags(filtered_tags[0], nil)
log += unreleased_log if unreleased_log log += unreleased_log if unreleased_log
end end
log log

View File

@@ -36,7 +36,7 @@ module GitHubChangelogGenerator
false false
else else
# check, that this milestone in tag list: # check, that this milestone in tag list:
milestone_is_tag = @all_tags.find do |tag| milestone_is_tag = @filtered_tags.find do |tag|
tag.name == issue.milestone.title tag.name == issue.milestone.title
end end
@@ -57,7 +57,7 @@ module GitHubChangelogGenerator
true true
else else
# check, that this milestone in tag list: # check, that this milestone in tag list:
@all_tags.find { |tag| tag.name == issue.milestone.title }.nil? @filtered_tags.find { |tag| tag.name == issue.milestone.title }.nil?
end end
end end
end end
@@ -72,8 +72,8 @@ module GitHubChangelogGenerator
# in case if not tags specified - return unchanged array # in case if not tags specified - return unchanged array
return array if older_tag.nil? && newer_tag.nil? return array if older_tag.nil? && newer_tag.nil?
newer_tag_time = newer_tag && @fetcher.get_time_of_tag(newer_tag) newer_tag_time = newer_tag && get_time_of_tag(newer_tag)
older_tag_time = older_tag && @fetcher.get_time_of_tag(older_tag) older_tag_time = older_tag && get_time_of_tag(older_tag)
array.select do |req| array.select do |req|
if req[hash_key] if req[hash_key]

View File

@@ -2,15 +2,34 @@ module GitHubChangelogGenerator
class Generator class Generator
# fetch, filter tags, fetch dates and sort them in time order # fetch, filter tags, fetch dates and sort them in time order
def fetch_and_filter_tags def fetch_and_filter_tags
@all_tags = get_filtered_tags(@fetcher.get_all_tags) @filtered_tags = get_filtered_tags(@fetcher.get_all_tags)
fetch_tags_dates fetch_tags_dates
sort_tags_by_date
end end
# Sort all tags by date # Sort all tags by date
def sort_tags_by_date def sort_tags_by_date(tags)
puts "Sorting tags..." if @options[:verbose] puts "Sorting tags..." if @options[:verbose]
@all_tags.sort_by! { |x| @fetcher.get_time_of_tag(x) }.reverse! tags.sort_by! do |x|
get_time_of_tag(x)
end.reverse!
end
# Try to find tag date in local hash.
# Otherwise fFetch tag time and put it to local hash file.
# @param [Hash] tag_name name of the tag
# @return [Time] time of specified tag
def get_time_of_tag(tag_name)
fail ChangelogGeneratorError, "tag_name is nil".red if tag_name.nil?
name_of_tag = tag_name["name"]
time_for_name = @tag_times_hash[name_of_tag]
if !time_for_name.nil?
time_for_name
else
time_string = @fetcher.fetch_date_of_tag tag_name
@tag_times_hash[name_of_tag] = time_string
time_string
end
end end
# Detect link, name and time for specified tag. # Detect link, name and time for specified tag.
@@ -19,7 +38,7 @@ module GitHubChangelogGenerator
# @return [Array] link, name and time of the tag # @return [Array] link, name and time of the tag
def detect_link_tag_time(newer_tag) def detect_link_tag_time(newer_tag)
# if tag is nil - set current time # if tag is nil - set current time
newer_tag_time = newer_tag.nil? ? Time.new : @fetcher.get_time_of_tag(newer_tag) newer_tag_time = newer_tag.nil? ? Time.new : get_time_of_tag(newer_tag)
# if it's future release tag - set this value # if it's future release tag - set this value
if newer_tag.nil? && @options[:future_release] if newer_tag.nil? && @options[:future_release]
@@ -33,36 +52,92 @@ module GitHubChangelogGenerator
[newer_tag_link, newer_tag_name, newer_tag_time] [newer_tag_link, newer_tag_name, newer_tag_time]
end end
# @return [Object] try to find newest tag using #Reader and :base option if specified otherwise returns nil
def detect_since_tag
if @options[:base] && File.file?(@options[:base])
reader = GitHubChangelogGenerator::Reader.new
content = reader.read(@options[:base])
return content[0]["version"] if content
end
end
# Return tags after filtering tags in lists provided by option: --between-tags & --exclude-tags # Return tags after filtering tags in lists provided by option: --between-tags & --exclude-tags
# #
# @return [Array] # @return [Array]
def get_filtered_tags(all_tags) def get_filtered_tags(all_tags)
filtered_tags = filter_between_tags(all_tags) filtered_tags = filter_since_tag(all_tags)
filtered_tags = filter_between_tags(filtered_tags)
filter_excluded_tags(filtered_tags) filter_excluded_tags(filtered_tags)
end end
def filter_between_tags(all_tags) # @param [Array] all_tags all tags
# @return [Array] filtered tags according :since_tag option
def filter_since_tag(all_tags)
filtered_tags = all_tags filtered_tags = all_tags
if @options[:between_tags] tag = @options[:since_tag]
@options[:between_tags].each do |tag| tag ||= detect_since_tag
unless all_tags.include? tag if tag
puts "Warning: can't find tag #{tag}, specified with --between-tags option.".yellow if all_tags.map(&:name).include? tag
idx = all_tags.index { |t| t.name == tag }
if idx > 0
filtered_tags = all_tags[0..idx - 1]
else
filtered_tags = []
end end
else
Helper.log.warn "Warning: can't find tag #{tag}, specified with --since-tag option."
end end
filtered_tags = all_tags.select { |tag| @options[:between_tags].include? tag }
end end
filtered_tags filtered_tags
end end
# @param [Array] all_tags all tags
# @return [Array] filtered tags according :due_tag option
def filter_due_tag(all_tags)
filtered_tags = all_tags
tag = @options[:due_tag]
if tag
if (all_tags.count > 0) && (all_tags.map(&:name).include? tag)
idx = all_tags.index { |t| t.name == tag }
last_index = all_tags.count - 1
if idx > 0 && idx < last_index
filtered_tags = all_tags[idx + 1..last_index]
else
filtered_tags = []
end
else
Helper.log.warn "Warning: can't find tag #{tag}, specified with --due-tag option."
end
end
filtered_tags
end
# @param [Array] all_tags all tags
# @return [Array] filtered tags according :between_tags option
def filter_between_tags(all_tags)
filtered_tags = all_tags
if @options[:between_tags]
@options[:between_tags].each do |tag|
unless all_tags.map(&:name).include? tag
Helper.log.warn "Warning: can't find tag #{tag}, specified with --between-tags option."
end
end
filtered_tags = all_tags.select { |tag| @options[:between_tags].include? tag.name }
end
filtered_tags
end
# @param [Array] all_tags all tags
# @return [Array] filtered tags according :exclude_tags option
def filter_excluded_tags(all_tags) def filter_excluded_tags(all_tags)
filtered_tags = all_tags filtered_tags = all_tags
if @options[:exclude_tags] if @options[:exclude_tags]
@options[:exclude_tags].each do |tag| @options[:exclude_tags].each do |tag|
unless all_tags.include? tag unless all_tags.map(&:name).include? tag
puts "Warning: can't find tag #{tag}, specified with --between-tags option.".yellow Helper.log.warn "Warning: can't find tag #{tag}, specified with --exclude-tags option."
end end
end end
filtered_tags = all_tags.reject { |tag| @options[:exclude_tags].include? tag } filtered_tags = all_tags.reject { |tag| @options[:exclude_tags].include? tag.name }
end end
filtered_tags filtered_tags
end end

View File

@@ -0,0 +1,37 @@
require "logger"
module GitHubChangelogGenerator
module Helper
# @return true if the currently running program is a unit test
def self.test?
defined?SpecHelper
end
if test?
@log ||= Logger.new(nil) # don't show any logs when running tests
else
@log ||= Logger.new(STDOUT)
end
@log.formatter = proc do |severity, _datetime, _progname, msg|
string = "#{msg}\n"
if severity == "DEBUG"
string = string.magenta
elsif severity == "INFO"
string = string.white
elsif severity == "WARN"
string = string.yellow
elsif severity == "ERROR"
string = string.red
elsif severity == "FATAL"
string = string.red.bold
end
string
end
# Logging happens using this method
class << self
attr_reader :log
end
end
end

View File

@@ -2,7 +2,7 @@
require "optparse" require "optparse"
require "pp" require "pp"
require_relative "version" require_relative "version"
require_relative "helper"
module GitHubChangelogGenerator module GitHubChangelogGenerator
class Parser class Parser
# parse options with optparse # parse options with optparse
@@ -13,7 +13,9 @@ module GitHubChangelogGenerator
parser.parse! parser.parse!
detect_user_and_project(options) if options[:user].nil? || options[:project].nil?
detect_user_and_project(options, ARGV[0], ARGV[1])
end
if !options[:user] || !options[:project] if !options[:user] || !options[:project]
puts parser.banner puts parser.banner
@@ -21,7 +23,7 @@ module GitHubChangelogGenerator
end end
if options[:verbose] if options[:verbose]
puts "Performing task with options:" Helper.log.info "Performing task with options:"
pp options pp options
puts "" puts ""
end end
@@ -48,6 +50,24 @@ module GitHubChangelogGenerator
opts.on("-o", "--output [NAME]", "Output file. Default is CHANGELOG.md") do |last| opts.on("-o", "--output [NAME]", "Output file. Default is CHANGELOG.md") do |last|
options[:output] = last options[:output] = last
end end
opts.on("-b", "--base [NAME]", "Optional base file to append generated changes to.") do |last|
options[:base] = last
end
opts.on("--bugs-label [LABEL]", "Setup custom label for bug-fixes section. Default is \"**Fixed bugs:**""") do |v|
options[:bug_prefix] = v
end
opts.on("--enhancement-label [LABEL]", "Setup custom label for enhancements section. Default is \"**Implemented enhancements:**\"") do |v|
options[:enhancement_prefix] = v
end
opts.on("--issues-label [LABEL]", "Setup custom label for closed-issues section. Default is \"**Closed issues:**\"") do |v|
options[:issue_prefix] = v
end
opts.on("--header-label [LABEL]", "Setup custom header label. Default is \"# Change Log\"") do |v|
options[:header] = v
end
opts.on("--pr-label [LABEL]", "Setup custom label for pull requests section. Default is \"**Merged pull requests:**\"") do |v|
options[:merge_prefix] = v
end
opts.on("--[no-]issues", "Include closed issues in changelog. Default is true") do |v| opts.on("--[no-]issues", "Include closed issues in changelog. Default is true") do |v|
options[:issues] = v options[:issues] = v
end end
@@ -78,21 +98,36 @@ module GitHubChangelogGenerator
opts.on("--[no-]compare-link", "Include compare link (Full Changelog) between older version and newer version. Default is true") do |v| opts.on("--[no-]compare-link", "Include compare link (Full Changelog) between older version and newer version. Default is true") do |v|
options[:compare_link] = v options[:compare_link] = v
end end
opts.on("--include-labels x,y,z", Array, 'Only issues with the specified labels will be included in the changelog. Default is \'bug,enhancement\'') do |list| opts.on("--include-labels x,y,z", Array, "Only issues with the specified labels will be included in the changelog.") do |list|
options[:include_labels] = list options[:include_labels] = list
end end
opts.on("--exclude-labels x,y,z", Array, 'Issues with the specified labels will be always excluded from changelog. Default is \'duplicate,question,invalid,wontfix\'') do |list| opts.on("--exclude-labels x,y,z", Array, 'Issues with the specified labels will be always excluded from changelog. Default is \'duplicate,question,invalid,wontfix\'') do |list|
options[:exclude_labels] = list options[:exclude_labels] = list
end end
opts.on("--bug-labels x,y,z", Array, 'Issues with the specified labels will be always added to "Fixed bugs" section. Default is \'bug,Bug\'') do |list|
options[:bug_labels] = list
end
opts.on("--enhancement-labels x,y,z", Array, 'Issues with the specified labels will be always added to "Implemented enhancements" section. Default is \'enhancement,Enhancement\'') do |list|
options[:enhancement_labels] = list
end
opts.on("--between-tags x,y,z", Array, "Change log will be filled only between specified tags") do |list| opts.on("--between-tags x,y,z", Array, "Change log will be filled only between specified tags") do |list|
options[:between_tags] = list options[:between_tags] = list
end end
opts.on("--exclude-tags x,y,z", Array, "Change log will be exclude specified tags") do |list| opts.on("--exclude-tags x,y,z", Array, "Change log will exclude specified tags") do |list|
options[:exclude_tags] = list options[:exclude_tags] = list
end end
opts.on("--since-tag x", "Change log will start after specified tag") do |v|
options[:since_tag] = v
end
opts.on("--due-tag x", "Change log will end before specified tag") do |v|
options[:due_tag] = v
end
opts.on("--max-issues [NUMBER]", Integer, "Max number of issues to fetch from GitHub. Default is unlimited") do |max| opts.on("--max-issues [NUMBER]", Integer, "Max number of issues to fetch from GitHub. Default is unlimited") do |max|
options[:max_issues] = max options[:max_issues] = max
end end
opts.on("--release-url [URL]", "The URL to point to for release links, in printf format (with the tag as variable).") do |url|
options[:release_url] = url
end
opts.on("--github-site [URL]", "The Enterprise Github site on which your project is hosted.") do |last| opts.on("--github-site [URL]", "The Enterprise Github site on which your project is hosted.") do |last|
options[:github_site] = last options[:github_site] = last
end end
@@ -127,6 +162,7 @@ module GitHubChangelogGenerator
tag2: nil, tag2: nil,
date_format: "%Y-%m-%d", date_format: "%Y-%m-%d",
output: "CHANGELOG.md", output: "CHANGELOG.md",
base: "HISTORY.md",
issues: true, issues: true,
add_issues_wo_labels: true, add_issues_wo_labels: true,
add_pr_wo_labels: true, add_pr_wo_labels: true,
@@ -136,11 +172,13 @@ module GitHubChangelogGenerator
unreleased: true, unreleased: true,
unreleased_label: "Unreleased", unreleased_label: "Unreleased",
compare_link: true, compare_link: true,
include_labels: %w(bug enhancement), enhancement_labels: %w(enhancement Enhancement),
exclude_labels: %w(duplicate question invalid wontfix), bug_labels: %w(bug Bug),
exclude_labels: %w(duplicate question invalid wontfix Duplicate Question Invalid Wontfix),
max_issues: nil, max_issues: nil,
simple_list: false, simple_list: false,
verbose: true, verbose: true,
header: "# Change Log",
merge_prefix: "**Merged pull requests:**", merge_prefix: "**Merged pull requests:**",
issue_prefix: "**Closed issues:**", issue_prefix: "**Closed issues:**",
bug_prefix: "**Fixed bugs:**", bug_prefix: "**Fixed bugs:**",
@@ -152,8 +190,8 @@ module GitHubChangelogGenerator
end end
# Detects user and project from git # Detects user and project from git
def self.detect_user_and_project(options) def self.detect_user_and_project(options, arg0 = nil, arg1 = nil)
options[:user], options[:project] = user_project_from_option(ARGV[0], ARGV[1], options[:github_site]) options[:user], options[:project] = user_project_from_option(arg0, arg1, options[:github_site])
if !options[:user] || !options[:project] if !options[:user] || !options[:project]
if ENV["RUBYLIB"] =~ /ruby-debug-ide/ if ENV["RUBYLIB"] =~ /ruby-debug-ide/
options[:user] = "skywinder" options[:user] = "skywinder"

View File

@@ -0,0 +1,68 @@
require "rake"
require "rake/tasklib"
require "github_changelog_generator"
module GitHubChangelogGenerator
class RakeTask < ::Rake::TaskLib
include ::Rake::DSL if defined?(::Rake::DSL)
OPTIONS = %w( user project token date_format output
bug_prefix enhancement_prefix issue_prefix
header merge_prefix issues
add_issues_wo_labels add_pr_wo_labels
pulls filter_issues_by_milestone author
unreleased_only unreleased unreleased_label
compare_link include_labels exclude_labels
bug_labels enhancement_labels
between_tags exclude_tags since_tag max_issues
github_site github_endpoint simple_list
future_release verbose release_url )
OPTIONS.each do |o|
attr_accessor o.to_sym
end
# Public: Initialise a new GitHubChangelogGenerator::RakeTask.
#
# Example
#
# GitHubChangelogGenerator::RakeTask.new
def initialize(*args, &task_block)
@name = args.shift || :changelog
define(args, &task_block)
end
def define(args, &task_block)
desc "Generate a Change log from GitHub"
task_block.call(*[self, args].slice(0, task_block.arity)) if task_block
# clear any (auto-)pre-existing task
Rake::Task[@name].clear if Rake::Task.task_defined?(@name)
task @name do
# mimick parse_options
options = Parser.get_default_options
if options[:user].nil? || options[:project].nil?
Parser.detect_user_and_project(options)
end
OPTIONS.each do |o|
v = instance_variable_get("@#{o}")
options[o.to_sym] = v if v
end
generator = Generator.new options
log = generator.compound_changelog
output_filename = "#{options[:output]}"
File.open(output_filename, "w") { |file| file.write(log) }
puts "Done!"
puts "Generated log placed in #{Dir.pwd}/#{output_filename}"
end
end
end
end

View File

@@ -1,3 +1,3 @@
module GitHubChangelogGenerator module GitHubChangelogGenerator
VERSION = "1.5.0" VERSION = "1.8.0"
end end

View File

@@ -19,6 +19,10 @@ require "codeclimate-test-reporter"
require "simplecov" require "simplecov"
require "coveralls" require "coveralls"
# This module is only used to check the environment is currently a testing env
module SpecHelper
end
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
Coveralls::SimpleCov::Formatter, Coveralls::SimpleCov::Formatter,
SimpleCov::Formatter::HTMLFormatter, SimpleCov::Formatter::HTMLFormatter,

View File

@@ -52,7 +52,7 @@ describe GitHubChangelogGenerator::Fetcher do
@fetcher = GitHubChangelogGenerator::Fetcher.new(options) @fetcher = GitHubChangelogGenerator::Fetcher.new(options)
end end
it "should raise Unauthorized error" do it "should raise Unauthorized error" do
expect { @fetcher.github_fetch_tags [] }.to raise_error Github::Error::Unauthorized expect { @fetcher.github_fetch_tags }.to raise_error Github::Error::Unauthorized
end end
end end
end end

View File

@@ -1,3 +1,18 @@
def tag_mash_with_name(tag)
mash_tag = Hashie::Mash.new
mash_tag.name = tag
mash_tag
end
def tags_mash_from_strings(tags_strings)
mash_array = []
tags_strings.each do |tag|
mash_tag = tag_mash_with_name(tag)
mash_array << mash_tag
end
mash_array
end
describe GitHubChangelogGenerator::Generator do describe GitHubChangelogGenerator::Generator do
describe "#filter_between_tags" do describe "#filter_between_tags" do
context "when between_tags nil" do context "when between_tags nil" do
@@ -6,20 +21,20 @@ describe GitHubChangelogGenerator::Generator do
end end
subject do subject do
@generator.get_filtered_tags(%w(1 2 3)) @generator.get_filtered_tags(tags_mash_from_strings(%w(1 2 3)))
end end
it { is_expected.to be_a(Array) } it { is_expected.to be_a(Array) }
it { is_expected.to match_array(%w(1 2 3)) } it { is_expected.to match_array(tags_mash_from_strings(%w(1 2 3))) }
end end
context "when between_tags same as input array" do context "when between_tags same as input array" do
before do before do
@generator = GitHubChangelogGenerator::Generator.new(between_tags: %w(1 2 3)) @generator = GitHubChangelogGenerator::Generator.new(between_tags: %w(1 2 3))
end end
subject do subject do
@generator.get_filtered_tags(%w(1 2 3)) @generator.get_filtered_tags(tags_mash_from_strings(%w(1 2 3)))
end end
it { is_expected.to be_a(Array) } it { is_expected.to be_a(Array) }
it { is_expected.to match_array(%w(1 2 3)) } it { is_expected.to match_array(tags_mash_from_strings(%w(1 2 3))) }
end end
context "when between_tags filled with correct values" do context "when between_tags filled with correct values" do
@@ -27,10 +42,10 @@ describe GitHubChangelogGenerator::Generator do
@generator = GitHubChangelogGenerator::Generator.new(between_tags: %w(1 2)) @generator = GitHubChangelogGenerator::Generator.new(between_tags: %w(1 2))
end end
subject do subject do
@generator.get_filtered_tags(%w(1 2 3)) @generator.get_filtered_tags(tags_mash_from_strings(%w(1 2 3)))
end end
it { is_expected.to be_a(Array) } it { is_expected.to be_a(Array) }
it { is_expected.to match_array(%w(1 2)) } it { is_expected.to match_array(tags_mash_from_strings(%w(1 2))) }
end end
context "when between_tags filled with invalid values" do context "when between_tags filled with invalid values" do
@@ -39,31 +54,166 @@ describe GitHubChangelogGenerator::Generator do
end end
subject do subject do
@generator.get_filtered_tags(%w(1 2 3)) @generator.get_filtered_tags(tags_mash_from_strings(%w(1 2 3)))
end end
it { is_expected.to be_a(Array) } it { is_expected.to be_a(Array) }
it { is_expected.to match_array(%w(1)) } it { is_expected.to match_array(tags_mash_from_strings(%w(1))) }
end end
end end
describe "#get_filtered_tags" do describe "#get_filtered_tags" do
subject { generator.get_filtered_tags(%w(1 2 3 4 5)) } subject do
# before { generator.get_filtered_tags(%w(1 2 3 4 5)) } generator.get_filtered_tags(tags_mash_from_strings(%w(1 2 3 4 5)))
end
context "with excluded and between tags" do context "with excluded and between tags" do
let(:generator) { GitHubChangelogGenerator::Generator.new(between_tags: %w(1 2 3), exclude_tags: %w(2)) } let(:generator) { GitHubChangelogGenerator::Generator.new(between_tags: %w(1 2 3), exclude_tags: %w(2)) }
it { is_expected.to be_a Array } it { is_expected.to be_a Array }
it { is_expected.to match_array(%w(1 3)) } it { is_expected.to match_array(tags_mash_from_strings(%w(1 3))) }
end end
end end
describe "#filter_excluded_tags" do describe "#filter_excluded_tags" do
subject { generator.filter_excluded_tags(%w(1 2 3)) } subject { generator.filter_excluded_tags(tags_mash_from_strings(%w(1 2 3))) }
context "with valid excluded tags" do context "with valid excluded tags" do
let(:generator) { GitHubChangelogGenerator::Generator.new(exclude_tags: %w(3)) } let(:generator) { GitHubChangelogGenerator::Generator.new(exclude_tags: %w(3)) }
it { is_expected.to be_a Array } it { is_expected.to be_a Array }
it { is_expected.to match_array(%w(1 2)) } it { is_expected.to match_array(tags_mash_from_strings(%w(1 2))) }
end
context "with invalid excluded tags" do
let(:generator) { GitHubChangelogGenerator::Generator.new(exclude_tags: %w(invalid tags)) }
it { is_expected.to be_a Array }
it { is_expected.to match_array(tags_mash_from_strings(%w(1 2 3))) }
end
end
describe "#filter_since_tag" do
context "with filled array" do
subject { generator.filter_since_tag(tags_mash_from_strings(%w(1 2 3))) }
context "with valid since tag" do
let(:generator) { GitHubChangelogGenerator::Generator.new(since_tag: "2") }
it { is_expected.to be_a Array }
it { is_expected.to match_array(tags_mash_from_strings(%w(1))) }
end
context "with invalid since tag" do
let(:generator) { GitHubChangelogGenerator::Generator.new(since_tag: "Invalid tag") }
it { is_expected.to be_a Array }
it { is_expected.to match_array(tags_mash_from_strings(%w(1 2 3))) }
end
end
context "with empty array" do
subject { generator.filter_since_tag(tags_mash_from_strings(%w())) }
context "with valid since tag" do
let(:generator) { GitHubChangelogGenerator::Generator.new(since_tag: "2") }
it { is_expected.to be_a Array }
it { is_expected.to match_array(tags_mash_from_strings(%w())) }
end
context "with invalid since tag" do
let(:generator) { GitHubChangelogGenerator::Generator.new(since_tag: "Invalid tag") }
it { is_expected.to be_a Array }
it { is_expected.to match_array(tags_mash_from_strings(%w())) }
end
end
end
describe "#filter_due_tag" do
context "with filled array" do
subject { generator.filter_due_tag(tags_mash_from_strings(%w(1 2 3))) }
context "with valid due tag" do
let(:generator) { GitHubChangelogGenerator::Generator.new(due_tag: "2") }
it { is_expected.to be_a Array }
it { is_expected.to match_array(tags_mash_from_strings(%w(3))) }
end
context "with invalid due tag" do
let(:generator) { GitHubChangelogGenerator::Generator.new(due_tag: "Invalid tag") }
it { is_expected.to be_a Array }
it { is_expected.to match_array(tags_mash_from_strings(%w(1 2 3))) }
end
end
context "with empty array" do
subject { generator.filter_due_tag(tags_mash_from_strings(%w())) }
context "with valid due tag" do
let(:generator) { GitHubChangelogGenerator::Generator.new(due_tag: "2") }
it { is_expected.to be_a Array }
it { is_expected.to match_array(tags_mash_from_strings(%w())) }
end
context "with invalid due tag" do
let(:generator) { GitHubChangelogGenerator::Generator.new(due_tag: "Invalid tag") }
it { is_expected.to be_a Array }
it { is_expected.to match_array(tags_mash_from_strings(%w())) }
end
end
end
describe "#get_time_of_tag" do
current_time = Time.now
before(:all) { @generator = GitHubChangelogGenerator::Generator.new }
context "run with nil parameter" do
it "should raise ChangelogGeneratorError" do
expect { @generator.get_time_of_tag nil }.to raise_error(GitHubChangelogGenerator::ChangelogGeneratorError)
end
end
context "fetch already filled tag" do
before { @generator.instance_variable_set :@tag_times_hash, "valid_tag" => current_time }
subject { @generator.get_time_of_tag tag_mash_with_name("valid_tag") }
it { is_expected.to be_a_kind_of(Time) }
it { is_expected.to eq(current_time) }
end
context "fetch not filled tag" do
before do
mock = double("fake fetcher")
allow(mock).to receive_messages(fetch_date_of_tag: current_time)
@generator.instance_variable_set :@fetcher, mock
end
subject do
of_tag = @generator.get_time_of_tag tag_mash_with_name("valid_tag")
of_tag
end
it { is_expected.to be_a_kind_of(Time) }
it { is_expected.to eq(current_time) }
end
end
describe "#sort_tags_by_date" do
time1 = Time.now
time2 = Time.now
time3 = Time.now
before(:all) do
@generator = GitHubChangelogGenerator::Generator.new
end
context "sort unsorted tags" do
tags = tags_mash_from_strings %w(valid_tag1 valid_tag2 valid_tag3)
before do
@generator.instance_variable_set :@tag_times_hash, "valid_tag1" => time1, "valid_tag2" => time2, "valid_tag3" => time3
end
subject do
@generator.sort_tags_by_date tags
end
it { is_expected.to be_a_kind_of(Array) }
it { is_expected.to match_array(tags.reverse!) }
end
context "sort sorted tags" do
tags = tags_mash_from_strings %w(valid_tag3 valid_tag2 valid_tag1)
before do
@generator.instance_variable_set :@tag_times_hash, "valid_tag1" => time1, "valid_tag2" => time2, "valid_tag3" => time3
end
subject do
@generator.sort_tags_by_date tags
end
it { is_expected.to be_a_kind_of(Array) }
it { is_expected.to match_array(tags) }
end end
end end
end end

View File

@@ -1,21 +1,21 @@
describe GitHubChangelogGenerator::Parser do describe GitHubChangelogGenerator::Parser do
describe ".user_project_from_remote" do describe ".user_project_from_remote" do
context "when remote is 1" do context "when remote is type 1" do
subject { GitHubChangelogGenerator::Parser.user_project_from_remote("origin https://github.com/skywinder/ActionSheetPicker-3.0 (fetch)") } subject { GitHubChangelogGenerator::Parser.user_project_from_remote("origin https://github.com/skywinder/ActionSheetPicker-3.0 (fetch)") }
it { is_expected.to be_a(Array) } it { is_expected.to be_a(Array) }
it { is_expected.to match_array(["skywinder", "ActionSheetPicker-3.0"]) } it { is_expected.to match_array(["skywinder", "ActionSheetPicker-3.0"]) }
end end
context "when remote is 2" do context "when remote is type 2" do
subject { GitHubChangelogGenerator::Parser.user_project_from_remote("https://github.com/skywinder/ActionSheetPicker-3.0") } subject { GitHubChangelogGenerator::Parser.user_project_from_remote("https://github.com/skywinder/ActionSheetPicker-3.0") }
it { is_expected.to be_a(Array) } it { is_expected.to be_a(Array) }
it { is_expected.to match_array(["skywinder", "ActionSheetPicker-3.0"]) } it { is_expected.to match_array(["skywinder", "ActionSheetPicker-3.0"]) }
end end
context "when remote is 3" do context "when remote is type 3" do
subject { GitHubChangelogGenerator::Parser.user_project_from_remote("https://github.com/skywinder/ActionSheetPicker-3.0") } subject { GitHubChangelogGenerator::Parser.user_project_from_remote("https://github.com/skywinder/ActionSheetPicker-3.0") }
it { is_expected.to be_a(Array) } it { is_expected.to be_a(Array) }
it { is_expected.to match_array(["skywinder", "ActionSheetPicker-3.0"]) } it { is_expected.to match_array(["skywinder", "ActionSheetPicker-3.0"]) }
end end
context "when remote is 4" do context "when remote is type 4" do
subject { GitHubChangelogGenerator::Parser.user_project_from_remote("origin git@github.com:skywinder/ActionSheetPicker-3.0.git (fetch)") } subject { GitHubChangelogGenerator::Parser.user_project_from_remote("origin git@github.com:skywinder/ActionSheetPicker-3.0.git (fetch)") }
it { is_expected.to be_a(Array) } it { is_expected.to be_a(Array) }
it { is_expected.to match_array(["skywinder", "ActionSheetPicker-3.0"]) } it { is_expected.to match_array(["skywinder", "ActionSheetPicker-3.0"]) }
@@ -27,9 +27,9 @@ describe GitHubChangelogGenerator::Parser do
end end
end end
describe ".user_project_from_option" do describe ".user_project_from_option" do
# context "when option is invalid" do context "when option is invalid" do
# it("should exit") { expect { GitHubChangelogGenerator::Parser.user_project_from_option("blah", nil) }.to raise_error(SystemExit) } it("should exit") { expect { GitHubChangelogGenerator::Parser.user_project_from_option("blah", nil) }.to raise_error(SystemExit) }
# end end
context "when option is valid" do context "when option is valid" do
subject { GitHubChangelogGenerator::Parser.user_project_from_option("skywinder/ActionSheetPicker-3.0", nil) } subject { GitHubChangelogGenerator::Parser.user_project_from_option("skywinder/ActionSheetPicker-3.0", nil) }