Compare commits
41 Commits
v1.14.2
...
olleolleol
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0c96db9490 | ||
|
|
1c8a2d29ea | ||
|
|
fe0fd94ea3 | ||
|
|
3fc0012de2 | ||
|
|
de525fb1e8 | ||
|
|
cacd6dc3c8 | ||
|
|
db1ffdd59b | ||
|
|
0189c2d736 | ||
|
|
559defcb55 | ||
|
|
0fc6da1a75 | ||
|
|
4b50b5b257 | ||
|
|
f98cc8f292 | ||
|
|
8056600180 | ||
|
|
6d45d90a5f | ||
|
|
3df84403c4 | ||
|
|
1763f9c8ea | ||
|
|
180b4cb6c9 | ||
|
|
b82aa64eee | ||
|
|
cb6286fb83 | ||
|
|
7dcf617d61 | ||
|
|
e89b03fe48 | ||
|
|
9ff27b690f | ||
|
|
bcf57dbe0e | ||
|
|
4cfb1e4a5f | ||
|
|
b81f8a4169 | ||
|
|
3179f29a7c | ||
|
|
aee2f43235 | ||
|
|
63b3de1281 | ||
|
|
0517674f04 | ||
|
|
53b0684e67 | ||
|
|
ca5d6d9675 | ||
|
|
3cb3584bb9 | ||
|
|
4fb674b68e | ||
|
|
e494fc004e | ||
|
|
4ecb21c0b0 | ||
|
|
3cf2802d9a | ||
|
|
507b89c665 | ||
|
|
cd14a86f84 | ||
|
|
5d7098282d | ||
|
|
0751082526 | ||
|
|
baa4e3e659 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -9,4 +9,3 @@ doc
|
|||||||
.yardoc
|
.yardoc
|
||||||
Gemfile.lock
|
Gemfile.lock
|
||||||
gemfiles/Gemfile.2_4_0.lock
|
gemfiles/Gemfile.2_4_0.lock
|
||||||
gemfiles/Gemfile.jruby-9.1.5.0.lock
|
|
||||||
|
|||||||
@@ -1,11 +1,20 @@
|
|||||||
# This configuration was generated by
|
# This configuration was generated by
|
||||||
# `rubocop --auto-gen-config`
|
# `rubocop --auto-gen-config`
|
||||||
# on 2016-09-30 23:56:15 +0200 using RuboCop version 0.43.0.
|
# on 2016-02-23 17:18:27 +0200 using RuboCop version 0.37.2.
|
||||||
# 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: 1
|
||||||
|
Lint/ImplicitStringConcatenation:
|
||||||
|
Exclude:
|
||||||
|
- 'lib/github_changelog_generator/parser.rb'
|
||||||
|
|
||||||
|
# Offense count: 14
|
||||||
|
Metrics/AbcSize:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
# Offense count: 1
|
# Offense count: 1
|
||||||
Metrics/CyclomaticComplexity:
|
Metrics/CyclomaticComplexity:
|
||||||
Max: 7
|
Max: 7
|
||||||
@@ -13,3 +22,30 @@ Metrics/CyclomaticComplexity:
|
|||||||
# Offense count: 2
|
# Offense count: 2
|
||||||
Metrics/PerceivedComplexity:
|
Metrics/PerceivedComplexity:
|
||||||
Max: 8
|
Max: 8
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
Style/AccessorMethodName:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 10
|
||||||
|
Style/Documentation:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Configuration parameters: MinBodyLength.
|
||||||
|
Style/GuardClause:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 2
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, MinBodyLength, SupportedStyles.
|
||||||
|
# SupportedStyles: skip_modifier_ifs, always
|
||||||
|
Style/Next:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 3
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SupportedStyles, AllowInnerSlashes.
|
||||||
|
# SupportedStyles: slashes, percent_r, mixed
|
||||||
|
Style/RegexpLiteral:
|
||||||
|
Enabled: false
|
||||||
|
|||||||
@@ -17,13 +17,8 @@ matrix:
|
|||||||
gemfile: gemfiles/Gemfile.2_1
|
gemfile: gemfiles/Gemfile.2_1
|
||||||
- rvm: 2.3.1
|
- rvm: 2.3.1
|
||||||
gemfile: gemfiles/Gemfile.2_3_1
|
gemfile: gemfiles/Gemfile.2_3_1
|
||||||
- rvm: 2.4.0-preview3
|
- rvm: 2.4.0-preview2
|
||||||
gemfile: gemfiles/Gemfile.2_4_0
|
gemfile: gemfiles/Gemfile.2_4_0
|
||||||
- rvm: jruby-9.1.6.0
|
|
||||||
jdk: oraclejdk8
|
|
||||||
gemfile: gemfiles/Gemfile.jruby-9.1
|
|
||||||
env:
|
|
||||||
- JRUBY_OPTS=--debug
|
|
||||||
|
|
||||||
notifications:
|
notifications:
|
||||||
email:
|
email:
|
||||||
|
|||||||
65
CHANGELOG.md
65
CHANGELOG.md
@@ -1,70 +1,5 @@
|
|||||||
# Change Log
|
# Change Log
|
||||||
|
|
||||||
## [v1.14.0](https://github.com/skywinder/github-changelog-generator/tree/v1.14.0) (2016-11-05)
|
|
||||||
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.13.2...v1.14.0)
|
|
||||||
|
|
||||||
**Implemented enhancements:**
|
|
||||||
|
|
||||||
- On OctoKit::Forbidden error: retry with exponential backoff [\#434](https://github.com/skywinder/github-changelog-generator/pull/434) ([awaage](https://github.com/awaage))
|
|
||||||
- Use octokit, carrying awaage commits [\#422](https://github.com/skywinder/github-changelog-generator/pull/422) ([olleolleolle](https://github.com/olleolleolle))
|
|
||||||
- Add option to show selected labels in the issue line [\#418](https://github.com/skywinder/github-changelog-generator/pull/418) ([aih](https://github.com/aih))
|
|
||||||
|
|
||||||
**Fixed bugs:**
|
|
||||||
|
|
||||||
- unreleased and unreleased-label [\#374](https://github.com/skywinder/github-changelog-generator/issues/374)
|
|
||||||
- Problems installing 1.11.7 on Windows when git absent [\#349](https://github.com/skywinder/github-changelog-generator/issues/349)
|
|
||||||
|
|
||||||
**Closed issues:**
|
|
||||||
|
|
||||||
- broken issue-line-labels in log [\#442](https://github.com/skywinder/github-changelog-generator/issues/442)
|
|
||||||
- Broken multi hyphen options in param file [\#440](https://github.com/skywinder/github-changelog-generator/issues/440)
|
|
||||||
- Install error on Mac: "rack requires Ruby version \>= 2.2.2" [\#425](https://github.com/skywinder/github-changelog-generator/issues/425)
|
|
||||||
- Changelog includes issues going back months too far [\#394](https://github.com/skywinder/github-changelog-generator/issues/394)
|
|
||||||
|
|
||||||
**Merged pull requests:**
|
|
||||||
|
|
||||||
- Fixed issue \#442 - broken issue-line-labels in log. [\#443](https://github.com/skywinder/github-changelog-generator/pull/443) ([thorsteneckel](https://github.com/thorsteneckel))
|
|
||||||
- Fixed issue \#440 - broken multi hyphen options in param file. [\#441](https://github.com/skywinder/github-changelog-generator/pull/441) ([thorsteneckel](https://github.com/thorsteneckel))
|
|
||||||
- Option --unreleased-label explained [\#439](https://github.com/skywinder/github-changelog-generator/pull/439) ([olleolleolle](https://github.com/olleolleolle))
|
|
||||||
- Fixed issue \#304 - entries of previous tags are included. [\#438](https://github.com/skywinder/github-changelog-generator/pull/438) ([thorsteneckel](https://github.com/thorsteneckel))
|
|
||||||
- man page: Add undescribed options [\#437](https://github.com/skywinder/github-changelog-generator/pull/437) ([olleolleolle](https://github.com/olleolleolle))
|
|
||||||
- On GitHub MAX\_THREAD\_NUMBER is 25 [\#433](https://github.com/skywinder/github-changelog-generator/pull/433) ([olleolleolle](https://github.com/olleolleolle))
|
|
||||||
- OctoFetcher, Options: Refactoring [\#432](https://github.com/skywinder/github-changelog-generator/pull/432) ([olleolleolle](https://github.com/olleolleolle))
|
|
||||||
- Fix typo in Readme [\#431](https://github.com/skywinder/github-changelog-generator/pull/431) ([rmtheis](https://github.com/rmtheis))
|
|
||||||
- Fix: Turn Sawyer method into String-keyed hash access [\#429](https://github.com/skywinder/github-changelog-generator/pull/429) ([olleolleolle](https://github.com/olleolleolle))
|
|
||||||
- Spec: Test a url helper function [\#428](https://github.com/skywinder/github-changelog-generator/pull/428) ([olleolleolle](https://github.com/olleolleolle))
|
|
||||||
- Rubocop TODO file regenerated [\#427](https://github.com/skywinder/github-changelog-generator/pull/427) ([olleolleolle](https://github.com/olleolleolle))
|
|
||||||
- Drop a stray Markdown file [\#426](https://github.com/skywinder/github-changelog-generator/pull/426) ([olleolleolle](https://github.com/olleolleolle))
|
|
||||||
- Travis: Add JRuby 9.1.5.0 to matrix [\#424](https://github.com/skywinder/github-changelog-generator/pull/424) ([olleolleolle](https://github.com/olleolleolle))
|
|
||||||
|
|
||||||
## [1.13.2](https://github.com/skywinder/github-changelog-generator/tree/1.13.2) (2016-09-29)
|
|
||||||
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/v1.13.2...1.13.2)
|
|
||||||
|
|
||||||
## [v1.13.2](https://github.com/skywinder/github-changelog-generator/tree/v1.13.2) (2016-09-29)
|
|
||||||
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.13.1...v1.13.2)
|
|
||||||
|
|
||||||
**Implemented enhancements:**
|
|
||||||
|
|
||||||
- Replace GPL'd colorize gem with MIT-licensed rainbow [\#408](https://github.com/skywinder/github-changelog-generator/pull/408) ([jamesc](https://github.com/jamesc))
|
|
||||||
- Limit number of simultaneous requests to 25 [\#407](https://github.com/skywinder/github-changelog-generator/pull/407) ([jkeiser](https://github.com/jkeiser))
|
|
||||||
- Report actual github error when rate limit exceeded [\#405](https://github.com/skywinder/github-changelog-generator/pull/405) ([jkeiser](https://github.com/jkeiser))
|
|
||||||
- Make error messages print on error [\#404](https://github.com/skywinder/github-changelog-generator/pull/404) ([jkeiser](https://github.com/jkeiser))
|
|
||||||
|
|
||||||
**Fixed bugs:**
|
|
||||||
|
|
||||||
- Fetching events for issues and PRs triggers abuse rate limits [\#406](https://github.com/skywinder/github-changelog-generator/issues/406)
|
|
||||||
|
|
||||||
**Merged pull requests:**
|
|
||||||
|
|
||||||
- Add bump gem to development deps [\#423](https://github.com/skywinder/github-changelog-generator/pull/423) ([olleolleolle](https://github.com/olleolleolle))
|
|
||||||
- Skip logger helper in coverage [\#421](https://github.com/skywinder/github-changelog-generator/pull/421) ([olleolleolle](https://github.com/olleolleolle))
|
|
||||||
- Travis: Test on 2.4.0-preview2 [\#420](https://github.com/skywinder/github-changelog-generator/pull/420) ([olleolleolle](https://github.com/olleolleolle))
|
|
||||||
- Travis: Collecting the config, gemspec: extract development deps to Gemfile [\#417](https://github.com/skywinder/github-changelog-generator/pull/417) ([olleolleolle](https://github.com/olleolleolle))
|
|
||||||
- Update README.md [\#415](https://github.com/skywinder/github-changelog-generator/pull/415) ([dijonkitchen](https://github.com/dijonkitchen))
|
|
||||||
- README: Add Gitter badge [\#413](https://github.com/skywinder/github-changelog-generator/pull/413) ([olleolleolle](https://github.com/olleolleolle))
|
|
||||||
- CircleCI hook for Gitter notification [\#411](https://github.com/skywinder/github-changelog-generator/pull/411) ([olleolleolle](https://github.com/olleolleolle))
|
|
||||||
- Spec: avoid Ruby warning about already-defined constant [\#409](https://github.com/skywinder/github-changelog-generator/pull/409) ([olleolleolle](https://github.com/olleolleolle))
|
|
||||||
|
|
||||||
## [1.13.1](https://github.com/skywinder/github-changelog-generator/tree/1.13.1) (2016-07-22)
|
## [1.13.1](https://github.com/skywinder/github-changelog-generator/tree/1.13.1) (2016-07-22)
|
||||||
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.13.0...1.13.1)
|
[Full Changelog](https://github.com/skywinder/github-changelog-generator/compare/1.13.0...1.13.1)
|
||||||
|
|
||||||
|
|||||||
4
Gemfile
4
Gemfile
@@ -10,10 +10,6 @@ group :development, :test do
|
|||||||
gem "rubocop", ">= 0.43"
|
gem "rubocop", ">= 0.43"
|
||||||
end
|
end
|
||||||
|
|
||||||
group :development do
|
|
||||||
gem "bump"
|
|
||||||
end
|
|
||||||
|
|
||||||
group :test do
|
group :test do
|
||||||
gem "vcr"
|
gem "vcr"
|
||||||
gem "multi_json"
|
gem "multi_json"
|
||||||
|
|||||||
@@ -228,7 +228,7 @@ If you're seeing this warning, please do the following:
|
|||||||
|
|
||||||
- ***My Ruby version is very old, can I use this?***
|
- ***My Ruby version is very old, can I use this?***
|
||||||
|
|
||||||
When your Ruby is old, and you don't want to upgrade, and you want to
|
When your Ruby is old, and you don't want to upgrade, and your want to
|
||||||
control which libraries you use, you can use Bundler.
|
control which libraries you use, you can use Bundler.
|
||||||
|
|
||||||
In a Gemfile, perhaps in a non-deployed `:development` group, add this
|
In a Gemfile, perhaps in a non-deployed `:development` group, add this
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
eval_gemfile File.expand_path('../../Gemfile', __FILE__)
|
|
||||||
gem 'rack', '>= 2'
|
|
||||||
|
|
||||||
@@ -26,9 +26,7 @@ Gem::Specification.new do |spec|
|
|||||||
|
|
||||||
spec.add_runtime_dependency "rake", ">= 10.0"
|
spec.add_runtime_dependency "rake", ">= 10.0"
|
||||||
spec.add_runtime_dependency "rainbow", ">= 2.1"
|
spec.add_runtime_dependency "rainbow", ">= 2.1"
|
||||||
spec.add_runtime_dependency("octokit", ["~> 4.6"])
|
spec.add_runtime_dependency("octokit", ["~> 4.0"])
|
||||||
spec.add_runtime_dependency("faraday-http-cache")
|
spec.add_runtime_dependency("faraday-http-cache")
|
||||||
spec.add_runtime_dependency("activesupport")
|
spec.add_runtime_dependency("activesupport")
|
||||||
spec.add_runtime_dependency("retriable", ["~> 2.1"])
|
|
||||||
spec.add_runtime_dependency("multi_json")
|
|
||||||
end
|
end
|
||||||
|
|||||||
58
lib/CHANGELOG.md
Normal file
58
lib/CHANGELOG.md
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
# Change Log
|
||||||
|
|
||||||
|
## [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)
|
||||||
|
- PR with enhancement label [\#16](https://github.com/skywinder/changelog_test/pull/16) ([skywinder](https://github.com/skywinder))
|
||||||
|
|
||||||
|
**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:**
|
||||||
|
|
||||||
|
- Merged br \(should appear in change log also\) [\#21](https://github.com/skywinder/changelog_test/pull/21) ([skywinder](https://github.com/skywinder))
|
||||||
|
- This a PR with a lot of comments and events [\#17](https://github.com/skywinder/changelog_test/pull/17) ([skywinder](https://github.com/skywinder))
|
||||||
|
- 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)
|
||||||
|
|
||||||
|
**Closed issues:**
|
||||||
|
|
||||||
|
- Test issue, that should appear in 0.0.4 [\#3](https://github.com/skywinder/changelog_test/issues/3)
|
||||||
|
|
||||||
|
**Merged pull requests:**
|
||||||
|
|
||||||
|
- 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)
|
||||||
|
[Full Changelog](https://github.com/skywinder/changelog_test/compare/v0.0.2...v0.0.3)
|
||||||
|
|
||||||
|
**Merged pull requests:**
|
||||||
|
|
||||||
|
- 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)
|
||||||
|
[Full Changelog](https://github.com/skywinder/changelog_test/compare/v0.0.1...v0.0.2)
|
||||||
|
|
||||||
|
**Merged pull requests:**
|
||||||
|
|
||||||
|
- Here is a test hotfix should appear in v.0.0.2 [\#2](https://github.com/skywinder/changelog_test/pull/2) ([skywinder](https://github.com/skywinder))
|
||||||
|
|
||||||
|
## [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)*
|
||||||
@@ -10,12 +10,13 @@ require "multi_json"
|
|||||||
require "benchmark"
|
require "benchmark"
|
||||||
|
|
||||||
require_relative "github_changelog_generator/helper"
|
require_relative "github_changelog_generator/helper"
|
||||||
require_relative "github_changelog_generator/options"
|
|
||||||
require_relative "github_changelog_generator/parser"
|
require_relative "github_changelog_generator/parser"
|
||||||
require_relative "github_changelog_generator/parser_file"
|
require_relative "github_changelog_generator/parser_file"
|
||||||
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"
|
||||||
require_relative "github_changelog_generator/reader"
|
require_relative "github_changelog_generator/reader"
|
||||||
|
require_relative "github_changelog_generator/hash"
|
||||||
|
require_relative "github_changelog_generator/array"
|
||||||
|
|
||||||
# The main module, where placed all classes (now, at least)
|
# The main module, where placed all classes (now, at least)
|
||||||
module GitHubChangelogGenerator
|
module GitHubChangelogGenerator
|
||||||
|
|||||||
14
lib/github_changelog_generator/array.rb
Normal file
14
lib/github_changelog_generator/array.rb
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
class Array
|
||||||
|
def stringify_keys_deep!
|
||||||
|
new_ar = []
|
||||||
|
each do |value|
|
||||||
|
new_value = value
|
||||||
|
if value.is_a?(Hash) || value.is_a?(Array)
|
||||||
|
new_value = value.stringify_keys_deep!
|
||||||
|
end
|
||||||
|
new_ar << new_value
|
||||||
|
end
|
||||||
|
new_ar
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -11,7 +11,7 @@ module GitHubChangelogGenerator
|
|||||||
end
|
end
|
||||||
|
|
||||||
class Generator
|
class Generator
|
||||||
attr_accessor :options, :filtered_tags, :github, :tag_section_mapping, :sorted_tags
|
attr_accessor :options, :filtered_tags, :github, :tag_section_mapping
|
||||||
|
|
||||||
# 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
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
module GitHubChangelogGenerator
|
module GitHubChangelogGenerator
|
||||||
class Generator
|
class Generator
|
||||||
MAX_THREAD_NUMBER = 25
|
MAX_THREAD_NUMBER = 1
|
||||||
|
|
||||||
# Fetch event for issues and pull requests
|
# Fetch event for issues and pull requests
|
||||||
# @return [Array] array of fetched issues
|
# @return [Array] array of fetched issues
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ module GitHubChangelogGenerator
|
|||||||
end
|
end
|
||||||
|
|
||||||
# @param [Array] issues List of issues on sub-section
|
# @param [Array] issues List of issues on sub-section
|
||||||
# @param [String] prefix Name of sub-section
|
# @param [String] prefix Nae of sub-section
|
||||||
# @return [String] Generate ready-to-go sub-section
|
# @return [String] Generate ready-to-go sub-section
|
||||||
def generate_sub_section(issues, prefix)
|
def generate_sub_section(issues, prefix)
|
||||||
log = ""
|
log = ""
|
||||||
@@ -126,9 +126,8 @@ module GitHubChangelogGenerator
|
|||||||
def generate_unreleased_section
|
def generate_unreleased_section
|
||||||
log = ""
|
log = ""
|
||||||
if options[:unreleased]
|
if options[:unreleased]
|
||||||
start_tag = filtered_tags[0] || sorted_tags.last
|
unreleased_log = generate_log_between_tags(filtered_tags[0], nil)
|
||||||
unreleased_log = generate_log_between_tags(start_tag, nil)
|
log += unreleased_log if unreleased_log
|
||||||
log += unreleased_log if unreleased_log
|
|
||||||
end
|
end
|
||||||
log
|
log
|
||||||
end
|
end
|
||||||
@@ -144,25 +143,13 @@ module GitHubChangelogGenerator
|
|||||||
encapsulated_title = encapsulate_string issue["title"]
|
encapsulated_title = encapsulate_string issue["title"]
|
||||||
|
|
||||||
title_with_number = "#{encapsulated_title} [\\##{issue['number']}](#{issue['html_url']})"
|
title_with_number = "#{encapsulated_title} [\\##{issue['number']}](#{issue['html_url']})"
|
||||||
if options[:issue_line_labels].present?
|
|
||||||
title_with_number = "#{title_with_number}#{line_labels_for(issue)}"
|
|
||||||
end
|
|
||||||
issue_line_with_user(title_with_number, issue)
|
issue_line_with_user(title_with_number, issue)
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def line_labels_for(issue)
|
|
||||||
labels = if options[:issue_line_labels] == ["ALL"]
|
|
||||||
issue["labels"]
|
|
||||||
else
|
|
||||||
issue["labels"].select { |label| options[:issue_line_labels].include?(label["name"]) }
|
|
||||||
end
|
|
||||||
labels.map { |label| " \[[#{label['name']}](#{label['url'].sub('api.github.com/repos', 'github.com')})\]" }.join("")
|
|
||||||
end
|
|
||||||
|
|
||||||
def issue_line_with_user(line, issue)
|
def issue_line_with_user(line, issue)
|
||||||
return line if !options[:author] || issue["pull_request"].nil?
|
return line if !options[:author] || issue.pull_request.nil?
|
||||||
|
|
||||||
user = issue["user"]
|
user = issue["user"]
|
||||||
return "#{line} ({Null user})" unless user
|
return "#{line} ({Null user})" unless user
|
||||||
|
|||||||
@@ -72,8 +72,6 @@ module GitHubChangelogGenerator
|
|||||||
# in case if not tags specified - return unchanged array
|
# in case if not tags specified - return unchanged array
|
||||||
return issues if older_tag.nil? && newer_tag.nil?
|
return issues if older_tag.nil? && newer_tag.nil?
|
||||||
|
|
||||||
older_tag = ensure_older_tag(older_tag, newer_tag)
|
|
||||||
|
|
||||||
newer_tag_time = newer_tag && get_time_of_tag(newer_tag)
|
newer_tag_time = newer_tag && get_time_of_tag(newer_tag)
|
||||||
older_tag_time = older_tag && get_time_of_tag(older_tag)
|
older_tag_time = older_tag && get_time_of_tag(older_tag)
|
||||||
|
|
||||||
@@ -94,14 +92,6 @@ module GitHubChangelogGenerator
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def ensure_older_tag(older_tag, newer_tag)
|
|
||||||
return older_tag if older_tag
|
|
||||||
idx = sorted_tags.index { |t| t["name"] == newer_tag["name"] }
|
|
||||||
# skip if we are already at the oldest element
|
|
||||||
return if idx == sorted_tags.size - 1
|
|
||||||
sorted_tags[idx - 1]
|
|
||||||
end
|
|
||||||
|
|
||||||
def tag_older_new_tag?(newer_tag_time, time)
|
def tag_older_new_tag?(newer_tag_time, time)
|
||||||
tag_in_range_new = if newer_tag_time.nil?
|
tag_in_range_new = if newer_tag_time.nil?
|
||||||
true
|
true
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ module GitHubChangelogGenerator
|
|||||||
included_tags = filter_excluded_tags(all_tags)
|
included_tags = filter_excluded_tags(all_tags)
|
||||||
|
|
||||||
fetch_tags_dates(all_tags) # Creates a Hash @tag_times_hash
|
fetch_tags_dates(all_tags) # Creates a Hash @tag_times_hash
|
||||||
@sorted_tags = sort_tags_by_date(included_tags)
|
sorted_tags = sort_tags_by_date(included_tags)
|
||||||
@filtered_tags = get_filtered_tags(included_tags)
|
@filtered_tags = get_filtered_tags(included_tags)
|
||||||
|
|
||||||
@tag_section_mapping = build_tag_section_mapping(@filtered_tags, sorted_tags)
|
@tag_section_mapping = build_tag_section_mapping(@filtered_tags, sorted_tags)
|
||||||
|
|
||||||
|
|||||||
16
lib/github_changelog_generator/hash.rb
Normal file
16
lib/github_changelog_generator/hash.rb
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
class Hash
|
||||||
|
def stringify_keys_deep!
|
||||||
|
new_hash = {}
|
||||||
|
keys.each do |k|
|
||||||
|
ks = k.respond_to?(:to_s) ? k.to_s : k
|
||||||
|
new_hash[ks] = if values_at(k).first.is_a?(Hash) || values_at(k).first.is_a?(Array)
|
||||||
|
values_at(k).first.send(:stringify_keys_deep!)
|
||||||
|
else
|
||||||
|
values_at(k).first
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
new_hash
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
require "retriable"
|
|
||||||
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)
|
||||||
@@ -8,8 +7,7 @@ module GitHubChangelogGenerator
|
|||||||
# fetcher = GitHubChangelogGenerator::OctoFetcher.new(options)
|
# fetcher = GitHubChangelogGenerator::OctoFetcher.new(options)
|
||||||
class OctoFetcher
|
class OctoFetcher
|
||||||
PER_PAGE_NUMBER = 100
|
PER_PAGE_NUMBER = 100
|
||||||
MAX_THREAD_NUMBER = 25
|
MAX_THREAD_NUMBER = 1
|
||||||
MAX_FORBIDDEN_RETRIES = 100
|
|
||||||
CHANGELOG_GITHUB_TOKEN = "CHANGELOG_GITHUB_TOKEN"
|
CHANGELOG_GITHUB_TOKEN = "CHANGELOG_GITHUB_TOKEN"
|
||||||
GH_RATE_LIMIT_EXCEEDED_MSG = "Warning: Can't finish operation: GitHub API rate limit exceeded, change log may be " \
|
GH_RATE_LIMIT_EXCEEDED_MSG = "Warning: Can't finish operation: GitHub API rate limit exceeded, change log may be " \
|
||||||
"missing some issues. You can limit the number of issues fetched using the `--max-issues NUM` argument."
|
"missing some issues. You can limit the number of issues fetched using the `--max-issues NUM` argument."
|
||||||
@@ -81,7 +79,7 @@ module GitHubChangelogGenerator
|
|||||||
last_response = client.last_response
|
last_response = client.last_response
|
||||||
|
|
||||||
if (last_pg = last_response.rels[:last])
|
if (last_pg = last_response.rels[:last])
|
||||||
querystring_as_hash(last_pg.href)["page"].to_i
|
parse_url_for_vars(last_pg.href)["page"].to_i
|
||||||
else
|
else
|
||||||
1
|
1
|
||||||
end
|
end
|
||||||
@@ -103,13 +101,13 @@ module GitHubChangelogGenerator
|
|||||||
print_empty_line
|
print_empty_line
|
||||||
|
|
||||||
if tags.count == 0
|
if tags.count == 0
|
||||||
Helper.log.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'"
|
Make sure, that you push tags to remote repo via 'git push --tags'"
|
||||||
else
|
else
|
||||||
Helper.log.info "Found #{tags.count} tags"
|
Helper.log.info "Found #{tags.count} tags"
|
||||||
end
|
end
|
||||||
# tags are a Sawyer::Resource. Convert to hash
|
# tags are a Sawyer::Resource. Convert to hash
|
||||||
tags = tags.map { |h| stringify_keys_deep(h.to_hash) }
|
tags = tags.map { |h| h.to_hash.stringify_keys_deep! }
|
||||||
tags
|
tags
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -139,7 +137,7 @@ Make sure, that you push tags to remote repo via 'git push --tags'"
|
|||||||
print_empty_line
|
print_empty_line
|
||||||
Helper.log.info "Received issues: #{issues.count}"
|
Helper.log.info "Received issues: #{issues.count}"
|
||||||
|
|
||||||
issues = issues.map { |h| stringify_keys_deep(h.to_hash) }
|
issues = issues.map { |h| h.to_hash.stringify_keys_deep! }
|
||||||
|
|
||||||
# separate arrays of issues and pull requests:
|
# separate arrays of issues and pull requests:
|
||||||
issues.partition do |x|
|
issues.partition do |x|
|
||||||
@@ -170,7 +168,7 @@ Make sure, that you push tags to remote repo via 'git push --tags'"
|
|||||||
print_empty_line
|
print_empty_line
|
||||||
|
|
||||||
Helper.log.info "Pull Request count: #{pull_requests.count}"
|
Helper.log.info "Pull Request count: #{pull_requests.count}"
|
||||||
pull_requests = pull_requests.map { |h| stringify_keys_deep(h.to_hash) }
|
pull_requests = pull_requests.map { |h| h.to_hash.stringify_keys_deep! }
|
||||||
pull_requests
|
pull_requests
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -189,7 +187,7 @@ Make sure, that you push tags to remote repo via 'git push --tags'"
|
|||||||
iterate_pages(@client, "issue_events", issue["number"], {}) do |new_event|
|
iterate_pages(@client, "issue_events", issue["number"], {}) do |new_event|
|
||||||
issue["events"].concat(new_event)
|
issue["events"].concat(new_event)
|
||||||
end
|
end
|
||||||
issue["events"] = issue["events"].map { |h| stringify_keys_deep(h.to_hash) }
|
issue["events"] = issue["events"].map { |h| h.to_hash.stringify_keys_deep! }
|
||||||
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
|
||||||
@@ -211,7 +209,7 @@ Make sure, that you push tags to remote repo via 'git push --tags'"
|
|||||||
# @return [Time] time of specified tag
|
# @return [Time] time of specified tag
|
||||||
def fetch_date_of_tag(tag)
|
def fetch_date_of_tag(tag)
|
||||||
commit_data = check_github_response { @client.commit(user_project, tag["commit"]["sha"]) }
|
commit_data = check_github_response { @client.commit(user_project, tag["commit"]["sha"]) }
|
||||||
commit_data = stringify_keys_deep(commit_data.to_hash)
|
commit_data = commit_data.to_hash.stringify_keys_deep!
|
||||||
|
|
||||||
commit_data["commit"]["committer"]["date"]
|
commit_data["commit"]["committer"]["date"]
|
||||||
end
|
end
|
||||||
@@ -222,118 +220,62 @@ Make sure, that you push tags to remote repo via 'git push --tags'"
|
|||||||
def fetch_commit(event)
|
def fetch_commit(event)
|
||||||
check_github_response do
|
check_github_response do
|
||||||
commit = @client.commit(user_project, event["commit_id"])
|
commit = @client.commit(user_project, event["commit_id"])
|
||||||
commit = stringify_keys_deep(commit.to_hash)
|
commit = commit.to_hash.stringify_keys_deep!
|
||||||
commit
|
commit
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def stringify_keys_deep(indata)
|
|
||||||
case indata
|
|
||||||
when Array
|
|
||||||
indata.map do |value|
|
|
||||||
stringify_keys_deep(value)
|
|
||||||
end
|
|
||||||
when Hash
|
|
||||||
indata.each_with_object({}) do |(k, v), output|
|
|
||||||
output[k.to_s] = stringify_keys_deep(v)
|
|
||||||
end
|
|
||||||
else
|
|
||||||
indata
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
MovedPermanentlyError = Class.new(RuntimeError)
|
|
||||||
|
|
||||||
# Iterates through all pages until there are no more :next pages to follow
|
# Iterates through all pages until there are no more :next pages to follow
|
||||||
# yields the result per page
|
# yields the result per page
|
||||||
#
|
#
|
||||||
# @param [Octokit::Client] client
|
# @param [Octokit::Client] client
|
||||||
# @param [String] method (eg. 'tags')
|
# @param [String] method (eg. 'tags')
|
||||||
#
|
|
||||||
# @yield [Sawyer::Resource] An OctoKit-provided response (which can be empty)
|
|
||||||
#
|
|
||||||
# @return [Integer] total number of pages
|
# @return [Integer] total number of pages
|
||||||
def iterate_pages(client, method, *args)
|
def iterate_pages(client, method, *args)
|
||||||
request_opts = extract_request_args(args)
|
if args.size == 1 && args.first.is_a?(Hash)
|
||||||
args.push(@request_options.merge(request_opts))
|
request_options = args.delete_at(0)
|
||||||
|
elsif args.size > 1 && args.last.is_a?(Hash)
|
||||||
number_of_pages = 1
|
request_options = args.delete_at(args.length - 1)
|
||||||
|
|
||||||
check_github_response { client.send(method, user_project, *args) }
|
|
||||||
last_response = client.last_response
|
|
||||||
if last_response.status == 301
|
|
||||||
raise MovedPermanentlyError, last_response.data[:url]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
yield(last_response.data)
|
args.push(@request_options.merge(request_options))
|
||||||
|
|
||||||
|
pages = 1
|
||||||
|
|
||||||
|
check_github_response do
|
||||||
|
client.send(method, user_project, *args)
|
||||||
|
end
|
||||||
|
last_response = client.last_response
|
||||||
|
|
||||||
|
yield last_response.data
|
||||||
|
|
||||||
until (next_one = last_response.rels[:next]).nil?
|
until (next_one = last_response.rels[:next]).nil?
|
||||||
number_of_pages += 1
|
pages += 1
|
||||||
|
|
||||||
last_response = check_github_response { next_one.get }
|
last_response = check_github_response { next_one.get }
|
||||||
yield(last_response.data)
|
yield last_response.data
|
||||||
end
|
end
|
||||||
|
|
||||||
number_of_pages
|
pages
|
||||||
end
|
|
||||||
|
|
||||||
def extract_request_args(args)
|
|
||||||
if args.size == 1 && args.first.is_a?(Hash)
|
|
||||||
args.delete_at(0)
|
|
||||||
elsif args.size > 1 && args.last.is_a?(Hash)
|
|
||||||
args.delete_at(args.length - 1)
|
|
||||||
else
|
|
||||||
{}
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# This is wrapper with rescue block
|
# 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
|
# @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
|
||||||
Retriable.retriable(retry_options) do
|
begin
|
||||||
yield
|
value = yield
|
||||||
end
|
rescue Octokit::Unauthorized => e
|
||||||
rescue MovedPermanentlyError => e
|
Helper.log.error e.message
|
||||||
Helper.log.error("#{e.class}: #{e.message}")
|
abort "Error: wrong GitHub token"
|
||||||
sys_abort("The repository has moved, please update your configuration")
|
rescue Octokit::Forbidden => e
|
||||||
rescue Octokit::Forbidden => e
|
Helper.log.warn e.message
|
||||||
Helper.log.error("#{e.class}: #{e.message}")
|
|
||||||
sys_abort("Exceeded retry limit")
|
|
||||||
rescue Octokit::Unauthorized => e
|
|
||||||
Helper.log.error("#{e.class}: #{e.message}")
|
|
||||||
sys_abort("Error: wrong GitHub token")
|
|
||||||
end
|
|
||||||
|
|
||||||
# Exponential backoff
|
|
||||||
def retry_options
|
|
||||||
{
|
|
||||||
on: [Octokit::Forbidden],
|
|
||||||
tries: MAX_FORBIDDEN_RETRIES,
|
|
||||||
base_interval: sleep_base_interval,
|
|
||||||
multiplier: 1.0,
|
|
||||||
rand_factor: 0.0,
|
|
||||||
on_retry: retry_callback
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def sleep_base_interval
|
|
||||||
1.0
|
|
||||||
end
|
|
||||||
|
|
||||||
def retry_callback
|
|
||||||
proc do |exception, try, elapsed_time, next_interval|
|
|
||||||
Helper.log.warn("RETRY - #{exception.class}: '#{exception.message}'")
|
|
||||||
Helper.log.warn("#{try} tries in #{elapsed_time} seconds and #{next_interval} seconds until the next try")
|
|
||||||
Helper.log.warn GH_RATE_LIMIT_EXCEEDED_MSG
|
Helper.log.warn GH_RATE_LIMIT_EXCEEDED_MSG
|
||||||
Helper.log.warn @client.rate_limit
|
Helper.log.warn @client.rate_limit
|
||||||
end
|
end
|
||||||
end
|
value
|
||||||
|
|
||||||
def sys_abort(msg)
|
|
||||||
abort(msg)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Print specified line on the same string
|
# Print specified line on the same string
|
||||||
@@ -365,12 +307,16 @@ Make sure, that you push tags to remote repo via 'git push --tags'"
|
|||||||
"#{@options[:user]}/#{@options[:project]}"
|
"#{@options[:user]}/#{@options[:project]}"
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns Hash of all querystring variables in given URI.
|
# Parses a URI and returns a hash of all GET variables
|
||||||
#
|
#
|
||||||
# @param [String] uri eg. https://api.github.com/repositories/43914960/tags?page=37&foo=1
|
# @param [String] uri eg. https://api.github.com/repositories/43914960/tags?page=37&foo=1
|
||||||
# @return [Hash] of all GET variables. eg. { 'page' => 37, 'foo' => 1 }
|
# @return [Hash] of all GET variables. eg. { 'page' => 37, 'foo' => 1 }
|
||||||
def querystring_as_hash(uri)
|
def parse_url_for_vars(uri)
|
||||||
Hash[URI.decode_www_form(URI(uri).query || "")]
|
URI(uri).query.split("&").each_with_object({}) do |get_var, params|
|
||||||
|
k, v = get_var.split("=")
|
||||||
|
params[k] = v
|
||||||
|
params
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,92 +0,0 @@
|
|||||||
# frozen_string_literal: true
|
|
||||||
require "delegate"
|
|
||||||
module GitHubChangelogGenerator
|
|
||||||
class Options < SimpleDelegator
|
|
||||||
UnsupportedOptionError = Class.new(ArgumentError)
|
|
||||||
|
|
||||||
KNOWN_OPTIONS = [
|
|
||||||
:add_issues_wo_labels,
|
|
||||||
:add_pr_wo_labels,
|
|
||||||
:author,
|
|
||||||
:base,
|
|
||||||
:between_tags,
|
|
||||||
:bug_labels,
|
|
||||||
:bug_prefix,
|
|
||||||
:cache_file,
|
|
||||||
:cache_log,
|
|
||||||
:compare_link,
|
|
||||||
:date_format,
|
|
||||||
:due_tag,
|
|
||||||
:enhancement_labels,
|
|
||||||
:enhancement_prefix,
|
|
||||||
:exclude_labels,
|
|
||||||
:exclude_tags,
|
|
||||||
:exclude_tags_regex,
|
|
||||||
:filter_issues_by_milestone,
|
|
||||||
:frontmatter,
|
|
||||||
:future_release,
|
|
||||||
:git_remote,
|
|
||||||
:github_endpoint,
|
|
||||||
:github_site,
|
|
||||||
:header,
|
|
||||||
:http_cache,
|
|
||||||
:include_labels,
|
|
||||||
:issue_prefix,
|
|
||||||
:issue_line_labels,
|
|
||||||
:issues,
|
|
||||||
:max_issues,
|
|
||||||
:merge_prefix,
|
|
||||||
:output,
|
|
||||||
:project,
|
|
||||||
:pulls,
|
|
||||||
:release_branch,
|
|
||||||
:release_url,
|
|
||||||
:simple_list,
|
|
||||||
:since_tag,
|
|
||||||
:token,
|
|
||||||
:unreleased,
|
|
||||||
:unreleased_label,
|
|
||||||
:unreleased_only,
|
|
||||||
:user,
|
|
||||||
:usernames_as_github_logins,
|
|
||||||
:verbose
|
|
||||||
]
|
|
||||||
|
|
||||||
THESE_ARE_DIFFERENT = [
|
|
||||||
:tag1,
|
|
||||||
:tag2
|
|
||||||
]
|
|
||||||
|
|
||||||
def initialize(values)
|
|
||||||
super(values)
|
|
||||||
unsupported_options.any? && raise(UnsupportedOptionError, unsupported_options.inspect)
|
|
||||||
end
|
|
||||||
|
|
||||||
def []=(key, val)
|
|
||||||
supported_option?(key) || raise(UnsupportedOptionError, key.inspect)
|
|
||||||
values[key] = val
|
|
||||||
end
|
|
||||||
|
|
||||||
def to_hash
|
|
||||||
values
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def values
|
|
||||||
__getobj__
|
|
||||||
end
|
|
||||||
|
|
||||||
def unsupported_options
|
|
||||||
values.keys - supported_options
|
|
||||||
end
|
|
||||||
|
|
||||||
def supported_option?(key)
|
|
||||||
supported_options.include?(key)
|
|
||||||
end
|
|
||||||
|
|
||||||
def supported_options
|
|
||||||
KNOWN_OPTIONS + THESE_ARE_DIFFERENT
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -42,7 +42,7 @@ module GitHubChangelogGenerator
|
|||||||
|
|
||||||
# setup parsing options
|
# setup parsing options
|
||||||
def self.setup_parser(options)
|
def self.setup_parser(options)
|
||||||
parser = OptionParser.new do |opts| # rubocop:disable Metrics/BlockLength
|
parser = OptionParser.new do |opts|
|
||||||
opts.banner = "Usage: github_changelog_generator [options]"
|
opts.banner = "Usage: github_changelog_generator [options]"
|
||||||
opts.on("-u", "--user [USER]", "Username of the owner of target GitHub repo") do |last|
|
opts.on("-u", "--user [USER]", "Username of the owner of target GitHub repo") do |last|
|
||||||
options[:user] = last
|
options[:user] = last
|
||||||
@@ -107,7 +107,7 @@ module GitHubChangelogGenerator
|
|||||||
opts.on("--[no-]unreleased", "Add to log unreleased closed issues. Default is true") do |v|
|
opts.on("--[no-]unreleased", "Add to log unreleased closed issues. Default is true") do |v|
|
||||||
options[:unreleased] = v
|
options[:unreleased] = v
|
||||||
end
|
end
|
||||||
opts.on("--unreleased-label [label]", "Setup custom label for unreleased closed issues section. Default is \"**Unreleased:**\"") do |v|
|
opts.on("--unreleased-label [label]", "Add to log unreleased closed issues. Default is true") do |v|
|
||||||
options[:unreleased_label] = v
|
options[:unreleased_label] = v
|
||||||
end
|
end
|
||||||
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|
|
||||||
@@ -125,9 +125,6 @@ module GitHubChangelogGenerator
|
|||||||
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|
|
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
|
options[:enhancement_labels] = list
|
||||||
end
|
end
|
||||||
opts.on("--issue-line-labels x,y,z", Array, 'The specified labels will be shown in brackets next to each matching issue. Use "ALL" to show all labels. Default is [].') do |list|
|
|
||||||
options[:issue_line_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
|
||||||
@@ -190,7 +187,7 @@ module GitHubChangelogGenerator
|
|||||||
|
|
||||||
# @return [Hash] Default options
|
# @return [Hash] Default options
|
||||||
def self.default_options
|
def self.default_options
|
||||||
Options.new(
|
{
|
||||||
tag1: nil,
|
tag1: nil,
|
||||||
tag2: nil,
|
tag2: nil,
|
||||||
date_format: "%Y-%m-%d",
|
date_format: "%Y-%m-%d",
|
||||||
@@ -208,7 +205,6 @@ module GitHubChangelogGenerator
|
|||||||
enhancement_labels: %w(enhancement Enhancement),
|
enhancement_labels: %w(enhancement Enhancement),
|
||||||
bug_labels: %w(bug Bug),
|
bug_labels: %w(bug Bug),
|
||||||
exclude_labels: %w(duplicate question invalid wontfix Duplicate Question Invalid Wontfix),
|
exclude_labels: %w(duplicate question invalid wontfix Duplicate Question Invalid Wontfix),
|
||||||
issue_line_labels: [],
|
|
||||||
max_issues: nil,
|
max_issues: nil,
|
||||||
simple_list: false,
|
simple_list: false,
|
||||||
verbose: true,
|
verbose: true,
|
||||||
@@ -221,7 +217,7 @@ module GitHubChangelogGenerator
|
|||||||
http_cache: true,
|
http_cache: true,
|
||||||
cache_file: "/tmp/github-changelog-http-cache",
|
cache_file: "/tmp/github-changelog-http-cache",
|
||||||
cache_log: "/tmp/github-changelog-logger.log"
|
cache_log: "/tmp/github-changelog-logger.log"
|
||||||
)
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
# If `:user` or `:project` not set in options, try setting them
|
# If `:user` or `:project` not set in options, try setting them
|
||||||
|
|||||||
@@ -62,11 +62,11 @@ module GitHubChangelogGenerator
|
|||||||
# @return [Array<Symbol, String>]
|
# @return [Array<Symbol, String>]
|
||||||
def extract_pair(line)
|
def extract_pair(line)
|
||||||
key, value = line.split("=", 2)
|
key, value = line.split("=", 2)
|
||||||
[key.tr("-", "_").to_sym, value.gsub(/[\n\r]+/, "")]
|
[key.sub("-", "_").to_sym, value.gsub(/[\n\r]+/, "")]
|
||||||
end
|
end
|
||||||
|
|
||||||
KNOWN_ARRAY_KEYS = [:exclude_labels, :include_labels, :bug_labels,
|
KNOWN_ARRAY_KEYS = [:exclude_labels, :include_labels, :bug_labels,
|
||||||
:enhancement_labels, :issue_line_labels, :between_tags, :exclude_tags]
|
:enhancement_labels, :between_tags, :exclude_tags]
|
||||||
KNOWN_INTEGER_KEYS = [:max_issues]
|
KNOWN_INTEGER_KEYS = [:max_issues]
|
||||||
|
|
||||||
def convert_value(value, option_name)
|
def convert_value(value, option_name)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
module GitHubChangelogGenerator
|
module GitHubChangelogGenerator
|
||||||
VERSION = "1.14.2"
|
VERSION = "1.13.1"
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
.\" generated with Ronn/v0.7.3
|
.\" generated with Ronn/v0.7.3
|
||||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||||
.
|
.
|
||||||
.TH "GIT\-GENERATE\-CHANGELOG" "1" "November 2016" "" ""
|
.TH "GIT\-GENERATE\-CHANGELOG" "1" "October 2015" "" ""
|
||||||
.
|
.
|
||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
\fBgit\-generate\-changelog\fR \- Generate changelog from github
|
\fBgit\-generate\-changelog\fR \- Generate changelog from github
|
||||||
@@ -73,12 +73,6 @@ Setup custom label for closed\-issues section\. Default is "\fBClosed issues:\fR
|
|||||||
Setup custom header label\. Default is "# Change Log"
|
Setup custom header label\. Default is "# Change Log"
|
||||||
.
|
.
|
||||||
.P
|
.P
|
||||||
\-\-front\-matter [JSON]
|
|
||||||
.
|
|
||||||
.P
|
|
||||||
Add YAML front matter\. Formatted as JSON because it\'s easier to add on the command line
|
|
||||||
.
|
|
||||||
.P
|
|
||||||
\-\-pr\-label [LABEL]
|
\-\-pr\-label [LABEL]
|
||||||
.
|
.
|
||||||
.P
|
.P
|
||||||
@@ -121,12 +115,6 @@ Use milestone to detect when issue was resolved\. Default is true
|
|||||||
Add author of pull\-request in the end\. Default is true
|
Add author of pull\-request in the end\. Default is true
|
||||||
.
|
.
|
||||||
.P
|
.P
|
||||||
\-\-usernames\-as\-github\-logins
|
|
||||||
.
|
|
||||||
.P
|
|
||||||
Use GitHub tags instead of Markdown links for the author of an issue or pull\-request\.
|
|
||||||
.
|
|
||||||
.P
|
|
||||||
\-\-unreleased\-only
|
\-\-unreleased\-only
|
||||||
.
|
.
|
||||||
.P
|
.P
|
||||||
@@ -142,7 +130,7 @@ Add to log unreleased closed issues\. Default is true
|
|||||||
\-\-unreleased\-label [label]
|
\-\-unreleased\-label [label]
|
||||||
.
|
.
|
||||||
.P
|
.P
|
||||||
Setup custom label for unreleased closed issues section\. Default is "\fBUnreleased:\fR"
|
Add to log unreleased closed issues\. Default is true
|
||||||
.
|
.
|
||||||
.P
|
.P
|
||||||
\-\-[no\-]compare\-link
|
\-\-[no\-]compare\-link
|
||||||
@@ -187,12 +175,6 @@ Change log will be filled only between specified tags
|
|||||||
Change log will exclude specified tags
|
Change log will exclude specified tags
|
||||||
.
|
.
|
||||||
.P
|
.P
|
||||||
\-\-exclude\-tags\-regex [REGEX]
|
|
||||||
.
|
|
||||||
.P
|
|
||||||
Apply a regular expression on tag names so that they can be excluded, for example: \-\-exclude\-tags\-regex "\.*+\ed{1,}"
|
|
||||||
.
|
|
||||||
.P
|
|
||||||
\-\-since\-tag x
|
\-\-since\-tag x
|
||||||
.
|
.
|
||||||
.P
|
.P
|
||||||
@@ -241,30 +223,6 @@ Create simple list from issues and pull requests\. Default is false\.
|
|||||||
Put the unreleased changes in the specified release number\.
|
Put the unreleased changes in the specified release number\.
|
||||||
.
|
.
|
||||||
.P
|
.P
|
||||||
\-\-release\-branch [RELEASE\-BRANCH]
|
|
||||||
.
|
|
||||||
.P
|
|
||||||
Limit pull requests to the release branch, such as master or release
|
|
||||||
.
|
|
||||||
.P
|
|
||||||
\-\-http\-cache
|
|
||||||
.
|
|
||||||
.P
|
|
||||||
Use HTTP Cache to cache Github API requests (useful for large repos) Default is true\.
|
|
||||||
.
|
|
||||||
.P
|
|
||||||
\-\-[no\-]cache\-file [CACHE\-FILE]
|
|
||||||
.
|
|
||||||
.P
|
|
||||||
Filename to use for cache\. Default is /tmp/github\-changelog\-http\-cache
|
|
||||||
.
|
|
||||||
.P
|
|
||||||
\-\-cache\-log [CACHE\-LOG]
|
|
||||||
.
|
|
||||||
.P
|
|
||||||
Filename to use for cache log\. Default is /tmp/github\-changelog\-logger\.log
|
|
||||||
.
|
|
||||||
.P
|
|
||||||
\-\-[no\-]verbose
|
\-\-[no\-]verbose
|
||||||
.
|
.
|
||||||
.P
|
.P
|
||||||
|
|||||||
@@ -1,290 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta http-equiv='content-type' value='text/html;charset=utf8'>
|
|
||||||
<meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>
|
|
||||||
<title>git-generate-changelog(1) - Generate changelog from github</title>
|
|
||||||
<style type='text/css' media='all'>
|
|
||||||
/* style: man */
|
|
||||||
body#manpage {margin:0}
|
|
||||||
.mp {max-width:100ex;padding:0 9ex 1ex 4ex}
|
|
||||||
.mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}
|
|
||||||
.mp h2 {margin:10px 0 0 0}
|
|
||||||
.mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}
|
|
||||||
.mp h3 {margin:0 0 0 4ex}
|
|
||||||
.mp dt {margin:0;clear:left}
|
|
||||||
.mp dt.flush {float:left;width:8ex}
|
|
||||||
.mp dd {margin:0 0 0 9ex}
|
|
||||||
.mp h1,.mp h2,.mp h3,.mp h4 {clear:left}
|
|
||||||
.mp pre {margin-bottom:20px}
|
|
||||||
.mp pre+h2,.mp pre+h3 {margin-top:22px}
|
|
||||||
.mp h2+pre,.mp h3+pre {margin-top:5px}
|
|
||||||
.mp img {display:block;margin:auto}
|
|
||||||
.mp h1.man-title {display:none}
|
|
||||||
.mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}
|
|
||||||
.mp h2 {font-size:16px;line-height:1.25}
|
|
||||||
.mp h1 {font-size:20px;line-height:2}
|
|
||||||
.mp {text-align:justify;background:#fff}
|
|
||||||
.mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}
|
|
||||||
.mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}
|
|
||||||
.mp u {text-decoration:underline}
|
|
||||||
.mp code,.mp strong,.mp b {font-weight:bold;color:#131211}
|
|
||||||
.mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}
|
|
||||||
.mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}
|
|
||||||
.mp b.man-ref {font-weight:normal;color:#434241}
|
|
||||||
.mp pre {padding:0 4ex}
|
|
||||||
.mp pre code {font-weight:normal;color:#434241}
|
|
||||||
.mp h2+pre,h3+pre {padding-left:0}
|
|
||||||
ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}
|
|
||||||
ol.man-decor {width:100%}
|
|
||||||
ol.man-decor li.tl {text-align:left}
|
|
||||||
ol.man-decor li.tc {text-align:center;letter-spacing:4px}
|
|
||||||
ol.man-decor li.tr {text-align:right;float:right}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<!--
|
|
||||||
The following styles are deprecated and will be removed at some point:
|
|
||||||
div#man, div#man ol.man, div#man ol.head, div#man ol.man.
|
|
||||||
|
|
||||||
The .man-page, .man-decor, .man-head, .man-foot, .man-title, and
|
|
||||||
.man-navigation should be used instead.
|
|
||||||
-->
|
|
||||||
<body id='manpage'>
|
|
||||||
<div class='mp' id='man'>
|
|
||||||
|
|
||||||
<div class='man-navigation' style='display:none'>
|
|
||||||
<a href="#NAME">NAME</a>
|
|
||||||
<a href="#SYNOPSIS">SYNOPSIS</a>
|
|
||||||
<a href="#DESCRIPTION">DESCRIPTION</a>
|
|
||||||
<a href="#OPTIONS">OPTIONS</a>
|
|
||||||
<a href="#EXAMPLES">EXAMPLES</a>
|
|
||||||
<a href="#AUTHOR">AUTHOR</a>
|
|
||||||
<a href="#REPORTING-BUGS">REPORTING BUGS</a>
|
|
||||||
<a href="#SEE-ALSO">SEE ALSO</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<ol class='man-decor man-head man head'>
|
|
||||||
<li class='tl'>git-generate-changelog(1)</li>
|
|
||||||
<li class='tc'></li>
|
|
||||||
<li class='tr'>git-generate-changelog(1)</li>
|
|
||||||
</ol>
|
|
||||||
|
|
||||||
<h2 id="NAME">NAME</h2>
|
|
||||||
<p class="man-name">
|
|
||||||
<code>git-generate-changelog</code> - <span class="man-whatis">Generate changelog from github</span>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2 id="SYNOPSIS">SYNOPSIS</h2>
|
|
||||||
|
|
||||||
<p><code>git generate-changelog</code> [-h|--help] [-u|--user] [-p|--project]</p>
|
|
||||||
|
|
||||||
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
|
||||||
|
|
||||||
<p>Automatically generate change log from your tags, issues, labels and pull requests on GitHub.</p>
|
|
||||||
|
|
||||||
<h2 id="OPTIONS">OPTIONS</h2>
|
|
||||||
|
|
||||||
<p> -u, --user [USER]</p>
|
|
||||||
|
|
||||||
<p> Username of the owner of target GitHub repo</p>
|
|
||||||
|
|
||||||
<p> -p, --project [PROJECT]</p>
|
|
||||||
|
|
||||||
<p> Name of project on GitHub</p>
|
|
||||||
|
|
||||||
<p> -t, --token [TOKEN]</p>
|
|
||||||
|
|
||||||
<p> To make more than 50 requests per hour your GitHub token is required. You can generate it at: https://github.com/settings/tokens/new</p>
|
|
||||||
|
|
||||||
<p> -f, --date-format [FORMAT]</p>
|
|
||||||
|
|
||||||
<p> Date format. Default is %Y-%m-%d</p>
|
|
||||||
|
|
||||||
<p> -o, --output [NAME]</p>
|
|
||||||
|
|
||||||
<p> Output file. Default is CHANGELOG.md</p>
|
|
||||||
|
|
||||||
<p> -b, --base [NAME]</p>
|
|
||||||
|
|
||||||
<p> Optional base file to append generated changes to.</p>
|
|
||||||
|
|
||||||
<p> --bugs-label [LABEL]</p>
|
|
||||||
|
|
||||||
<p> Setup custom label for bug-fixes section. Default is "<strong>Fixed bugs:</strong></p>
|
|
||||||
|
|
||||||
<p> --enhancement-label [LABEL]</p>
|
|
||||||
|
|
||||||
<p> Setup custom label for enhancements section. Default is "<strong>Implemented enhancements:</strong>"</p>
|
|
||||||
|
|
||||||
<p> --issues-label [LABEL]</p>
|
|
||||||
|
|
||||||
<p> Setup custom label for closed-issues section. Default is "<strong>Closed issues:</strong>"</p>
|
|
||||||
|
|
||||||
<p> --header-label [LABEL]</p>
|
|
||||||
|
|
||||||
<p> Setup custom header label. Default is "# Change Log"</p>
|
|
||||||
|
|
||||||
<p> --front-matter [JSON]</p>
|
|
||||||
|
|
||||||
<p> Add YAML front matter. Formatted as JSON because it's easier to add on the command line</p>
|
|
||||||
|
|
||||||
<p> --pr-label [LABEL]</p>
|
|
||||||
|
|
||||||
<p> Setup custom label for pull requests section. Default is "<strong>Merged pull requests:</strong>"</p>
|
|
||||||
|
|
||||||
<p> --[no-]issues</p>
|
|
||||||
|
|
||||||
<p> Include closed issues in changelog. Default is true</p>
|
|
||||||
|
|
||||||
<p> --[no-]issues-wo-labels</p>
|
|
||||||
|
|
||||||
<p> Include closed issues without labels in changelog. Default is true</p>
|
|
||||||
|
|
||||||
<p> --[no-]pr-wo-labels</p>
|
|
||||||
|
|
||||||
<p> Include pull requests without labels in changelog. Default is true</p>
|
|
||||||
|
|
||||||
<p> --[no-]pull-requests</p>
|
|
||||||
|
|
||||||
<p> Include pull-requests in changelog. Default is true</p>
|
|
||||||
|
|
||||||
<p> --[no-]filter-by-milestone</p>
|
|
||||||
|
|
||||||
<p> Use milestone to detect when issue was resolved. Default is true</p>
|
|
||||||
|
|
||||||
<p> --[no-]author</p>
|
|
||||||
|
|
||||||
<p> Add author of pull-request in the end. Default is true</p>
|
|
||||||
|
|
||||||
<p> --usernames-as-github-logins</p>
|
|
||||||
|
|
||||||
<p> Use GitHub tags instead of Markdown links for the author of an issue or pull-request.</p>
|
|
||||||
|
|
||||||
<p> --unreleased-only</p>
|
|
||||||
|
|
||||||
<p> Generate log from unreleased closed issues only.</p>
|
|
||||||
|
|
||||||
<p> --[no-]unreleased</p>
|
|
||||||
|
|
||||||
<p> Add to log unreleased closed issues. Default is true</p>
|
|
||||||
|
|
||||||
<p> --unreleased-label [label]</p>
|
|
||||||
|
|
||||||
<p> Setup custom label for unreleased closed issues section. Default is "<strong>Unreleased:</strong>"</p>
|
|
||||||
|
|
||||||
<p> --[no-]compare-link</p>
|
|
||||||
|
|
||||||
<p> Include compare link (Full Changelog) between older version and newer version. Default is true</p>
|
|
||||||
|
|
||||||
<p> --include-labels x,y,z</p>
|
|
||||||
|
|
||||||
<p> Only issues with the specified labels will be included in the changelog.</p>
|
|
||||||
|
|
||||||
<p> --exclude-labels x,y,z</p>
|
|
||||||
|
|
||||||
<p> Issues with the specified labels will be always excluded from changelog. Default is 'duplicate,question,invalid,wontfix'</p>
|
|
||||||
|
|
||||||
<p> --bug-labels x,y,z</p>
|
|
||||||
|
|
||||||
<p> Issues with the specified labels will be always added to "Fixed bugs" section. Default is 'bug,Bug'</p>
|
|
||||||
|
|
||||||
<p> --enhancement-labels x,y,z</p>
|
|
||||||
|
|
||||||
<p> Issues with the specified labels will be always added to "Implemented enhancements" section. Default is 'enhancement,Enhancement'</p>
|
|
||||||
|
|
||||||
<p> --between-tags x,y,z</p>
|
|
||||||
|
|
||||||
<p> Change log will be filled only between specified tags</p>
|
|
||||||
|
|
||||||
<p> --exclude-tags x,y,z</p>
|
|
||||||
|
|
||||||
<p> Change log will exclude specified tags</p>
|
|
||||||
|
|
||||||
<p> --exclude-tags-regex [REGEX]</p>
|
|
||||||
|
|
||||||
<p> Apply a regular expression on tag names so that they can be excluded, for example: --exclude-tags-regex ".*+\d{1,}"</p>
|
|
||||||
|
|
||||||
<p> --since-tag x</p>
|
|
||||||
|
|
||||||
<p> Change log will start after specified tag</p>
|
|
||||||
|
|
||||||
<p> --due-tag x</p>
|
|
||||||
|
|
||||||
<p> Change log will end before specified tag</p>
|
|
||||||
|
|
||||||
<p> --max-issues [NUMBER]</p>
|
|
||||||
|
|
||||||
<p> Max number of issues to fetch from GitHub. Default is unlimited</p>
|
|
||||||
|
|
||||||
<p> --release-url [URL]</p>
|
|
||||||
|
|
||||||
<p> The URL to point to for release links, in printf format (with the tag as variable).</p>
|
|
||||||
|
|
||||||
<p> --github-site [URL]</p>
|
|
||||||
|
|
||||||
<p> The Enterprise Github site on which your project is hosted.</p>
|
|
||||||
|
|
||||||
<p> --github-api [URL]</p>
|
|
||||||
|
|
||||||
<p> The enterprise endpoint to use for your Github API.</p>
|
|
||||||
|
|
||||||
<p> --simple-list</p>
|
|
||||||
|
|
||||||
<p> Create simple list from issues and pull requests. Default is false.</p>
|
|
||||||
|
|
||||||
<p> --future-release [RELEASE-VERSION]</p>
|
|
||||||
|
|
||||||
<p> Put the unreleased changes in the specified release number.</p>
|
|
||||||
|
|
||||||
<p> --release-branch [RELEASE-BRANCH]</p>
|
|
||||||
|
|
||||||
<p> Limit pull requests to the release branch, such as master or release</p>
|
|
||||||
|
|
||||||
<p> --http-cache</p>
|
|
||||||
|
|
||||||
<p> Use HTTP Cache to cache Github API requests (useful for large repos) Default is true.</p>
|
|
||||||
|
|
||||||
<p> --[no-]cache-file [CACHE-FILE]</p>
|
|
||||||
|
|
||||||
<p> Filename to use for cache. Default is /tmp/github-changelog-http-cache</p>
|
|
||||||
|
|
||||||
<p> --cache-log [CACHE-LOG]</p>
|
|
||||||
|
|
||||||
<p> Filename to use for cache log. Default is /tmp/github-changelog-logger.log</p>
|
|
||||||
|
|
||||||
<p> --[no-]verbose</p>
|
|
||||||
|
|
||||||
<p> Run verbosely. Default is true</p>
|
|
||||||
|
|
||||||
<p> -v, --version</p>
|
|
||||||
|
|
||||||
<p> Print version number</p>
|
|
||||||
|
|
||||||
<p> -h, --help</p>
|
|
||||||
|
|
||||||
<p> Displays Help</p>
|
|
||||||
|
|
||||||
<h2 id="EXAMPLES">EXAMPLES</h2>
|
|
||||||
|
|
||||||
<h2 id="AUTHOR">AUTHOR</h2>
|
|
||||||
|
|
||||||
<p>Written by Petr Korolev sky4winder@gmail.com</p>
|
|
||||||
|
|
||||||
<h2 id="REPORTING-BUGS">REPORTING BUGS</h2>
|
|
||||||
|
|
||||||
<p><<a href="https://github.com/skywinder/github-changelog-generator/issues" data-bare-link="true">https://github.com/skywinder/github-changelog-generator/issues</a>></p>
|
|
||||||
|
|
||||||
<h2 id="SEE-ALSO">SEE ALSO</h2>
|
|
||||||
|
|
||||||
<p><<a href="https://github.com/skywinder/github-changelog-generator/" data-bare-link="true">https://github.com/skywinder/github-changelog-generator/</a>></p>
|
|
||||||
|
|
||||||
|
|
||||||
<ol class='man-decor man-foot man foot'>
|
|
||||||
<li class='tl'></li>
|
|
||||||
<li class='tc'>November 2016</li>
|
|
||||||
<li class='tr'>git-generate-changelog(1)</li>
|
|
||||||
</ol>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -51,10 +51,6 @@ Automatically generate change log from your tags, issues, labels and pull reques
|
|||||||
|
|
||||||
Setup custom header label. Default is "# Change Log"
|
Setup custom header label. Default is "# Change Log"
|
||||||
|
|
||||||
--front-matter [JSON]
|
|
||||||
|
|
||||||
Add YAML front matter. Formatted as JSON because it's easier to add on the command line
|
|
||||||
|
|
||||||
--pr-label [LABEL]
|
--pr-label [LABEL]
|
||||||
|
|
||||||
Setup custom label for pull requests section. Default is "**Merged pull requests:**"
|
Setup custom label for pull requests section. Default is "**Merged pull requests:**"
|
||||||
@@ -83,10 +79,6 @@ Automatically generate change log from your tags, issues, labels and pull reques
|
|||||||
|
|
||||||
Add author of pull-request in the end. Default is true
|
Add author of pull-request in the end. Default is true
|
||||||
|
|
||||||
--usernames-as-github-logins
|
|
||||||
|
|
||||||
Use GitHub tags instead of Markdown links for the author of an issue or pull-request.
|
|
||||||
|
|
||||||
--unreleased-only
|
--unreleased-only
|
||||||
|
|
||||||
Generate log from unreleased closed issues only.
|
Generate log from unreleased closed issues only.
|
||||||
@@ -97,7 +89,7 @@ Automatically generate change log from your tags, issues, labels and pull reques
|
|||||||
|
|
||||||
--unreleased-label [label]
|
--unreleased-label [label]
|
||||||
|
|
||||||
Setup custom label for unreleased closed issues section. Default is "**Unreleased:**"
|
Add to log unreleased closed issues. Default is true
|
||||||
|
|
||||||
--[no-]compare-link
|
--[no-]compare-link
|
||||||
|
|
||||||
@@ -127,10 +119,6 @@ Automatically generate change log from your tags, issues, labels and pull reques
|
|||||||
|
|
||||||
Change log will exclude specified tags
|
Change log will exclude specified tags
|
||||||
|
|
||||||
--exclude-tags-regex [REGEX]
|
|
||||||
|
|
||||||
Apply a regular expression on tag names so that they can be excluded, for example: --exclude-tags-regex ".*\+\d{1,}"
|
|
||||||
|
|
||||||
--since-tag x
|
--since-tag x
|
||||||
|
|
||||||
Change log will start after specified tag
|
Change log will start after specified tag
|
||||||
@@ -163,22 +151,6 @@ Automatically generate change log from your tags, issues, labels and pull reques
|
|||||||
|
|
||||||
Put the unreleased changes in the specified release number.
|
Put the unreleased changes in the specified release number.
|
||||||
|
|
||||||
--release-branch [RELEASE-BRANCH]
|
|
||||||
|
|
||||||
Limit pull requests to the release branch, such as master or release
|
|
||||||
|
|
||||||
--http-cache
|
|
||||||
|
|
||||||
Use HTTP Cache to cache Github API requests (useful for large repos) Default is true.
|
|
||||||
|
|
||||||
--[no-]cache-file [CACHE-FILE]
|
|
||||||
|
|
||||||
Filename to use for cache. Default is /tmp/github-changelog-http-cache
|
|
||||||
|
|
||||||
--cache-log [CACHE-LOG]
|
|
||||||
|
|
||||||
Filename to use for cache log. Default is /tmp/github-changelog-logger.log
|
|
||||||
|
|
||||||
--[no-]verbose
|
--[no-]verbose
|
||||||
|
|
||||||
Run verbosely. Default is true
|
Run verbosely. Default is true
|
||||||
|
|||||||
@@ -12,31 +12,6 @@ describe GitHubChangelogGenerator::OctoFetcher do
|
|||||||
|
|
||||||
let(:fetcher) { GitHubChangelogGenerator::OctoFetcher.new(options) }
|
let(:fetcher) { GitHubChangelogGenerator::OctoFetcher.new(options) }
|
||||||
|
|
||||||
describe "#check_github_response" do
|
|
||||||
context "when returns successfully" do
|
|
||||||
it "returns block value" do
|
|
||||||
expect(fetcher.send(:check_github_response) { 1 + 1 }).to eq(2)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context "when raises Octokit::Unauthorized" do
|
|
||||||
it "aborts" do
|
|
||||||
expect(fetcher).to receive(:sys_abort).with("Error: wrong GitHub token")
|
|
||||||
fetcher.send(:check_github_response) { raise(Octokit::Unauthorized) }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context "when raises Octokit::Forbidden" do
|
|
||||||
it "sleeps and retries and then aborts" do
|
|
||||||
retry_limit = GitHubChangelogGenerator::OctoFetcher::MAX_FORBIDDEN_RETRIES - 1
|
|
||||||
allow(fetcher).to receive(:sleep_base_interval).exactly(retry_limit).times.and_return(0)
|
|
||||||
|
|
||||||
expect(fetcher).to receive(:sys_abort).with("Exceeded retry limit")
|
|
||||||
fetcher.send(:check_github_response) { raise(Octokit::Forbidden) }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "#fetch_github_token" do
|
describe "#fetch_github_token" do
|
||||||
token = GitHubChangelogGenerator::OctoFetcher::CHANGELOG_GITHUB_TOKEN
|
token = GitHubChangelogGenerator::OctoFetcher::CHANGELOG_GITHUB_TOKEN
|
||||||
context "when token in ENV exist" do
|
context "when token in ENV exist" do
|
||||||
@@ -451,20 +426,6 @@ describe GitHubChangelogGenerator::OctoFetcher do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "#querystring_as_hash" do
|
|
||||||
it "works on the blank URL" do
|
|
||||||
expect { fetcher.send(:querystring_as_hash, "") }.not_to raise_error
|
|
||||||
end
|
|
||||||
|
|
||||||
it "where there are no querystring params" do
|
|
||||||
expect { fetcher.send(:querystring_as_hash, "http://example.com") }.not_to raise_error
|
|
||||||
end
|
|
||||||
|
|
||||||
it "returns a String-keyed Hash of querystring params" do
|
|
||||||
expect(fetcher.send(:querystring_as_hash, "http://example.com/o.html?str=18&wis=12")).to include("wis" => "12", "str" => "18")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "#fetch_commit" do
|
describe "#fetch_commit" do
|
||||||
context "when API call is valid", :vcr do
|
context "when API call is valid", :vcr do
|
||||||
it "returns commit" do
|
it "returns commit" do
|
||||||
|
|||||||
@@ -1,42 +0,0 @@
|
|||||||
# frozen_string_literal: true
|
|
||||||
RSpec.describe GitHubChangelogGenerator::Options do
|
|
||||||
describe "#initialize" do
|
|
||||||
context "with known options" do
|
|
||||||
it "instantiates successfully" do
|
|
||||||
expect(described_class.new(user: "olle")[:user]).to eq("olle")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context "with unknown options" do
|
|
||||||
it "raises an error" do
|
|
||||||
expect do
|
|
||||||
described_class.new(
|
|
||||||
git_remote: "origin",
|
|
||||||
strength: "super-strength",
|
|
||||||
wisdom: "deep"
|
|
||||||
)
|
|
||||||
end.to raise_error("[:strength, :wisdom]")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "#[]=(key, value)" do
|
|
||||||
let(:options) { described_class.new(git_remote: "origin") }
|
|
||||||
|
|
||||||
context "with known options" do
|
|
||||||
it "sets the option value" do
|
|
||||||
expect do
|
|
||||||
options[:git_remote] = "in the cloud"
|
|
||||||
end.to change { options[:git_remote] }.to "in the cloud"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context "with unknown options" do
|
|
||||||
it "raises an error" do
|
|
||||||
expect do
|
|
||||||
options[:charisma] = 8
|
|
||||||
end.to raise_error(":charisma")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -85,6 +85,10 @@ describe GitHubChangelogGenerator::Reader do
|
|||||||
context "angular.js.md" do
|
context "angular.js.md" do
|
||||||
it { is_expected.to be_an(Array) }
|
it { is_expected.to be_an(Array) }
|
||||||
it { is_expected.not_to be_empty }
|
it { is_expected.not_to be_empty }
|
||||||
|
it do
|
||||||
|
pending("Implement heading_level for parser.")
|
||||||
|
expect(subject.count).to eq(134)
|
||||||
|
end
|
||||||
# it do
|
# it do
|
||||||
# pending('Implement heading_level for parser.')
|
# pending('Implement heading_level for parser.')
|
||||||
# expect(subject.first).to include('version' => '1.4.0-beta.6 cookie-liberation')
|
# expect(subject.first).to include('version' => '1.4.0-beta.6 cookie-liberation')
|
||||||
|
|||||||
Reference in New Issue
Block a user